今日は、業務システムにElectronを組み入れるという提案をしたいと思います。
Electron のおさらい
Electronは、Chromium + Node で構成された、デスクトップアプリ作成環境です。ビューは Chromium のウェブブラウザとしての機能がそのまま使えます。また、Node を組み込んでいるためにNodeの資産がほぼそのまま流用できます。サーバー機能とブラウザ機能の両方を持った環境とも言えます。
業務システムをウェブベースで作るの無駄じゃないですか?
いろいろな会社で業務システムと呼ばれる社内だけで使われるシステムがあると思います。そういったシステムは最近では何も考えずにウェブフロントを持ち、APIもウェブベースで、RailsやJavaEEなどを使って作られていたりしませんか?
ウェブサーバーの持つオーバーキル感
ウェブサーバーを構成する技術は割とオーバーキル感のあるものが多いです。Apache, Nginx, Rails, JavaEE, servlet container...
本当に自社のユーザーだけが利用するサービスにそんな本格的な技術必要ですか?もっとライトウェイトに作るべきじゃないですか?性能予測して、ピークに合わせたインフラ投資して、それって無駄じゃないですか?
マルチブラウザ問題
マルチブラウザ問題はとても頭の痛い問題です。特に古いIE。企業において、様々な理由からIEを古いバージョンのまま運用するケースも多いです。マルチブラウザ問題によって開発工数がふくれあがるのつらくないですか?
使いにくい操作体系
マルチブラウザ問題にも関連しますが、どうしても社内システムってUIが糞だったりしません?どうしようもないから、Excel使った方がマシってことでExcelを使うシステムが蔓延してません?
そこで、ウェブフロントを Electron に置き換えてみましょう
いくつかパターンを例示してみます。
- Electron + DB / redis
- Electron + non web API + 何か
- Electron + ファイルサーバー
- Electron + MQTT + 何か
- Electron + Windows アプリ
利点1: Chromium 決め打ちで作成できる
開発工数を大幅にショートカットできます。動作確認対象環境はただ一つで済みますし、デバッグする時も chrome / chromium のウェブデベロッパーツールだけ覚えれば可能です。また、無駄に互換用shimとか使わなくてもいいです。
便利な機能が無条件で使えます。Flexbox, localStorage, web worker...
利点2: デスクトップでNodeの機能が使える
ローカルファイルに自由にアクセスができるので、例えば大きなデータの転送を削減したり、ややこしい構成のファイル群を簡単に扱えます。また、みんな大好き Excel も直接いじれます。
ローカルDBなんかも、IndexedDBやnpmの様々なものを動かすことができます。
ユーザーのことを考えた使いやすいアプリケーションを作ることができます。
利点3: アーキテクチャ設計のメリット
多人数が同時にアクセスする(かもしれない)ウェブサーバーよりも、個々人が動かすElectronの方がいろいろ性能想定がしやすいです。ピーク時想定して無駄にインフラ投資するくらいなら、負荷分散した方がコストが安くつくはずです。
APIを使った構成にする場合でも、APIサーバーは、ウェブフロントを作るよりもライトウェイトにしやすいです。ごてごてしたフルスタックフレームワークを使うよりも、APIに特化したミドルウェアの方が使いやすいです。また、HTTP以外のプロトコルを使ったAPIを採用しやすいというのも利点です。(もちろん、これに関しては必ずしも Electron のメリットではないですが、結果的にそういう構成になります)
FAQ
- それVBでもいいんじゃね?
- Electronの方が習得が圧倒的に簡単
- それなりにメモリを食うのでは?
- ブラウザ立ち上げてもやはりメモリを食う点はかわらない
- ツールが乱立するとメモリ大量に喰われる可能性はあるものの、普通は異なる業務ツールをそんなに何個も同時に起動しないはず (さすがに設計間違いではないだろうか)
- 秘匿情報はどうするのか?
- 秘匿度合いに応じて、難読化をしたり、APIサーバーやキューの後ろに隠す
おさらい
- good bye IE
- JavaやRails技術者はElectronを見くびらないほうがいい、あなたの仕事は今にも失われつつある
追記
- アプリをアップデートする仕組みはあるか?
- electron-updater とか