🐻

[Laravel] Bear のメモを Laravel で取得する

bear-sync というパッケージを使うと、Bear のメモを Laravel で取得できるようになるらしい。 個人的に Bear をよく使っているので、bear-sync を使ってみた。

使い方

$ composer require calebporzio/bear-sync
$ php artisan tinker
>>> $note = BearSync\BearNote::whereTitle('2020/02/08')->first()
=> BearSync\BearNote {#2983
     id: "529",
     title: "2020/02/08",
     raw_content: """
       # 2020/02/08\n
       \n
       content\n
       """,
   }
>>> $note->content
=> """
   \n
   content\n
   """

なんでそんなことができるのか

Where are Bear’s notes located によれば、Bear のメモは SQLite に保存されていて、その場所も公開されている。 だから、Bear の SQLite に接続できればメモを取得できることになる。

bear-sync は、Bear の SQLite に Eloquent でアクセスすることによって、Laravel で Bear のメモを取得することを可能にしている。

何に活用できるか

  • Bear のノートを Laravel 製のブログに投稿する
  • Bear のノートとサイトの記事を同期する (fwartner/bearsaw)
  • 独自の方法で他のサービスに移行する

本当なら Laravel から Bear のメモを編集したいところだけど、公式も以下のように警告しているので、

For most users in most situations, we highly recommend not doing this.

Where are Bear’s notes located

このパッケージも安全面を考慮してか、Laravel から Bear のメモを編集できないようになっていて、 編集しようとすると次のようにエラーになる。

>>> $note->title = "2020/02/08 (土)"
=> "2020/02/08 (土)"
>>> $note->save()
Illuminate/Database/QueryException with message 'SQLSTATE[HY000]: General error: 1 no such table: bear_notes (SQL: update "bear_notes" set "title" = 2020/02/08 (土), "updated_at" = 2020-02-08 03:33:09 where "id" = 529)'

編集ができれば以下のようなことも可能になるが、

  • 独自の方法でバックアップする
  • Bear を Laravel のコンテンツ保存場所として利用する
  • 書き換え処理を自動化する

Bear のメモが壊れる可能性が高いので、どうしても編集したい場合は以下のポイントに気をつける必要がある。

  • DB のコピーを作成する
  • DB 構造を変えない
  • フラグや外部キーは編集しない
  • Bear を終了しておく

参考: Access Bear Notes in Laravel - Laravel News