Android開発でよく利用するリファレンスを整理してみた

# はじめに

自分がAndroid開発で良く見るリファレンスと、どう使うかを整理してみました。
定期的にやり方を見直すために、現状を整理することは有効だと思いますし、思い出したら随時アップデートしていくつもりです。

通常のアプリ開発を想定しています。組み込み系やSDK開発は想定してないです。

また、ここに書くものが見ているものの全てではないのと、これが確実に良いというものではないです。
もちろん、プロジェクトや、やることによって当然変わってきます。
あくまで個人的によく見るものなので、あしからず。

何はともあれ、公式のドキュメントがあればそれを必ず見ることです。[^1]

## Android SDK周り

Android開発をする上では欠かせない部分です。

### [Android Developer Guides](https://developer.android.com/guide)

公式ガイドです。

Android開発をしているときに常に参照をしています。
ActivityやFragmentなどはもちろん、カメラ、位置情報などtopicごとにガイドがまとまっているので、よほど特殊なことをしない限りは、ここを参照すれば大体の方向性は見当がつきます。

一度見たことがあるガイドでも、もちろん更新されるため(良くあるのが新OSで挙動が変わる時など)、再度実装に取り掛かるときに確認するようにしています。

また、日本語版が提供されているドキュメントもありますが、英語版が更新されていても、日本語ドキュメントが古い場合や、明らかに機械翻訳されていて意味が理解できないものがあったりするため、基本英語で読んでいます。

わからない英語が出てきても、英語ドキュメントを日本語翻訳したりして、極力英語版を読むようにしています。

### [Android API reference](https://developer.android.com/reference)

公式のAPIリファレンスです。

自分はJake神の Chrome Extentionsである[Android SDK Search](https://chrome.google.com/webstore/detail/android-sdk-search/elihjfnjglabmkeonphlglkpjppchoco)を利用して、該当のクラスのリファレンスを探しています。

### [Android Developers Blog](https://android-developers.googleblog.com/)

公式ブログです。
新しい機能などはもちろんガイドの方にも書いていたりするんですが、いつ出てきたんだとか、ポリシー変更などがいつ周知されたのかなどを確認する目的で見に行ったりします。

## Firebase周り

プッシュ通知の機能や、イベントとクラッシュログの収集と解析など、Android開発で利用することが多いやつです。

### [Firebase Guides](https://firebase.google.com/docs/guides)

公式ガイドです。
これもAndroid Developer Guidesと同じように常に参照します。
こちらは、Web、iOS側も利用されるので、iOSと挙動を揃えられるのか確認したりするときにiOSのドキュメントもみたりします。

### [Firebase GitHub Repository](https://github.com/firebase)

サンプル実装などがある公式のリポジトリです。
ガイドやAPIガイドで十分な時があったりしますが、ガイドでうまくいかないことがあったりしたときに（あまりないですが）、見に行きます。
また、ガイドに貼られているリンクが古くてリポジトリが移っていたりすることもあるので、その場合は、このリポジトリで検索をかけて探します。

### [The Firebase Blog](https://firebase.googleblog.com/)

公式ブログです。
全てウォッチしているわけではないですが、気になるものがあった場合に見るようにしています。
また、Firebaseの挙動で気になる部分が出てきて、ガイドに載っていなかったりした場合なども、このブログで探したりします。


## 各種ライブラリ

Android開発で、よく使うようなオープンソースのライブラリも、まずは公式のGitHubやWebサイトを確認します。
例として、いくつか貼っておきます。

- [Retrofit](https://github.com/square/retrofit)
- [OkHttp](https://github.com/square/okhttp)
- [Moshi](https://github.com/square/moshi)
- [Glide](https://github.com/bumptech/glide)

また、ライブラリ起因の不具合の疑いがあったり、バグっぽいと思ったら、GitHubで公開されているライブラリの場合は、そのリポジトリのissueを見にいきます。
問題がありそうなクラス名や、エラーが吐かれた場合は、そのエラーをclose済みのものを含め、検索にかけます。

ライブラリに限らずですが、結構メモします。できること、できないこと、特徴、他のライブラリと違うこと、主要なインターフェースなどをメモしながら見ていくことが多いかもしれません。

## Kotlin言語周り

### [Kotlin Guilde(公式)](https://kotlinlang.org/docs/reference/)

最近はだいぶ覚えているので、前よりも見る機会は減りましたが、あまり使わないAPI、慣れてないものなどは見る時があります。

## デザイン周り

### [Material Design Components](https://material.io/components?platform=android)

アプリにMaterial Designを適用するときに、上記を参照します。
使おうとしている部品に対して、Material Designでどういう見た目、挙動にするのか、なにがNGなのかや、どのクラスを使えばいいのかなどを確認する用途で利用しています。

また、googleのリポジトリなどにサンプルコードも転がっていたりするので、ときどき確認したりします。

## その他

### ググる

そして、上記公式のもので見当たらない場合は、ググったりQiitaを見に行きます。
もちろんちょっとしたことをググってみるとかやったりしますが、できるだけ公式(信じられるところ)を見つけるようにしています。
プルリクなどで人に説明するときは、下手にQiitaの記事などを貼らず（貼るときもあるけど、公式のお供的に）、できるだけ公式を貼るようにしています。

### クラス設計

これは常日頃の研鑚だと思いますが、GoFのデザインパターンなど使いたいときなど、出てきたときは[Java言語で学ぶデザインパターン入門](https://www.amazon.co.jp/dp/4797327030/ref=cm_sw_r_tw_dp_x_HAg5FbBCS8PB6) などの書籍を見たりします。
ただ、そのままではもちろん適用できなかったりするので、あくまで参考程度だし、見なかったりもします。

### リファクタリング

これまた常日頃の研鑚だと思いますが、「ここの実装、安全にリファクタリングする時ってどうやるんだっけ。」っとなったときに、[Martin Fowlerのリファクタリング](https://www.amazon.co.jp/dp/B01IGW5MG0/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)本をさっと見たりします。

### 実装

あと、実装を見た方が早い時もあるので、挙動を確認する必要があるけど不明な時や、上がってきたエラーが意味不明だったりした時などはIDE上(もしくはweb)で実装を確認しに行きます。

## 整理してみて(まとめ)

当たり前のように公式ばかりになってしまいましたが、やはり公式をまずみることが大切だなと再確認しました。

また、Androidのガイドやドキュメント、コンポーネントは充実しているし、選択肢もそんなに多くないので、迷いにくいなと思いました。[^2]
ガイドやベストプラクティスが公開されているものは、必読でしょう。


[^1]: 相当評判が悪いものだと話は別ですが、自分は見たことないのでそういうのがあったら教えてください。
[^2]: クロスプラットフォームなどのフレームワークを利用するとなるとまた別です。