自分用の検討メモ。http://stackoverflow.com/questions/6834537/packaging-a-node-js-webapp-as-a-normal-desktop-app を参考にした。結論から言うと、Electronにした。いささか無理やりな方法で。
デスクトップ GUI フレームワークに自分が求めるもの
必須
- クロスプラットフォームであること。Mac、Win、Linuxで動いて欲しい。クロスコンパイルまでは我慢する。
- ブラウザのレンダリングエンジンを使用するWebKitが使えること。今ベースにするならChromeだろう。
- HTML/CSS ベースで UI を組み立てられること。GUI API でガシガシ作っても、5年もしたら陳腐化しそう。
- 無料であること。Qtにしたかったのだけど、この点で泣く泣く諦める。使いたかったのはWebKitだけなのだけど、それにしてはあまりに大袈裟過ぎる。
- アプリケーションを単一バイナリで配布できること。あれをインストールこれをインストールというのを一般のユーザーにさせたくない。
- httpサーバーを内包して、なんちゃって一人RESTみたいなこともできること。
もし可能なら
- クロスランゲージであること。Golangが念頭にあるのだけど、言語を選ばないものがなおいい。
- iOS、Androidプラットフォームにも今後展開が見込まれるものであって欲しい。
- 単一バイナリが難読化されていること。unzipするだけで中身を見られたくない。
で、散々探して、以下が今のところイケてそう。
Thrust(go-thrust)
当初golang用のgo-thrustを見つけて検討していくうちに、その本体であるThrustが多数のプログラミング言語に対応していることを知り、一気に好印象。星も多数付いている。
go-thrustは思ったよりずっと簡単にチュートリアルを起動でき、自分のGolangコードにもあっさり移植できた。go build
でスタンドアロンのバイナリをビルドできるのが最高。
まだMac環境でしか試していないけど、go run
でGUIを起動するとメニューが表示されたりされなかったり、微妙に不安定。go build
でバイナリを作れば大丈夫そうではある。
なぜかRubyには未対応。Rubyにも対応してくれればさらによいのだけど、構造がそこそこ簡素なので、腕に覚えのある人がちょっと頑張ればRubyにも移植できそうな雰囲気。もっといろんな言語に移植されて人気出て欲しい。
HTML/CSS/HTTPサーバー周りを直接サポートしているわけではないので、そのあたりは自前で導入が必要。逆に言えば好きなものを使えばよい。自分の場合は既存のコードが既にHTML/CSSベースだったので話が早かった。
ここの記事がわかりやすい。
追記: thrust-goのメニュー追加が今のところ動かない。もしかするとMac OS X El Capitanがらみかも。
追記: 今のところカット/コピー/貼り付けという基本操作が使えないことが判明...惜しい。さらに微妙に不安定な動作も追い打ちをかけた。結局、go-thrustはやめて以下のElectronに乗り換えた。
追伸
Thrustと似たようなフレームワークでCFE2Goというのもあった。しかしこちらはネイティブUI画面のためにC言語のソースなどが多数あり、go build
一発というわけにはいかなさそう。せっかくGolangを使うのだから、今時Makeファイルとか使いたくない。
Electron
今急速に伸びているらしきJS+Chromeベースのフレームワーク。クロスプラットフォームであり、単体バイナリも作れる。機能がかなり豊富で、デフォルトのデザインもなかなか美しい。
基本JS以外の言語は念頭にない。すごく未練が残るのだけど、Golangと簡単に連携できなさそうなので今回は残念ながらパス。JSだけでアプリを作るなら今はこれだろう。Golangと連携できないかと思っていろいろ探したけどめぼしいものが今のところ見当たらず。
追記: GoでHTTPサーバーを作ってそれをElectronに内蔵すればいけそうな気がしてきた。記事を書いたときはElectronで配布可能なスタンドアロンアプリを作れることに気付いてなかった。ごめんなさいごめんなさい。
ただしMacで開発中にクリップボードが効かなくなることがあったのでこの方法で回避が必要かも。
Nw.js
旧Node-webkitだとのこと。こちらもElectronと基本的に同じ特性だけど、やや押され気味か。~~こちらにはgolang-nwというバインディングがあるのだけど、うまく動かなかったのでパス。~~ちゃんと動きました。ごめんなさいごめんなさい。
gxui
期待の新星(しかも公式)かと思いきや、早々にディスコンになってた...すごく星集まってるのに...
ui
名前はそっけないけど、もしやいけるか?「まだ死んでない」というか「まだまだ作り中です」と言ってるけど。