この記事は Android Developer Frameworks チーム プロダクト マネージャー、Lukas Bergstromによる Android Developers Blog の記事 "Android Developers Blog: Announcing Architecture Components 1.0 Stable" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。


Android は、ハイエンドのスマートフォンから飛行機の座席まで、数十億台の端末で動作しています。Android OS は積極的にリソースを管理し、非常に広範囲にわたる端末でうまく動作していますが、安定したアプリを作るのが複雑になってしまう場合もあります。それを簡単にするために、Google I/O では、アプリのアーキテクチャの指針となる Architecture Components のプレビュー版がリリースされました。合わせて、ライフサイクル管理やデータ永続化などの一般的なタスクに使えるライブラリもリリースされました。これらの基礎コンポーネントを合わせると、ボイラープレート コードを減らしつつ、モジュール式のアプリを書くことができます。そのため、デベロッパーは車輪の再発明ではなく、イノベーションに集中することができます。私たちは、今後もこの土台に基づいて開発を進めていきたいと考えています。

本日は、Room および Lifecycle Architecture Components ライブラリが 1.0 の安定版に到達したことをお知らせします。これらの API は、いつでも製品版のアプリやライブラリにご利用いただけます。アプリのアーキテクチャやローカル ストレージに関してサポートを求めているデベロッパーの皆さんにお勧めです(ただし、これは単なる推奨であり、必須ではありません)。現在、Lifecycle はサポート ライブラリにも統合されているので、AppCompatActivity などの標準クラスでも利用できます。

安定版として宣言されたのは本日からですが、ベータ版コンポーネントは既にアプリに利用されており、数十億台にインストールされています。Zappos などのトップ デベロッパーは、Architecture Components のおかげで重要なことに時間をかけられるようになりました。

Android Architecture Components がリリースされる前は、独自の ViewModel 実装を使っていました。設定の変更を行っても ViewModel が保持されるように、ローダや依存性注入を使っていました。最近、Architecture Components の ViewModel 実装に切り替えたところ、そのようなボイラープレートをすべてなくすことができました。すると、ボイラープレートを書く時間や Android のライフサイクルの問題に悩まされる時間が減り、デザイン、ビジネス ロジック、テストに多くの時間をかけられるようになりました。

Activity のライフサイクルに直接フックできる LiveData も使い始めています。ネットワーク データの取得や表示に使うことができるので、ネットワーク呼び出しのサブスクリプション管理に悩まされることもなくなりました。

- Zappos の Android ソフトウェア エンジニア、David Henry 氏

Architecture Components は、いくつかの一般的な問題からデベロッパーを解放する、シンプル、柔軟かつ現実的なアプローチを提供します。そのため、デベロッパーは優れたエクスペリエンスを構築することに専念できます。Architecture Components は、アプリのアーキテクチャに関する指針に従ってまとめられた基本構成要素に基づいています。

Lifecycle

すべての Android デベロッパーは、Activity を起動、停止、破棄するオペレーティング システムに対応しなければなりません。具体的には、ライフサイクルに応じて、UI の更新に使う監視可能オブジェクトなどのコンポーネントの状態を管理する必要があります。Lifecycle は、 ライフサイクル対応コンポーネント の作成を可能にするもので、自身のライフサイクルを管理してリークやクラッシュの可能性を減らすことができます。Lifecycle ライブラリは、LiveData などの他の Architecture Components の基礎となっています。

LiveData

LiveData は、ライフサイクル対応の監視可能オブジェクトで、データの保持や更新の提供が可能です。UI コードは、LiveData をサブスクライブして変更を受け取ったり、LiveData に Lifecycle への参照を提供したりできます。LiveData はライフサイクルを認識しているので、Lifecycle が開始または再開すると更新されますが、LifecycleOwner が破棄されると更新は停止されます。LiveData を使うと、安全でパフォーマンスに優れたリアクティブ UI を簡単に作ることができます。

ViewModel

ViewModel は、Activity や Fragment などのライフサイクルにバインドされたエンティティから、ビューのデータとロジックの所有権を分離します。ViewModel は、関連付けられた Activity や Fragment が永久に破棄されるまで保持されます。つまり、回転によって Fragment が再作成されたりしてもビューデータが破棄されることはありません。ViewModel を使うと、一般的なライフサイクルの問題が解消できるだけでなく、モジュール性が高くテストしやすい UI を構築できるようになります。

Room

ほとんどすべてのアプリは、ローカルにデータを格納する必要があります。Android では、バージョン 1 から SQLite がプラットフォームにバンドルされていますが、直接それを使うのは大変な場合もあります。Room は、シンプルなオブジェクト マッピング レイヤーで、少ないボイラープレートで SQlite のすべてのパワーを活用できるようにするものです。コンパイル時のクエリ検証やビルトイン移行などの機能を使うと、確実な永続化レイヤーを簡単に構築できます。さらに、Room は LiveData と統合されているので、データベースを活用した、ライフサイクル対応の監視可能オブジェクトを使うこともできます。Room は、ローカル ストレージ管理にシンプルさとパワー、安定性をもたらします。ぜひお試しください。

アプリ アーキテクチャ ガイドなど

最後に、大切なことをお知らせします。あらゆるデベロッパーに適用される基本原則と、Architecture Components の使用に関する具体的なガイダンスが記載されたアプリ アーキテクチャ ガイドを作成しました。また、一貫性のある明確なガイドが重要だという声が寄せられているので、デベロッパー ドキュメントを更新し、必要に応じて Architecture Components にリンクするようにしています。さらに、Architecture Components サイトでは、豊富な動画、コードラボ、サンプルアプリを入手できます。今後さらに追加していく予定です。

今後に注目

Architecture Components の第 1 弾は安定版となりましたが、やるべきことがまだあります。ここ数か月間は、皆さんのフィードバックに耳を傾けて改善を行ってきました。さらに先日、RecyclerView で大きなデータセットを扱うのが難しいというフィードバックにお応えし、新しい Architecture Component である PagedList のアルファ版をリリースしました。これはほんの始まりにすぎません。今後お知らせしたいと考えている主要な開発中コンポーネントは他にもあります。

Architecture Components が目指しているのは、デベロッパーにモバイル端末で新しい独特なエクスペリエンスを提供することに集中してもらうことです。ようやく実環境で利用できる安定版になったことをお知らせできるのは、私たちのよろこびです。今まですばらしいフィードバックを寄せてくださったコミュニティの皆さんに感謝いたします。また、本投稿のコメントで議論を継続できることを楽しみにしています。最後に、この安定版のリリースを待っていた方は、今すぐ使ってみてください

Reviewed by Yuichi Araki - Developer Relations Team