【アプリ開発】Android公式ドキュメントの歩きかた【Kotlin】


KotlinでのAndroidアプリ開発の学習の仕方についてまとめています。
すべて完了するとアーキテクチャ・レイアウトなど開発に必要な知識を幅広く身に着けることができます。

自分がAndroidアプリ開発を担当した時、最初はどこから手をつけたらよいのか全く分からなかったのでこの記事が少しでも参考になればと思います!



## はじめに
- Androidアプリ開発を始める際に役立つドキュメントを読み進める順番に記載しています。
- このドキュメントでは技術の詳細については解説していません。具体的な内容はリンクからドキュメントを確認してください。
- リンク先は英語のドキュメントです。[DeepL翻訳](https://www.deepl.com/translator)アプリを導入するとより快適に読み進めることができます。
- リンク先のドキュメントに記載している内容は全て必要な内容です。読み飛ばさないように気をつけましょう。
- 紹介している[Google Codelabs](https://codelabs.developers.google.com/)を読み進めると自然にIDE(Android Studio)の使用方法も習得できるようになっています。
- 紹介しているドキュメントで、[Codelabs for Android Developer Fundamentals](https://developer.android.com/courses/kotlin-android-fundamentals/overview)のコースは実運用するアプリを作る方にもかなりおすすめです。

## Google Developers - ガイド
Androidのデベロッパー ガイドです。
https://developer.android.com/guide

取り急ぎ「アプリの基本」の項目にあるドキュメントを全て読むとAndroid開発の概要を把握できます。
その他項目については、必要なタイミングで読み進めることをお勧めします。

## Google Developers - 初めてのアプリを作成する
https://developer.android.com/training/basics/firstapp

ページが2つだけの簡単なアプリを開発し実機で動かすまでを試すことができます。
Android開発の基本と流れを把握することができます。

## Codelabs - Kotlin で初めての Android アプリを作成する
https://codelabs.developers.google.com/codelabs/build-your-first-android-app-kotlin/index.html

### 前提
公式より引用
> コーディングの経験がある方向けに、Android のスキルを磨き、おすすめの方法が学べるコースを用意しています。

### 概要
先ほどより詳細なアプリを開発し、より多くの基礎的なキャッチアップを行います。
レイアウト、制約、リソース、Viewのアップデート、トーストなどの概念と基本的な使い方についてキャッチアップできます。


## Codelabs for Android Developer Fundamentals
https://developer.android.com/courses/kotlin-android-fundamentals/overview

### コース一覧
https://developer.android.com/courses/kotlin-android-fundamentals/toc
全31コース

- Lesson 1 : 最初のアプリを作成する(Androidスタジオ/画像などのリソース/ビルド)
- Lesson 2 : レイアウト(LinierLayout/data binding/ConstraintLayout/Viewへの反映)
- Lesson 3 : ナビゲーション (Flagment/navigation(画面遷移管理)/戻るボタン・ナビゲーションバー/safe args/ 外部アプリ連携)
- Lesson 4 : アクティビティとフラグメントのライフサイクル(ライフサイクル/ライブラリを使用したロギング)
- Lesson 5 : アーキテクチャコンポーネント( ViewModelおよびViewModelProvider/LiveDataおよびLiveDataオブザーバー/ViewModelとLiveDataによるData binding)
- Lesson 6 : roomを使用したローカルDBとコルーチンについて
- Lesson 7 : RecyclerView(RecyclerView/DiffUtilとRecyclerViewによるデータバインディング/RecyclerViewを使用したGridLayout/RecyclerViewアイテムの操作/RecyclerViewのヘッダー)
- Lseeon 8 : インターネットへの接続( APIからデータ取得/画像/フィルタリングと詳細ビュー)
- Lseeon 9 : リポジトリ (リポジトリパターン/WorkManager)


### 前提
https://developer.android.com/courses/kotlin-android-fundamentals/overview#prerequisites

- オブジェクト指向言語で少なくとも2年の経験があることが推奨されます。
- Kotlinについては既に理解している前提です。まだKotlinに慣れていない場合は Codelabの [Kotlin Bootcamp for Programmers](https://developer.android.com/courses/kotlin-bootcamp/overview) コースや Udacityの動画講座の [Kotlin Bootcamp for Programmers
](https://www.udacity.com/course/kotlin-bootcamp-for-programmers--ud9011) を参考にすると良さそうです。  
※公式によると、Udacityの動画講座は完了まで一般的には2週間程度かかるカリキュラムだそうです。

### 概要
ここからは本格的にキャッチアップを進めていきます。
サーバーサイドは担当していたが、アプリは初めてだ。と言った方におすすめのキャッチアップドキュメントになっています。

最初から読み飛ばさずに進めると、Android開発に必要な知識とコンセプトを広域に学習することができます。

このコースは実例を提示しながらベストプラクティスについても解説があるため、リファレンスのみでは機能の説明しか載っていなくて使いこなせていないと言った場合にも有効なコースになっています。また、メンテナンスされているためコードが古くて参考にならないと言ったことがほぼありませんでした。

初期の方では「Android Studioの準備」やググっても正確な情報があまり出てこない「ビルドファイルの使い分け」から始まり、ライフサイクル/アーキテクチャーコンポーネント(ViewModel・LiveData)/ローカルDB(Room)/コルーチン/APIからのデータ取得/RecyclerViewなどアプリ開発に必要な知識をキャッチアップできます。

内容が多いため各コードラボ内のsummary(概要)の項目を読んでから読み進めると、より早く内容を把握しやすくなります。

このコース完了後に簡単な開発を始めることはできますが、より高品質なアプリを開発する場合はAdvanced Android in Kotlinの `テストと依存性注入` `カスタムビュー` `アニメーション` の項目を読み進めておくと良いでしょう。


## Advanced Android in Kotlin
https://developer.android.com/courses/kotlin-android-advanced/overview

### コース一覧
https://developer.android.com/courses/kotlin-android-advanced/toc
全15コース

- レッスン1：通知(アプリ内通知とプッシュ通知)
- レッスン2：高度なグラフィック(カスタムビューについて)
- レッスン3：アニメーション
- レッスン4：位置情報
- レッスン5：テストと依存性注入(Dagger,  テスト駆動開発やそのツール、テストの書き方について)
- レッスン6：ログイン(Observerを使用したログイン状態の確認、Firebaseでの実装例)

### 概要
カスタムビュー、通知、アニメーションなど実際のアプリケーションを作成するときに必要な内容を確認できます。

Advanced Android in Kotlinコースについてはアプリケーションで利用しない機能についてはスキップしても問題なさそうです。


## Android 向けのデザインと品質
### 一覧
- [Google Developers - Androidのデザイン](https://developer.android.com/design?hl=ja)
iOSで言うヒューマンインターフェースガイドのようなポジションのドキュメントがまとめられてます。

- [Google Developers - アプリ品質ガイドライン](https://developer.android.com/docs/quality-guidelines?hl=ja)
  すべてのアプリが示すべき重要な品質特性をテストプランで網羅できるようにリストアップされています。
- [マテリアルデザイン ガイド](https://material.io/design/introduction#goals)
  マテリアルデザイン での規約が記載されています。

## iOSヒューマンインターフェースガイド
- [Apple - Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/)

### 概要
アプリ作成時に守るべき原則が記載されています。
iOS向けではありますが、Androidでも適用できる物も多いので一度目を通しておくと良さそうです。

## Androidアプリのサンプル
アーキテクチャについて: [Android Architecture Blueprints](https://github.com/android/architecture-samples)
いろいろなAndroidアプリの作例: [Google developers sample](https://developer.android.com/samples)

## Google Play でのアプリの公開
- [Google Play - ベストプラクティス](https://developer.android.com/distribute/best-practices)
- [Google Play Console](https://play.google.com/apps/publish/)

### 概要
アプリの公開と開発時の注意点に関する情報が記載されています。
Google Play Consoleはアプリ公開に必要なため、開発用アカウント等は早めに準備しておきましょう。

## アプリの圧縮、難読化、最適化
[Android Developers - アプリの圧縮、難読化、最適化](https://developer.android.com/studio/build/shrink-code?hl=ja)

### 概要
実運用するアプリは最適化や難読化は必須です。
開発の初期はアプリ本体の作成に集中する方がよいですが、導入したライブラリが増えるほど設定が困難になるので開発の中盤までには対応できるとよいでしょう。

---
皆さんもぜひぜひAndroidアプリ開発にチャレンジしてみてください。
この記事は[アクシス Advent Calendar 2020](https://qiita.com/advent-calendar/2020/mediaxis) 17日目の記事です。