Boostnoteのメンテナーのsosukesuzukiです。Boostnoteのv0.8.15にて、一部のユーザーのデータが全てあるいは一部が消える(ように見えるバグ)が発生しました。現在では、このバグの対処法がBoostnoteの公式ブログにて掲載されていますが、このバグはElectronを使用するアプリケーションでは発生する可能性が往々にして存在するので、Electronアプリケーション開発者の皆様の目にこの記事が届いてこういったバグが発生することが少なくなって欲しいです。
Boostnoteがデータを保存する仕組み
Boostnoteは、デフォルトでは~/Boostnote
にフォルダやノートの情報を保存します。ですが、任意のディレクトリを保存対象に設定することも可能です。そして、この任意のディレクトリというのはBoostnoteのlocalStorageに記録されています。
DropboxやGoogleDriveを使って複数デバイス間でのノートの同期をさせているユーザーはこの任意のディレクトリを保存対象にする機能を使用している人も多いのではないでしょうか。
冒頭で述べた『一部のユーザー』とはこの機能を使用しているユーザーのことで、特に設定を行わずデフォルトのディレクトリにノートを保存しているユーザーには、このバグは発生していないはずです。
ElectronのlocalStorageの場所
このバグが発生した原因にはElectronがlocalStorageを保存する場所に深く関係があります。Electronで作られたアプリケーションはそのlocalStorageを~/Library/Application Support/**APP_NAME**/Local Storage
に保存します。そして、この**APP_NAME**
は、アプリケーションのpackage.json
のname
やproductName
に依存します。
そろそろ気づいてきたかもしれませんが、v0.8.15のアップデートに含まれるコミットにBoostnoteのpackage.json
にproductName
を追加するものがありました。それまではname: boost
に依存した~/Library/Application Support/boost/Local Storage
にlocalStorageを保存していましたが、このコミットによりlocalStorageを~/Library/Application Support/Boostnote/Local Storage
から参照するようになりました。
※ここで出てくるパスはMacOSでのものです
つまり、原因
つまり、localStorageを保存しているディレクトリの場所が変わったため、localStorageに保存していた情報が参照できなくなったのが原因です。BoostnoteではlocalStorageに、ノートの保存場所の他にUI等のカスタマイズ設定を保存していたため、このアップデートによってデータが消えなかったユーザーも設定が全て飛ぶバグには見舞われたと思います。(僕もその一人)
このバグは致命的なもので、ユーザー的にもメンテナー的にもとても困惑して、しばらく調べて原因を探して、やっとわかったので、モヤモヤしていたユーザーや、他のElectronアプリ開発者様へのTipsとして記事にさせてもらいました。