この記事は ソフトウェア エンジニアリング リード、Ian Lake、プロダクト マネージャー、Jisha Abubaker による Android Developers Blog の記事 "Android Jetpack Navigation Stable Release" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
![]()
本日は、Android Jetpack Navigation コンポーネントの安定版リリースについてお知らせします。
Jetpack Navigation コンポーネントに含まれる一連のライブラリ、ツール、ガイドは、安定して動作する完全なナビゲーション フレームワークを提供します。これにより、ナビゲーションを実装するという手間のかかる作業から解放され、あらゆるエッジケースに正常に対応できることが保証されます。
Jetpack Navigation コンポーネントを使うと、以下のことができます。
プロジェクトで Jetpack Navigation コンポーネントを使うには、まず Google の Maven リポジトリで公開されている Navigation アーティファクトを
navigation-runtime: このコアライブラリは、アプリ内ナビゲーションの構造(アプリを構成する画面や遷移先と、それらをリンクするアクション)を提供するナビゲーション グラフをサポートします。シンプルな
navigation-fragment: このライブラリは、navigation-runtime を使って構築されており、遷移先としてフラグメントをすぐに使えるようにします。このライブラリを使うと、フラグメント トランザクションが自動的に処理されます。
navigation-ui: このライブラリを使うと、マテリアル デザイン ガイドラインに従ったナビゲーション ドロワー、メニュー、ボトム ナビゲーションをアプリに簡単に追加できます。
各ライブラリは、-ktx接尾辞がついた Android KTXアーティファクトを提供しています。これらは、Java API をベースとして、Kotlin 固有の言語機能を使って構築されています。
Android Studio にはマニフェスト統合ツールが組み込まれているので、アプリの特定の画面へのディープリンクを有効にする際に必要なインテント フィルタを自動的に生成できます。この機能により、ナビゲーションの遷移先に属性を設定するだけで、URL をアプリの任意の画面と関連付けることができます。
多くの場合、ある画面から別の画面にナビゲーションする際に、データが渡されます。たとえば、一覧画面は詳細画面にアイテム ID を渡すことがあります。ナビゲーションの際に発生する多くのランタイム例外は、引数を渡す際に型の安全性を保証できないことが原因です。このような例外を再現させたり、デバッグしたりするのは困難です。コンパイル時に型の安全性を提供する方法については、Safe Args Gradle Pluginをご覧ください。
「Navigation ライブラリは、うまく設計されていて何でも設定できるので、このライブラリを組み込んで個別のニーズを実現することができました。
Navigation ライブラリを使って以前のナビゲーション ドロワーをリファクタリングすることで、カスタムビューを使った動的なランタイムベースの構成をサポートできました。モジュールが注意深くパッケージ化されているので、相互依存を起こすことなく、アプリのトップレベルに新しい画面を追加したり、そこから画面を削除したりすることもできました。
明示的キャストやハードコーディングした前提などを取り除き、直接 Navigation を利用することで、アプリのトップレベルのナビゲーション周りからあらゆるアンチパターンを取り除いています。このライブラリは、最新の Android 開発に欠かせないコンポーネントです。私たちの進化するアプリで、もっと広く採用したいと考えています」
Android Jetpack Navigation コンポーネントを使ったアプリ内ナビゲーションのもう 1 つの実例として、Google の Digital Wellbeingもご確認ください。
Reviewed by Yuichi Araki - Developer Relations Team
統合されたツールとガイドで予測可能なアプリ内ナビゲーションを実装

