業務アプリケーションをElectronで作ってみた話をしてきました #gbdaitokai #忘年会議
はじめに
このエントリーは、Electron Advent Calendar 2015の13日目の記事です。
公開資料
発表で利用した資料はこちらです。 -> スライド
スライドは、jupyterにdamianavila/RISEの拡張を入れて作りました。
公開当日は、nbviewerのサイトの調子が良くなかったのかメンテナンスだったのか見えませんでしたが、現在は見えるようになりました。
おまえ、誰よ
普段は、PHPとScalaを使った社内BIのWebアプリケーションを開発しています。
ここ1年位の仕事を振り返ってみたエントリは、こちらです。
参加した経緯
以前から忘年会議の会場であるRyotei 座・スタジアムに一度行ってみて喋ってみたいと思ってました。
今年、いいタイミングで飛行機のチケットとホテルが確保できた為、参加することにしました。
スライドの補足
ここで言うスタンプラリーは、業務端末にソフトウェアのインストール際にいろいろな申請が必要であることを指します。 その工程を開発段階から実際にオペレーションする人に強いるのは出来るだけ避けたいと考えていました。
もちろんがっつり開発するのであれば必要な申請はすべきですが、まだプロトタイプも出来てないし、 どんなプロダクトになるのか不明なうちは簡単に使えるようにしておくのがベターだと思い、こういう判断をしました。
VBAを選択しなかった理由は、継続的にリリースするには今時のビルドパイプラインが構築しやすい言語がいいと思ったからです。 確かに探せば手法は見つかりますが、一から構築するには手間が掛かり過ぎると思ったので、既存のWebアプリケーションのラインに間借りする事が出来るメリットを優先しました。
ボイラープレートからReact.jsに関する部分をMithril.jsに置き換えて、デプロイに関するgulpのタスクを追加したのをベースに開発をしました。
普段は、Angular + Typescript + Gruntでやっているので、Babel(ES6) + Mithril.jsの習得には、そんなかからないだろうと甘く見てましたが、 Babel(ES6)が初だといろいろと調べながら進めることになったので、Typescriptとの違いなどでハマることが多かったように思います。
Mithril.jsで一番参考になったのは、Dave’s guide to Mithril.js Part 1の記事でした。 特にイベント発火とViewModelのやり取りをどう扱って、画面にどう反映させるのかが参考になりました。
IndexedDBやLocalStorageを使わなかったのは、両方とも使い方を知らなかったのと、Excelから取り出したJSONが大きかったので、 一旦ファイルに保存してから必要なデータだけをキャッシュ出来るようにしたかったためです。
Loki.jsであれば、IndexedDBとファイルのどちらでも利用できるので、上手く使い分けて行きたいと思っています。 が、minimongoでIsomorphic Storageも気になるので試してみたいと思っています。
今後このシステムが発展した場合、Electronとサーバーサイドでのデータの持ち方や扱い方については、明確にしておかないと無駄が発生する可能性があるので考慮しておきたいと思っています。
やってみた感想
メインがサーバーサイドのエンジニアであるため、片手間でフロントエンドをやるのはやはり厳しいと感じました。
今回作ったのはあくまでもプロトタイプなので、今後の方針次第によっていろいろと変化していくと思います。
今回は一人だけで作ったのですが、正式にチームで作り始めるとなるともう少しフレームワークの選定やデプロイまでの検証も必要になってくると思います。 また、bowerに依存している箇所をnpmに集約したいので、gulp + bowerでやっているCSSフレームワークやfont-awesomeに関する箇所をどのように変えていけば良いのか、情報を探してみたいと思います。
デスクトップアプリもWebと同じように作っていけるElectronは、業務アプリケーションとしての選択肢としてあり得ると思います。 Node.jsのライブラリがそのままWebアプリケーションから呼び出せる感覚は新鮮でした。
さいごに
忘年会議のLTの内容が皆さんかなり尖っていて、技術方向に全振りした自分の内容は面白い要素ゼロだったので完全アウェーな気分でした。 ですが、あの場所でLTすることが今回の最大の目的だったので、最後までやりきれて感無量でした。
LTの猛者でまだあの場所でLTをされてない方は、一度でもいいので体験してもらいたいと思いました。
次回は、座駆動LT大会20160220らしいので、是非参加してみてはいかがでしょうか?