BT

Android, iOS, Webのコードを共有するためのGoogleのレシピ

| 作者: Sergio De Simone フォローする 13 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2014年12月21日. 推定読書時間: 3 分 |

原文(投稿日:2014/11/26)へのリンク

Google Inboxのエンジニアリングディレクタを務めるGarrick Toubassi氏は先日,氏のチームが3つのプラットフォーム - iOS, Android, そしてWebの"クライアントコードの,およそ3分の2の共有化"を達成したと公表した。そのキーとなっているのは,UIコードのUI依存とロジックを明確に分離したこと,そして,Googleが長年に渡って開発を続けてきた一連のツールの存在だ。

Googleのアプローチが目標とするのは,"私たちがターゲットとするプラットフォームそれぞれにシームレスに適合する,独立したネイティブアプリ"を効率よい方法で開発することだ,と氏は言う。確かに,Inboxのようなアプリは,ネットワーク通信管理やキャッシング,データ永続化のためのローカルストレージなど,数多くのコンポーネントを持っている。3つのプラットフォームすべて別々に実装してメンテナンスしなければならない,というのは合理的なやり方ではない。

Googleが採用したのは,データモデルとアプリケーションロジックをJavaで1回だけ実装して,その上に各プラットフォーム用のネイティブUI層を置く方法だ。データ層とアプリケーションロジックは,2重の責務を持っている。

  • 会話やリマインダ,連絡先,ラベルといった,Inbox固有のモデリング概念。

  • ユーザインターフェース(UI)層にバインド可能な,完全にオブザーバブルなデータモデル。

これら基本部分が,Google独自のツールをいくつか使用して,各プラットフォーム用のネイティブコードに"トランスパイル"されるのだ。

  • Google Web Toolkit (GWT) - Javaで記述されたデータモデルを,Webプラットフォーム用のJavaScriptに変換する。
  • J2ObjC - Javaで記述されたデータモデルを,iOSプラットフォーム用のObjective-Cに変換する。

GWTは長く使用されているオープンソースのツールセットで,AjaxアプリケーションをJavaで開発し,デバッグすることができる。 アプリケーションのデプロイ時には,GWTクロスコンパイラを使って,JavaコードをスタンドアロンのJavaScriptに変換する。Javaのコメントを使用して,JavaコードにJavaScriptコードを埋め込むことも可能だ。

J2ObjCはそれよりも若いツールで,Googleの説明によれば"品質的にはアルファ版とベータ版の中間"にある。クロスプラットフォームのUIツールキットは含まれていない。Toubassi氏の言葉によると,JavaをObjective-Cに変換する場合には,ガベージコレクションから参照カウンタへの移行にトリッキーな部分がある。J2ObjCではこの部分を,オートリリースプールを使って処理する。ガベージコレクションと同じように,Javaのオブジェクトセットは,Objective-Cでアロケートされたプールの内容を使用するのだ。ここでひとつ,具体的な問題としてToubassi氏が挙げるのは,循環参照の発生する可能性に関するものだ。これについては,weakなObjective-Cプロパティにマッピングされた特定のJavaアノテーションを通じて,効率よく処理されている。

Ars TechnicaのRon Amadeo氏との対話でToubassi氏は,このアプローチによる目立ったパフォーマンスへの影響はなく,J2ObjCが生成するコードは,手作業で記述したバージョンのObjective-Cコードと比較して,"オブジェクトの数,オブジェクトグラフの複雑さの面ではほぼ同程度"である,と述べている。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT