EY-Office ブログ

Electron to Browser(2)

前回 の続きです、
ブラウザー用にReact等で作ったアプリを、いろいろな理由からElectronベースのデスクトップアプリに移行する事は ままあると思います。しかし現在取り組んでいるのは逆で、 Electronベースのデスクトップアプリをブラウザーベースに移行しています。

Electron to Browser

ストレージの移行

前回 書いた移行予定ですが、そのまま行きませんでした ^^);

予定:主要データはIndexedDB 上にNeDBのサブセットの互換ライブラリーを作り対応

NeDBを調べていたら Browser version が有りました!
Browser versionのデータ保存は IndexedDB, Web SQL, LocalStorage から利用可能なものを、この優先順位で使うようになっており、モダンブラウザーではIndexedDBが使われます。

ということでNeDBのサブセットの互換ライブラリーを作らずに済みました !!

予定:画像は IndexedDBに簡単なラッパーを作り対応

NeDBが使えるので、画像もNeDBに格納する事にしました。

ただし、NeDBはバイナリーは格納出来ないのでBase64で格納する事にしました、imgタグはData URLs(Base64)をサポートしているので、かえってコードはシンプルになりました。

ただし、画像データの読出し部分をViewの部分で行うとフレームワークがコンポーネントを非同期で描画するので画面に複数の画像があると、最初の画像取得のコールバックが実行される前に次の画像取得が始まってしまい、画像が正しく表示されない問題が発生してしまいまい悩みました。
そこで、Model部分でPromise.allを使い、同期的に全画像を読出し事で対応しました。

Electron機能の削除

こちらは、ほぼ問題無く取り除けました。

まとめ

今までElectron上で動いていた画面がブラウザー上に表示され動作した時には感動しました。理論的には動くのはわかっていましたが、現実として動くのにはカタルシスを感じました。

まだアプリとしての機能が移行出来たのではなく、これから完成度を高めるのは工数がかかると思いますがElectronベースのデスクトップアプリをブラウザーベースに移行出来る事がわかり、今回の検証作業は終わりました。

- about -

EY-Office代表取締役
・プログラマー
吉田裕美の
開発者向けブログ