BT

FacebookのMomentsアプリがクロスプラットフォーム開発をC++で実現

| 作者: Sergio De Simone フォローする 17 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2015年7月20日. 推定読書時間: 2 分 |

原文(投稿日:2015/06/25)へのリンク

Facebookの最新アプリのひとつであるMomentsでは,iOSとAndroidでビジネスロジックを共用するためにC++を使用した – 同社エンジニアのAshwin Bharambe, Zack Gomez, Will Ruben各氏は,このように説明している。ここではFacebookの技術者たちによる選択の根拠と,その成果を検証する。

Momentsアプリ開発において同社の技術者たちは,“クライアントのみに注目することで,開発-実行-テストのサイクルを可能な限り短縮するために”,サーバロジックをクライアントに移行する決定をした。この選択の欠点は,最初にターゲットとしていた2つのプラットフォーム – iOSとAndroid – のため,開発しなければならないコード量が増加することだった。

プラットフォームでコードの共有を可能にする方法は数多くあるが,その中からFacebookの技術者たちは,“UIをプラットフォーム専用のコードで記述して,ビジネスロジックはC++を使って共用する”方法を選択した。C++はハイパフォーマンスを実現できる一方で,高いレベルの抽象化に欠けていて,プログラマにメモリ管理を強いる言語である,という評価が一般的だ。それでもFacebookの技術者たちは,std::shared_ptrやラムダ,auto宣言などの新しいC++機能を使うことで,“ハイパフォーマンスでメモリ安全性の高いコードを短期間に開発”できたのだ。

Facebookの技術者たちは,C++層をシンプルにするために,いくつかの基本的な選択を行った。

  • 関数型コーディング,すなわち“生のデータオブジェクトを不変(immutable)のビューモデルにデフォルトで変換する”。
  • “ファイア・アンド・フォーゲット型の変更処理によって,それぞれのビューが必要とするビューモデルを計算する”一方向データフロー。
  • キャッシュ,検討の結果,“変更されていない中間結果の再計算を避けるため”,この方法が適当であることが分かった。

Androidプラットフォームでは,プラットフォーム固有のコードとのバインディング生成という別の問題もある。この目的のためにFacebookでは,DropboxのDjinniを使って,ビューモデルをC++からJavaに変換した。Djinniのコードジェネレータにも手を加えて,自分たちの関数型アプローチへの適合とガベージコレクションの最適化を行った。iOSについては,Objective-C++を使ってC++コードをシームレスに統合することができる。

このアプローチによって,Momentsのビジネスロジックの大部分がiOSとAndroidで共用可能となった。これはそれぞれのプラットフォーム用のコードベースに対して,おおよそ3分の1に当たる。Facebookの技術者たちは最後に,このアプローチのおかげで“新しい機能を,はるかに少ない作業と少ないバグで作成できた”と同時に,“開発時間を2つのプラットフォーム間で柔軟にやりくりできたため,同時に両方のプラットフォーム用に提供することができた”,と述べている。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには 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