2013年1月7日月曜日

HTML+CSS+JavaScriptでデスクトップアプリを作れるフレームワークの調査

Win、Linux、Mac上で動くクロスプラットフォームなデスクトップアプリケーションを開発したいと思い、最近流行り?なHTML+CSS+JavaScriptのWeb3種の神器でデスクトップアプリケーションを開発できるフレームワークを調べました。

TideSDK

元々Appceleratorという会社がTitanium Desktopという名前で開発していたフレームワーク。
モバイル版のTitanium Mobileの方が有名ですよね。
Titanium Mobileに注力するためかTitanium Desktopは捨てられ、TideSDKという名前に変えてコミュニティ主導の開発になりました。

こういう歴史もあるので先行きが若干不安ですが、コミットログやブログ等を見る限り更新は順調に続けられているようです。
元々会社主導で開発していたためかクオリティも高くドキュメントもそこそこ充実しています。
特徴的な機能としてはJavaScriptの他にRuby, Python, PHPを使うこともできるので、これらの言語を使ってクロスプラットフォームなデスクトップアプリケーションを作るならかなり魅力的な選択肢になるのではないかと思います。

Wunderlistという最近流行りのクロスプラットフォームなTodo管理ソフトはこのTide SDKで作られているらしい。

Chromium Embedded Framework (CEF)

Google Chromeのコア部分を抜き出してブラウザコントロールとして他のアプリケーションに埋め込めるようにしたもの。なのでChromeでサポートされている最新のHTML5やCSS3のテクノロジーと高速なV8 JavaScriptエンジンを手軽に使用できるのが魅力(ちなみにTide SDKはJavaScriptCoreが使われているらしい)。元々のAPIはC/C++だが、.NET、Delphi、Java、Python用のバインディングも存在します。

Googleのプロジェクトではなく普通のオープンソースのプロジェクトですが、開発は活発に行われているようです。
ドキュメントはWikiにちょろっと書いてあるだけで、Wikiを読んでも結局詳しくはヘッダーのコメント見てね(・ω<)ってのが多いです。
しかもTide SDKみたいに日本語の入門記事はおろか英語の入門記事すらもほとんどないので、素人お断り感が半端ないです。

採用例としてはEvernoteやSpotifyのクライアントアプリケーションがあるので、本格的なアプリを開発するのにも十分使えそうです。
AdobeのBracketsというオープンソースのエディタもCEFが使われています。

AppJS

上のCEFに加えて今流行のNode.jsをバックエンドに使い、Nodeモジュールを読み込めるようにしたもの。
ポテンシャルはあるが更新頻度がイマイチなのが残念。

node-webkit

AppJSと同様Node.jsを組み込んでNodeモジュールを使えるようにしたフレームワーク。
AppJSはCEFとNodeが別々に動いてお互い通信しあう形だが、こちらは両者のソースコードを抜き出してイベントループを1個にまとめて無理やり1つのスレッドで動かすという荒業をやってのけている。
そのためAppJS方式よりもパフォーマンス面で有利だと主張している。
開発はオープンソースだがIntelのOpen Source Technology Centerが主導で行なっている。

実際試したがまだかなりバグがある模様。
でも更新はかなり頻繁なのでこれからに期待!

まとめ

Nodeモジュールが使用出来るAppJSとnode-webkitの2つはかなり魅力的だが、まだどちらも開発途上で本格的なアプリケーション開発に使用するにはまだしばらく様子見といった所。
現状でHTML+CSS+JSで本格的なデスクトップアプリケーションを作るならTide SDKかCEFになるが、Tide SDKはフルスタックなフレームワークなのでネイティブなウィンドウメニュー等もサポートしており、フレームワーク内で完結するのであればこちらを使用した方が楽にできると思います。
CEFはフレームワークというよりブラウザコントロールなので、ネイティブなメニューを作ったりするのは自分でコード書かないといけませんが、その分自由度があります。
高速なV8が使えるのも魅力ですね。

それにしても最近Node.jsであったりTitaniumであったりJavaScriptでサーバサイドからモバイル、デスクトップアプリまでかなり応用例が増えてきてますね。
これからもJavaScript界隈には注目していきたいです。

0 件のコメント:

コメントを投稿