本日は、Android Jetpack Navigation コンポーネントの安定版リリースについてお知らせします。
Jetpack Navigation コンポーネントに含まれる一連のライブラリ、ツール、ガイドは、安定して動作する完全なナビゲーション フレームワークを提供します。これにより、ナビゲーションを実装するという手間のかかる作業から解放され、あらゆるエッジケースに正常に対応できることが保証されます。
Jetpack Navigation コンポーネントを使うと、以下のことができます。
- 上ボタンや戻るボタンといった基本的なユーザー アクションが、端末や画面によらない一貫した動作となるように処理する。
- ユーザーがディープリンクを使ってアプリの任意の部分を開くことができるようにし、アプリ内で一貫した予測可能なナビゲーションを構築する。
- ある画面から別の画面に渡される引数の型の安全性が向上し、ユーザーがアプリ内を移動する際にランタイム クラッシュが発生する確率を下げる。
- ナビゲーション ドロワーやボトム ナビゲーションなど、マテリアル デザイン ガイドラインに従ったナビゲーション操作を追加する。
- Android Studio 3.3 の Navigation Editorを使用して、ナビゲーション フローを簡単に視覚化して操作する。
Jetpack Navigation ライブラリでナビゲーションのコードをシンプルに
Jetpack Navigation コンポーネントは、実装の詳細を抽象化するアプリ内ナビゲーションのフレームワークを提供します。これにより、アプリのコードからナビゲーションのボイラープレートを削除できます。プロジェクトで Jetpack Navigation コンポーネントを使うには、まず Google の Maven リポジトリで公開されている Navigation アーティファクトを
build.gradle
ファイルに追加します。Java または Kotlin で利用できます。 dependencies {注: まだ androidx.* に移行していない方のために、Jetpack Navigation の安定版コンポーネント ライブラリは、バージョン 1.0.0 の android.arch.* アーティファクトとしても利用できます。
def nav_version = 2.0.0
// Java
implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"
// Kotlin KTX
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
}
navigation-runtime: このコアライブラリは、アプリ内ナビゲーションの構造(アプリを構成する画面や遷移先と、それらをリンクするアクション)を提供するナビゲーション グラフをサポートします。シンプルな
navigate()
を呼び出すことで、遷移先へのナビゲーションの方法を制御できます。遷移先には、フラグメント、アクティビティ、カスタムの遷移先を指定できます。 navigation-fragment: このライブラリは、navigation-runtime を使って構築されており、遷移先としてフラグメントをすぐに使えるようにします。このライブラリを使うと、フラグメント トランザクションが自動的に処理されます。
navigation-ui: このライブラリを使うと、マテリアル デザイン ガイドラインに従ったナビゲーション ドロワー、メニュー、ボトム ナビゲーションをアプリに簡単に追加できます。
各ライブラリは、-ktx接尾辞がついた Android KTXアーティファクトを提供しています。これらは、Java API をベースとして、Kotlin 固有の言語機能を使って構築されています。
予測可能なナビゲーション ワークフローの構築に役立つツール
Android Studio 3.3 以降で利用できる Navigation Editorを使うと、ナビゲーション グラフを視覚的に作成し、アプリ内の画面遷移を管理できます。Android Studio にはマニフェスト統合ツールが組み込まれているので、アプリの特定の画面へのディープリンクを有効にする際に必要なインテント フィルタを自動的に生成できます。この機能により、ナビゲーションの遷移先に属性を設定するだけで、URL をアプリの任意の画面と関連付けることができます。
多くの場合、ある画面から別の画面にナビゲーションする際に、データが渡されます。たとえば、一覧画面は詳細画面にアイテム ID を渡すことがあります。ナビゲーションの際に発生する多くのランタイム例外は、引数を渡す際に型の安全性を保証できないことが原因です。このような例外を再現させたり、デバッグしたりするのは困難です。コンパイル時に型の安全性を提供する方法については、Safe Args Gradle Pluginをご覧ください。
すぐに試してみるためのガイド
以下のまったく新しいデベロッパー ガイドには、ナビゲーションを正しく実装するためのベスト プラクティスが説明されています。デベロッパーの声
Jetpack Navigation コンポーネントについて、HomeAwayの Android リード、Emery Coxe 氏がどうしても伝えたいことを紹介しましょう。「Navigation ライブラリは、うまく設計されていて何でも設定できるので、このライブラリを組み込んで個別のニーズを実現することができました。
Navigation ライブラリを使って以前のナビゲーション ドロワーをリファクタリングすることで、カスタムビューを使った動的なランタイムベースの構成をサポートできました。モジュールが注意深くパッケージ化されているので、相互依存を起こすことなく、アプリのトップレベルに新しい画面を追加したり、そこから画面を削除したりすることもできました。
明示的キャストやハードコーディングした前提などを取り除き、直接 Navigation を利用することで、アプリのトップレベルのナビゲーション周りからあらゆるアンチパターンを取り除いています。このライブラリは、最新の Android 開発に欠かせないコンポーネントです。私たちの進化するアプリで、もっと広く採用したいと考えています」
使ってみる
アプリで Jetpack Navigation コンポーネントを使ってみる方法は、移行ガイドやデベロッパー ガイドをご覧ください。実践形式のコードラボとサンプルアプリも提供しています。Android Jetpack Navigation コンポーネントを使ったアプリ内ナビゲーションのもう 1 つの実例として、Google の Digital Wellbeingもご確認ください。
フィードバック
引き続き、Navigation コンポーネントを使ってみた感想をぜひお知らせください。機能について個別のフィードバックがある場合や、問題を見つけた場合は、以下のいずれかのリンクからバグをご報告ください。- Navigation Editor に関する問題: Issue Tracker
- その他すべての Navigation に関する問題: Issue Tracker
Reviewed by Yuichi Araki - Developer Relations Team