2012 年創立のイスラエルのベンチャ企業 Codename One が,新しい Java SDK を開発した。iOS や Android,BlackBerry,Windows Phone など,多数のモバイルデバイスプラットフォームを単一コードベースでサポートするネイティブアプリケーションが Java で開発可能になる。iOS 用には,同社の提供するクラウドサーバ上で Java コードを C/Objective-C に変換して,生成されたコードをネイティブアプリにコンパイルする方法を採用しているため,開発された Java アプリケーションは iTunes 準拠となる。
Codename One を創立したのは Chen Fishbein 氏と Shai Almog 氏である。Fishbein 氏は Java ME 用標準 UI ツールキット Lightweight User Interface Toolkit (LWUIT) の開発者で,そのリードアーキテクトも務めていた。さらに氏は,最も成功を収めた J2ME 開発ツールキットのひとつである Sprint Wireless Toolkit の開発者でもある。
プラットフォームは現在ベータ版であるが,InfoQ でソフトウェアのダウンロードとテストドライブを実施したところでは,開発は順調に進んでいるようだ。コードをビルドするには,まず同社のクラウドベース Web サイトで対象となるコードベースを指定する。コードがアップロードされてコンパイルが完了すると QRコードが生成される。これを使用して生成されたコードをダウンロードし,対象とするデバイスにインストールする。この結果に興味を持った我々は,創立者のひとりである CEO の Shai Almog 氏にインタビューして,先頃発表された Windows Phone サポートに関して,さらには同社について詳しく尋ねることにした。
InfoQ: Shai さん,初めまして。この製品のアイデアはずっと以前からあったものですが,本当にこれらすべてのプラットフォームを対象とする Java 環境なのでしょうか。
Almog: Java は仮想マシンというよりも,統合されたスタックであり,ツールであり,Java エコシステム全体を指すものです。実行ボタンを押せば動作する,それが Java なのです。ところが実際には,Android でさえも馴染みのないプロセスや特別なツールセット,さらには個々のコンフィギュレーション用のエミュレータを必要としています。"Write Once Run Anyware (WORA)" ではなくなってしまいました。
InfoQ: 動作環境に合わせて変更が必要なものはありますか。
Almog: まったくありません。Codename One はすべてのプラットフォームで動作する,ただひとつの API を提供します。この API は Java 環境に直接的に統合されていて,統合された環境を構築する上で問題となるような,フラグメントによる差異をすべて解決します。
InfoQ: 各プラットフォーム用に JVM を配布する,ということなのでしょうか。
Almog: いいえ,プラットフォームによって異なります。Android では既存の Dalvik 仮想マシンを主に利用します。iOS には Java がないので,Java のクラスを Object C レイヤを実装した C コードに変換しています。実行時には Boehm ガベージコレクタを使用します。Java コードを実行してはいますが,実は Java 仮想マシンではないのです。その他の Rim などのプラットフォームでは,それぞれに提供されている Java 機能のサブセットの範囲に収まるようにコンパイルを行っています。ですから Java 言語に関しては,同一の WORA エクスペリエンスを実現できているのです。
InfoQ: どのリリースでも,すべての機能が全デバイスでサポートされるのでしょうか。
Almog: そうしたいのですが,基本となるデバイスに違いがあるので,それがいつでも可能であるとは限りません。よい例が SQL です – 開発者の希望はあっても,ローエンドのデバイスの中には SQL をサポートしていないものもあります。そのような場合には,個々の環境で何がサポートされているのかを確認するためのクエリを用意しようと思っています。最大限の共通機能を提供して,可能な部分は拡張する,というのが私たちの方針です。
InfoQ: 開発を行う場合,実際にデバイスを所持している必要はありますか。
Almog: 理論上は実機がなくても開発可能です。しかしマウスではアプリケーションのフィーリングを確認できません。パフォーマンスや動作のセンスを正確に把握するためには,実際にデバイスを使って試す必要があります。私たちは iPad の複数のバージョンを所有していますが,微妙な違いがあるという理由からです。
InfoQ: Android はバージョンが多いので,非常に難しいのではないですか。
Almog: 実は iPhone の方が大変なのです。Apple は 4.2 ではこの方法だったものが 4.3 ではまったく違う,というような変更を行います。そのため,突然ビルドが通らなくなるようなことが起こるのです。Android の方がバージョン数は多いのですが,変更の度合いがこれほど大きくはないので,実際のバリエーションは多くありません。
InfoQ: 開発したアプリケーションを使用するために,インストールの必要なものが何かありますか。
Almog: いいえ,すべて自己完結しています。変更の多いターゲット VM はサポートしないことで,安定性を維持できているのです。デバイスはバージョン毎に大きく変更される可能性がありますが,私たちは互換性の維持に努めています。アプリケーション開発者がそれを気に掛ける必要はありません。
InfoQ: Java の経験がある場合の学習曲線はどのようなものですか。
Almog: 本当に,とても簡単です。Swing に似ていますから,Swing 開発者には XML ベースの Android よりずっと馴染みやすいと思います。組み込みデバッガが使用できますし,APK もありません。実行毎にはシミュレータが即座に起動するので,エミュレータの開始を待つ必要もないのです。
InfoQ: Swing は反応がよくない,例えば Windows のネイティブアプリのような操作感覚がない,という指摘もあります。もっと機敏な動作をするために,このプラットフォームではどのようなことをしているのでしょうか。
Almog: Swing UI のカスタマイズは容易ではありません。しかも JDK リリースとの結び付きが強かったため,OS の変更に追随できませんでした。Codename One では,コンポーネントモデルの深い部分でテーマやスタイルをサポートしています。さらに SaaS/オープンソースであるため,Sun/Oracle の開発プロセスの遅さに煩わされずに,アプリケーションのフィールを定期的に更新することができます。これによって,アプリケーションエクスペリエンスの活発な更新を保証します。
InfoQ: 3D グラフィックについてはどうでしょう。
Almog: 今のところ,ゲームとしてのユースケースは回避したいと考えています。ただし将来的には変更されるかも知れません。
InfoQ: I/O や GPS,カメラ,オーディオなど,デバイス固有の機能についてはどうでしょうか。
Almog: 基本的な API はすべてサポートしています。ジェスチャ入力は現在開発中ですが,一部はすでにサポートされています。サポート範囲外の機能が必要な場合に対しては,ネイティブ統合を提供しています。インターフェースを定義すると,プラグインがデバイス用のネイティブコードを生成します。これを使ってネイティブな機能をコールすることができるのです。
InfoQ: 価格設定はどのようになっていますか。
Almog: Basic 版はフリーで,これは今後も続けたいと思っています。コミュニティへの還元が大切だと考えているからです。iOS 以外のプラットフォームはすべて,1ヶ月あたり 100 ビルドまでのデプロイが可能です。ローカルビルドは何回でも可能ですが,ビルドサーバの使用は 100 回までに制限するということです。iOS はビルド負荷が非常に大きいため,月あたり5回までという制限を設けています。1ヶ月当たり9ドルで無制限ビルドの購入もできます。もっと精細な価格スキームも用意しています。例えばクラッシュプロテクションなど,機能単位での追加購入も可能です。
InfoQ: ドキュメントとサポートはどのようになっていますか。
Almog: 100 ページ程度の開発者ガイドが Google doc にあります。コミュニティに対しても執筆補助をお願いしているところです。詳細な JavaDoc をメンテナンスしていますし,Google group メールリストでのサポートにも時間を割いています。
InfoQ: 素晴らしい成果を挙げられているようですが,今後の計画について教えてください。
Almog: たくさんあります。まず9月末には,Windows デバイスのサポートを公開する予定です。それからアプリ内課金の追加,クライアントとシミュレータ用の API 拡張,開発の出発点として使用可能なテンプレートの拡充なども計画しています。Vserv とのパートナーシップも発表したばかりです。開発者がコードを1行も変更せずに,広告を追加することができるようになります。
複数のモバイルプラットフォームをサポートする企業の増加により,Codename One はアプリケーションの新規開発を期間・コストの両面で改善できるポテンシャルを持つことになった。SDK は 同社 Web サイト から無償でダウンロード可能である。