自分がAdobe AIRやHTAではなくTitanium Desktopを選んだ理由

デスクトップアプリを作りたくて、Titanium Desktopにたどり着くまでHTAを触ってみたり、Adobe AIRで作ってみたり、Fire FoxやGoogle Chrome拡張機能を試したりしてた訳ですが。
ぶっちゃけやりたいことをAIRHTA、ブラウザの拡張機能で実現出来るなら、それでいいと思います。
技術はあくまでやりたいことを実現させる為のものですから。

私の場合は、たまたま、自分のスキルとやろうとしていること、ターゲット等から考えると、Titanium Desktopがちょうど良い選択肢だったという事です。


以下、私が個人的にTitanium Desktopいいと感じている事や感想を書いていきます。

Rubyistの自分が感じるメリット。
TitaniumのAPIに用意されていない機能、あるいは用意されている機能でも記述量が多くて面倒くさいのとか、Rubyを使ってしまえる所。標準、組込のライブラリが使えます。
また、Rubygemsも、使いたいものをResourcesディレクトリに突っ込んでrequireすれば使うことが出来ます。

実際の例。
作ろうとしてるアプリにFTPの機能を盛り込みたかった。
AIRで作りはじめていたのですが、現行のAIR 1.5 SDKだと、他のOSネイティブアプリをコールしたりとか出来ないし、AIRAPIFTPのクラスとかないので、生のバイナリデータを読み書きする、Socketクラスを使ってライブラリを書いたりする必要があります*1。さらにいうとSSL/TLS のprotocolを実現するクラスもないから暗号化したやり取りの為にはそこを実装する所からだったり*2
ところがここでRuby(やPython)が使えるとなると、require 'net/ftp'してちょいちょいと書けばやりたいことが実現出来てしまったりすると。富豪プログラミング万歳!


後、AIRで書いてると、セキュリティサンドボックスが結構手間です。
セキュリティの為には仕方がない部分もあるのですが。
Titanium Desktopにはセキュリティサンドボックスがありません。
自分の足を撃ち抜く自由を認めるRubyに親しみを覚えるRubyistな自分としては、 Adobe AIRよりTitanium Desktopがいいなと感じます。ただ、セキュリティサンドボックスが存在しないっていうのは、結構危ないのは確かです。明示的にAIRのようなセキュリティサンドボックスを宣言する機構が欲しいなとは思っていますが・・。


HTAを選択しなかった理由は単純で、アプローチしたい層にOS Xを使う人が入っているからです。それ以外の意味はないです。WindowオンリーならHTAで全然ありなんじゃないかなとも思います。


あと、そもそもこういったRIA全般じゃなくて、 Fire FoxのアドオンとかGoogle Chrome Extensions、Chrome OSみたいにWebアプリでいいじゃないかみたいな話もあると思います。
もしかしたら将来的には全てWebアプリでいいじゃないかみたいな話になるかもしれませんし。
が、今時点でそれでいいのはイノベーターやアーリーアダプターな人たちまでなのではないでしょうか?
私が作ろうとしているアプリは、マジョリティの人たちにアプローチしたいと考えています*3。そういった人たちにもアプローチしたい場合に、インストーラーで入れる普通のアプリですと言えるというのは個人的にとても筋がいいと思っています。
Fire Fox入れて下さいとかGoogle Chrome入れて下さいというのはちょっとどうかなと。
AIRはというと、Flash Playerの普及率は98%とかいってるかもしれませんが、AIRランタイムとなると普及率落ちますよね。AIRシームレスインストールにすれば確かにそんなに悪くないとは思いますが、それよりとっかかりがいいと思います。


他方、JavaScriptの重要性ってどんどんあがってきてますよね。あるいは将来的な話として、HTML5Chrome OS等の指し示すようなWebアプリな世界にうつっていくのだとしても、Titanium DesktopはJavaScriptHTML5WebKitといった技術での実装ですから、親和性も高いと思います。なので、触れておくのは損しないのではないかなと思います。
RubyPython,PHPを使っていて、こういった技術には触れていなかった人がとっかかりにするにもちょうどいい技術なのではないでしょうか?

と、まあ持ち上げておいて最後にアレですが、バージョンが0.8.4とかいってるのでわかるようにまだ正式版じゃないので、結構不安定だったり仕様が変わったりします。これにつきあう覚悟がない場合は、現状では手を出さない方がいいです。

*1:Flex用のFTPライブラリ見つけたんですけど、ちょっと古くてメンテされてないっぽい

*2:ちなみに次期版のAIR2.0にはSecureSocketっていうクラスが用意されています

*3:ラガードの人にもアプローチ出来ればと考えていますが、さすがにそれは難しいかなと思っています