Edited at
TitaniumDay 18

2014 年 Ti.Next の話。

More than 3 years have passed since last update.

みなさまこんにちは、Lanica の井口 @infosia です。ブログ記事を書くのはほぼ一年ぶりです。。。この記事は Titanium Advent Calendar 2014 の 18日目の記事になります!前日の @yagi_ さんのエントリに続いてこちらも悲劇になりそうな予感...w


2014 年 Ti.Next の話

さて、、Ti.Next プロジェクト、2014年・2015年の展開の話です。

ちょっと内容が曖昧な部分もあると思いますが、大人の事情ってことで・・・

Ti.Next ってご存じでしょうか。Ti.Next は Appcelerator が 2013 年中頃からスタートしたプロジェクトで、今までの Titanium の悪いところ・反省点をふまえて作り直し、新しいプラットフォームにも対応させ...ざっくりいうと「次世代のTitaniumを作ろう!」っていうプロジェクトの総称です。Ti.Next 関連のプロジェクトには私もメイン開発者として参加しています。


進捗どうですか? Hyperloop

ちょうど一年ほど前、2013 年 10 月に Jeff Haynie のブログで告知された Hyperloop というプロジェクトを覚えているでしょうか? Hyperloop は、iOS や Android のネイティブ言語である Objective-C や C++、Java での開発をまるごと JavaScript で置き換えてしまおうという「次世代コンパイラ」というコンセプトの野心的なプロジェクトです。ちなみにレポジトリはこちら→ github.com/appcelerator/hyperloop

ちなみに Hyperloop ではこんな感じ↓でネイティブアプリを JavaScript で開発することができます。

しかし、このプロジェクトをウォッチしてる人は気づいていると思いますが、もう半年ぐらい大きな更新がないんですよね...Hyperloop は、複数言語・複数 OS にまたがるネイティブアプリ開発を全部 JavaScript でやってしまおうというけっこう壮大な計画で、壮大すぎて短期的にビジネスインパクトのある展開が難しかったのです。

Hyperloop コンパイラは現時点で iOS、Android と Windows をサポートしているのですが、皆様おなじみの Titanium API も全部 Hyperloop 、モジュールも全部 JavaScript で書き換えてしまおうというプランで、いったいいつまで時間がかかるのやら・・・という状態になっていました。

今年の夏ぐらいまでは地道にアップデートを続けていたのですが、そうこうしているうちに Appcelerator Platform の新しいサービス群がローンチされ、iOS 8 がリリースされ、64bit 対応の義務化が発表され、Titanium が内部で使っている JavaScript ランタイム TiCore の 64bit 化も必要になり...Appcelerator 社内でもバタバタしてなかなかリソースが足りなくなってきました。

ということで、もう少し現実的wで、モジュール開発者や Titanium アプリ開発者のみなさんにもインパクトのある展開をしようということになりました!


2015 年、Titanium に新たな展開?

おそらく、近日中に発表があると思います!本当はこの記事に間に合うはずだったんですが・・・

どうやら間に合わなかったっぽい。

しかしここで何も書かないのも寂しいので、Titanium ファンの皆様に少しだけリークしたいと思います!どこまで書いたらいいか良く分からないので、こんな夢を見たよ、ってことにしておいてくださいw


Titanium の対応プラットフォームがふえるよ!(夢)

現時点で Titanium は iOS, Android などのモバイル OS にネイティブで対応していて、そのほかは Mobile Web という HTML5 的なものでサポート、という状況でした。このネイティブのラインナップに、新たにプラットフォームが加わることになります...という夢を見た!!

(すみません、リリース前なもので...)

※2014/12/26 追記: Titanium SDK for Windows Platform が公開されました!http://www.appcelerator.com/blog/2014/12/windows-platform-preview/

ビジネスユーザにはおなじみのあのプラットフォームですね。タブレットにも入っているあの OS だけじゃなく、モバイルの世界では今ひとつパッとしないあの Phone OS もです。Titanium ってアメリカではけっこうビジネスアプリで使われているので、いろんな事情もあるのかもしれませんね?特に日本では、あのビジネスOSのタブレット端末で Titanium アプリが動くと法人企業には喜ばれるんじゃないでしょうか。あと、いまさらニーズも無いかもしれませんが、もちろんデスクトップでも動きます。メト○アプリってやつですね!


Titanium のコードベースの共通化(夢)

今までの Titanium では各プラットフォームごとに違う言語で Titanium の API を実装していたので、各プラットフォーム間の動作の細かな違いが問題になっていました。モジュールを書く人ならご存じだと思いますが、iOS なら Objective-C、Android なら Java、BlackBerry なら C++ といった感じでコードベースが全く別々だったのです。現在、Appcelerator では Titanium のコードベースの共通化を進めていて、プラットフォーム共通のロジック(値チェックなど)は共通のコードにまとめて、プラットフォームに固有のロジックだけプラットフォームごとに実装しています。

ここで気になるのは、モジュールの書き方だと思うのですが、すべて C++11 で書くことになっています。Titanium API もすべてモジュールがベースになっているのですが、基本的にユーザモジュールと Titanium モジュールの区別は無く、すべてモジュールで、最初からクロスプラットフォームを意識して、プラットフォーム固有の部分と共通の部分を分けて書く、ということになります。iOS は良いとして Android はどう書くの?ってっことですが、Hyperloop をチェックしている人ならご存じだと思うのですが現時点では C++11 + JNI で書くことになってます。でもやっぱり Java で書きたい、というニーズもあるでしょうし、この辺はそのうちもっと作りやすいようになるかもしれませんね。

※2014/12/26追記: Ti.Next の基板となるフレームワークとして HAL (Hyperloop Abstraction Layer) が発表されました!http://www.appcelerator.com/blog/2014/12/introducing-hal/


JS エンジンは全部 JavaScriptCoreをベースに(夢)

JavaScriptCore というのは WebKit に搭載されている JavaScript 実行エンジンなんですが、Ti.Next ではすべてのプラットフォームでこのエンジンが使われることになります。ちなみに詳しい方ならご存じだと思いますが、 iOS の Titanium では現在 TiJSCore という、WebKit KJS というちょっと古いやつがベースになったものが使われてます。もう古いし、そろそろ限界気味なんですよね。最近の Titanium 64bit 対応でバタバタしているのはこれが原因ですし、iOS ではやっと JavaScript エンジンが一般ディベロッパーから簡単に使えるようになってきましたので、「もうそろそろオフィシャルのを使おうぜ!」って感じの流れです。

実はプラットフォーム共通で JavaScriptCore を採用すると Android や他のプラットフォームにも嬉しいことがあります。それは、「JavaScriptエンジンの動作が共通化される」という点です。今までは TiJSCore、Rhino、V8 などプラットフォームごとに別々のエンジンを使っていたせいで、プラットフォームごとに JavaScript エンジンの動作が細かく異なるという困ったことになっていましたが、これが一気に解決されることになります。


詳しくは...

おそらく近日中にオフィシャルな発表があると思います!どこまで書いたらいいか良く分からないので曖昧な表現になった部分もあると思いますが、、バタバタしつつも、いろいろ進めてるよってことで、今日のまとめにしたいと思いますw

さて、次は @atticatticattic さんですね!よろしくお願いします!


※2014/12/26 追記※

Appcelerator のブログにて、Jeff から Ti.Next と HAL(Hyperloop Abstraction Layer)、Windows Platform Preview の詳細が発表されました!