Androidを開発する上で参考にしているもの

この記事は[第二のドワンゴ Advent Calendar 2019](https://qiita.com/advent-calendar/2019/dwango2)の5日目の記事です。

ドワンゴでは[N予備校Androidアプリ](https://play.google.com/store/apps/details?id=nico.ed.nnn.zane&hl=ja)を開発しているのですが、その中で実装で困ったときに参照している資料や、新しい技術についていくための情報収集などをまとめたいと思います。

# Androidを開発する上で参考にしているもの
## 公式アプリのソースコード
Androidの有名なカンファレンスとして[Android Dev Summit](https://developer.android.com/dev-summit)や[DroidKaigi](https://droidkaigi.jp/2020/)などがありますが、そのイベントで作成されているAndroidアプリのコードがとても参考になります。

Android Dev Summitアプリのソースコード
[GitHub google/iosched](https://github.com/google/iosched/tree/adssched)

DroidKaigiアプリのソースコード
[GitHub DroidKaigi/conference-app-2019](https://github.com/DroidKaigi/conference-app-2019)

Android Dev Summitは世界で最も大きなAndroid開発者のイベントですし、DroidKaigiも国内最大級のイベントなので、そこで使用されるAndroidアプリはとても素晴らしいものであるはず！と信じています。
（実際にコミット数も多く、コミッターにも著名な方が多いですし。）

使用しているライブラリやその使い方などを参考にしたり、実装で困ったらコード検索をして拝借したりしています。

ちなみに最近だと、xmlのImageViewのcontentDescriptionで何を指定するか悩んで調べたら、`@null`で逃げられることがわかったの良かったです。

```xml
<ImageView
    android:id="@+id/reserved_icon"
    android:contentDescription="@null"
```
参照：https://github.com/google/iosched/blob/89df01ebc19d9a46495baac4690c2ebfa74946dc/mobile/src/main/res/layout/item_feed_session.xml#L58

## Google Codelabs
全くの新しい技術を触るときには、[Google Codelab](https://codelabs.developers.google.com/)にあるコースを実際にやってみて、その使い方や利用背景を学んでいます。

Androidに関連するあらゆる要素についてのコースが用意されていて、内容は英語ですが説明が丁寧で情報も最新に即しているので、教材としてはとても素晴らしいです。

具体的には、以下のようなコースが用意されています。

#### KotlinでAndroidアプリを作る入門コース
Android StudioでAndroidのアプリを立ち上げるところから、Layoutの組み方、Navigationによる画面遷移、ViewModelによるデータの取り扱い、Room DBにデータを格納する方法など、その内容はAndroidの基本を網羅しています。
[Android Kotlin Fundamentals Course](https://codelabs.developers.google.com/android-kotlin-fundamentals/)

#### Androidの応用的な内容を扱うコース
Androidアプリにおける通知やアニメーションの実装、地図の扱い、テストを書く、ログインを実装するなど、応用的な内容を学習します。
ここまで完璧にできていれば、Android開発者として就職には困らなさそう。
[Advanced Android in Kotlin](https://codelabs.developers.google.com/codelabs/advanced-android-kotlin-training-welcome/)

#### Jetpack Composeを一足先に体験するコース
おそらく来年にはリリースされるであろうJetpack Composeの基本を学ぶことができます。
AndroidにおけるViewの作成が一気に変わっていきそうです。
[Jetpack Compose Basics](https://codelabs.developers.google.com/codelabs/jetpack-compose-basics/index.html)

#### その他多数
[Using Dagger in your Android app](https://codelabs.developers.google.com/codelabs/android-dagger/index.html)
[Android Data Binding](https://codelabs.developers.google.com/codelabs/android-databinding/index.html?index)
[Jetpack Navigation](https://codelabs.developers.google.com/codelabs/android-navigation/index.html?index)
[Using Kotlin Coroutines in your Android App](https://codelabs.developers.google.com/codelabs/kotlin-coroutines/index.html?index)
[Taking Advantage of Kotlin](https://codelabs.developers.google.com/codelabs/taking-advantage-of-kotlin/index.html?index)

## RxMarbles
N予備校Androidアプリでは、非同期処理にRxJavaを使用しており、そのイメージのために[RxMarbles](https://rxmarbles.com/)をよく参照しています。

[<img width="1098" alt="スクリーンショット 2019-12-04 18.19.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227196/89dac423-9992-f899-a717-76051b79b2df.png">](https://rxmarbles.com/#map)

[ReactiveX](http://reactivex.io/)のドキュメントにも説明は色々と書かれているのですが、RxMarblesのほうが自分でMarbleを動かせて直感的にわかりやすいので、困ったときには参照しています。

## Androidテスト全書
Androidの技術も変化が激しいのでなかなか書籍での学習は難しく感じるのですが、[Androidテスト全書](https://peaks.cc/books/android_testing)は断片的に散らばっているテストの知見を体系的にまとめてくれていたので、とても参考になりました。

単体テスト、統合テスト、UIテストそれぞれの実行のやり方や、テストライブラリの選定基準、CIへの組み込みと運用まで書かれていて、開発の参考にさせていただきました。

![project005_ogimage.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227196/8b7ffa07-4b32-c2bb-82dc-4b1684d26d96.jpeg)

また、Android テスト全書が書かれた[PEAKS](https://peaks.cc/)には、他にもクラウドファウンディングで需要が認められた書籍が何冊かあるので、Androidに関連が高いものについては参照していこうかなと思います。

## Android Dagashi
本来は、色々なメディアの記事を見るべきかと思いますが、重要な情報は[Android Dagashi](https://androiddagashi.github.io/)に流れてくるので、そこでリリース情報や技術トレンドなどを見ています。

Kotlinのリリース内容や、Android Jetpackまわりのアップデート内容、Deprecatedになるライブラリ情報や今後のAndroidに関する記事などが紹介されているので、とりあえずここを追えていれば問題ないと思います。

___ 

また新しいものが増えたら、随時更新していきます。