Android Developers Blog 適当意訳 #8 Android Jetpack Navigation Stable Release

# Android Jetpack Navigation が正式版としてリリースされました
2019年3月14日

[原文](https://android-developers.googleblog.com/2019/03/android-jetpack-navigation-stable.html)
**※英語の勉強と自分用のメモ程度のかなり適当なものです。**


### 予測可能なアプリ内ナビゲーション実装の為のツールとガイド群

今日 Android Jetpack Navigation component の正式版のリリースをお知らせ出来る事を嬉しく思います。

Android Jetpack Navigation component は、堅牢で完全なナビゲーションフレームワークを提供し、困難なナビゲーション開発への挑戦を容易にする、 **ライブラリ** 、 **ツール** 、 **ガイド** をまとめたものです。 

Android Jetpack Navigation component で出来る事：

- 端末、スクリーンを問わずに一貫した挙動となるために、UpボタンやBackボタンなどの基本的なユーザーアクションをハンドリングします
- ユーザーにディープリンク経由でどこにでも移動でき、一貫性のある予測可能なナビゲーションを提供します
- 画面遷移時のデータ受け渡しの方安全性を改善し、画面遷移時にアプリがクラッシュする可能性を減らします
- マテリアルデザインに準拠したナビゲーションドロワーやボトムナビゲーションなどのナビゲーションを提供します
- Android Studio 3.3 に付属の[Navigation Editor](https://developer.android.com/topic/libraries/architecture/navigation/navigation-implementing)でナビゲーションの流れの視覚化と編集を行えます

Jetpack Navigation component はあなたのアプリがシンプルでも複雑でも[一貫していて予測可能なナビゲーション](https://developer.android.com/guide/navigation/navigation-principles)を提供する為の努力を続けています。

https://youtu.be/Y0Cs2MQxyIs

### ナビゲーションのコードをJetpack Navigationライブラリでシンプルに

Jetpack Navigation component は、アプリのナビゲーションの実装の詳細を気にする事なく、冗長なナビゲーションのコードを取り除く事を可能にします。

あなたのプロジェクトに Jetpack Navigation component を導入する為に、[Googleの Maven repository](https://developer.android.com/studio/build/dependencies#google-maven)で入手可能な Java か Kotlin のナビゲーションのアーティファクトをアプリの build.gradle に追記してください。

build.gradle file

```
dependencies {
    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"
}
```

**注意事項:** もしまだ androidx.* への移行が済んでいない場合は、[android.arch.*](https://developer.android.com/jetpack/androidx/releases/navigation#pre-androidx_dependencies) の1.0.0のバージョンでも利用可能です。

**navigation-runtime:** この核となるライブラリはアプリのナビゲーションの構造を提供するナビゲーショングラフを動かします。
navigate() メソッドを呼び出すだけでどのように目的地までナビゲードするかをコントロールできます。これらの目的地は、fragments や activitie などです。

**navigation-fragment:** このライブラリはナビゲーションランタイムを元に fragment を目的地とする機能を提供します。このライブラリを利用する事で、fragment のトランザクションは自動で管理されます。

**navigation-ui:** このライブラリを使う事でナビゲーションドロワー、メニュー、下部ナビゲーションをマテリアルデザインに準拠しつつ[容易に追加](https://developer.android.com/topic/libraries/architecture/navigation/navigation-ui)できます。

これらのライブラリは Java API 上に **-ktx** を接尾辞につける事で Kotlin の有用な言語機能を使う為に [Android KTX](https://developer.android.com/kotlin/ktx) アーティファクトを提供しています。

### ナビゲーションのワークフローをわかりやすくする為のツール

Android Studio 3.3以上で、 **Navigation Editor** は視覚的に[ナビゲーショングラフを作成でき](https://developer.android.com/topic/libraries/architecture/navigation/navigation-implementing#create-nav-graph)、アプリ内でのユーザー体験を管理できます。
[manifest merger](https://developer.android.com/studio/build/manifest-merge)ツールで統合する事で、Android Studio は自動で特定の画面へのディープリンクを可能にする為に必要な intent filter を生成します。
この機能で、ナビゲーションの目的地に関する設定を行うだけで、URLとあなたのアプリのどんな画面をも関連づける事ができます。

ナビゲーションは時にデータを次の画面に引き渡す必要があります。
例えば、リスト画面はアイテムのIDを詳細画面に渡す必要があるかもしれません。
多くの実行時例外はナビゲーションが渡す事になっているデータの型安全の欠如に起因していますが、これらの例外を再現しデバッグする事は容易ではありません。
[Safe Args Gradle Plugin](https://developer.android.com/topic/libraries/architecture/navigation/navigation-pass-data) でコンパイル時の型安全を提供する方法を学んでください。

### 最初の一歩

正しいナビゲーション実装の最適な練習を含んでいる、我々の新しいデベロッパーガイドを確認してください:

- [目的地の為のディープリンクを生成する](https://developer.android.com/topic/libraries/architecture/navigation/navigation-deep-link)
- [条件付きナビゲーション](https://developer.android.com/topic/libraries/architecture/navigation/navigation-conditional)
- [アニメーション付きの遷移](https://developer.android.com/topic/libraries/architecture/navigation/navigation-animate-transitions)
- [色々な環境でのフォームのデザイン](https://developer.android.com/topic/libraries/architecture/navigation/navigation-form-factors)
- [ナビゲーションのテスト](https://d.android.com/topic/libraries/architecture/navigation/navigation-testing)

### 初めてみましょう

Jetpack Navigation component をどのようにあたなのアプリで使うかを [migration guide](https://developer.android.com/topic/libraries/architecture/navigation/navigation-migrate) と [developer guide](https://developer.android.com/topic/libraries/architecture/navigation/navigation-implementing) で確認してください。
We also offer a hands-on codelab and a sample app.
[hands-on codelab](https://codelabs.developers.google.com/codelabs/android-navigation) と [サンプルアプリ](https://github.com/googlesamples/android-architecture-components/tree/master/NavigationBasicSample) も提供しています。
実際に Android Jetpack Navigation component が使われている例を見る為に、 Googleの[Digital Wellbeing](https://play.google.com/store/apps/details?id=com.google.android.apps.wellbeing)も確認してみてください。