2019年のはこちら。 丸一年経ったので今年の知識の棚卸しも兼ねて。
はじめに
昨年版と同様に、本項の目的は下記2つです。
- サーバーサイド開発等の経験があるエンジニアが、Android開発を始める際に参考となる資料をまとめる
- 2020年で当たり前とされる技術を整理する
Androidアプリの開発環境を整える
AndroidStudioの導入
必ず公式ドキュメントを参考にしてインストールしましょう。 最近では公式ドキュメントの大半を日本語で読むことができるようになっています。
開発を始めてみようと思ったら、ドキュメント通りに手を動かしてみることを強くお勧めします。
Flutter
2019年からの大きな違いの一つに、Flutterの存在感が増したことがあります。
雑に書いてしまえば、Webアプリをベースとしたサービスのアプリであれば、FlutterによりAndroidアプリを開発してしまった方が早いかもしれません。 このため、開発を行う対象によってはKotlinによるAndroidアプリ開発を経ず、FlutterによるAndroidアプリ開発を始めてしまってよいと思われます。
公式ドキュメントは英語になりますが、非常に懇切丁寧な説明がされています。 Flutterで開発されたアプリの一覧などもあるので、自分の作ってみたいアプリが明確な場合には、見比べて検討してみるとよいと思われます。
開発する環境
Figmaの登場により、以前よりMacを選ぶ必要性が減ったように感じます。 ChromeBookでAndroidStudioを動かすことができるようになったこともあり、より自分な好きな環境で開発が行えるようになってきたと感じます。
Androidの基礎知識
このうち、一番最初に書いてある「Androidアプリのセキュリティの話」と「アプリのコンポーネント」は目を通しておくことをお勧めします。 アプリのセキュリティについて知ることで、「アプリのデータをどのように保存するべきか」を考えることができるようになります。アプリでデータを保持する際に、ベースとなる知見です。 また「アプリのコンポーネント」の中では、「アクティビティ」を特に読み込んでください。そのほかはすぐさま使うことは少ないかもしれませんが、機能開発の中で詰まった時に「あの話に関係があるのかな?」と気づくきっかけにすることができるため、目を通しておくことをお勧めします。
アクティビティのライフサイクル
The activity lifecycle | Android Developers
AndroidアプリをKotlinで作る場合でも、Flutterで作る場合でも「アクティビティのライフサイクルのコンセプト」まで熟読することをお勧めします。 アプリの起動状態が異なるケースで発生するバグのトラッキング、ユーザーが別のアプリを立ち上げる時に気をつけることなどはアクティビティのライフサイクルをベースに理解することができます。
昨年同様、アプリケーションのライフサイクルやフラグメントのライフサイクルは開発が進んできたら理解していけばよいと思います。 もしもそれらを理解したいなと思ったら、Android Architecture Componentsの導入とGoogleがお勧めするアーキテクチャの導入を検討してみてください。
Android Developerの抑えどころ
極めて個人的な意見となりますが、下記のページは適宜読み込むとよいと思います。 Flutterでアプリを開発する場合でも、1〜3は参考になるのではないでしょうか?
- Tasks and the back stack | Android Developers
- Intents and intent filters | Android Developers
- Input events overview | Android Developers
- Layouts in Views | Android Developers
Material Design
Material ThemeのバージョンアップがGoogle I/O 2019で発表され、Dark Themeなどが正式に導入されました。
個人的に2019年に比べてAndroidアプリ開発者が覚えるべきことが大幅に増えたなと感じているのですが、その際たるものがMaterial Designに関してです。
Androidアプリ開発の中で、これまではAndroidアプリの実現したい機能に対応するUIパーツを探して当てはめるようなことがよく行われていました。 しかしAndroid向けのMaterial Designライブラリが十分な完成度となった現在、エンジニアにはMaterial Designの「理由」を理解しながらパーツを選定する技能が求められつつあります。
1例としてアプリのナビゲーションの選択を挙げてみます。 パッとアプリのナビゲーションを行うUIパーツの名前は思い浮かぶでしょうか? どのUIパーツを選択しますか? なぜそのパーツを選択するのでしょうか?
Material Designを確認すると、上記のように「UIパーツ」と「利用シーン」が明確に定義されています。
このためMaterial Designをデザイナーや企画者との共通言語として利用できるよう、理解を深める必要性が高まっています。 かつ、選択したGUIアーキテクチャがUIパーツの状態を適切にハンドリングできるよう、各UIパーツのAPIにも知見を深める必要があると言えます。
JavaとKotlin
Kotlinを利用しましょう。 デメリットとしてはJavaのみでアプリを作るより1~1.5MBほどアプリサイズが大きくなることがあげられますが、それを補って余りあるほどの開発のしやすさがあります。
Kotlin and Android | Android Developers
少し横道に話はそれますが、Androidの開発技術の認定なども始まっています。 (たしか)英語でのコースとなるのですが、興味と時間があればコースの受講と認定証の取得を目指してみてもよいのではないでしょうか。
Google Developers Certification | Google for Developers
サンプルリポジトリ
Androidアプリの設計などの学習をしたいケースもあると思います。 その際には、下記のリポジトリを確認することをオススメします。
- By Google
- DroidKaigi
- GitHub - DroidKaigi/conference-app-2020: The Official Conference App for DroidKaigi 2020 Tokyo
- GitHub - DroidKaigi/conference-app-2019: The Official Conference App for DroidKaigi 2019 Tokyo
- GitHub - DroidKaigi/conference-app-2018: The Official Conference App for DroidKaigi 2018 Tokyo
- GitHub - DroidKaigi/conference-app-2017: The Official Conference App for DroidKaigi 2017 Tokyo
DroidKaigi 2020については、DroidKaigi App Fireside Chatがあるので試聴してみるのもよいと思います。
個人的にはAndroid Architecture ComponentsのMVVMが好きなので、2020年の構成は理解しやすかったです。
開発端末
AndroidStudioのエミュレーターが高速なため、メモリとCPUに余裕のあるマシンであれば実機がなくてもよいのではないかなと思っています。 エミュレーターの起動速度やアプリの動作速度、位置情報の変更など開発で必要な機能は十分です。
ただカメラを使ったアプリを作る場合には、実機を用意することを考えてみてください。 逆に言えば、それ以外の機能を主とするアプリであればエミュレーターによる開発で大半を賄うことができます。
なお、個人的に開発端末としてお勧めなのは Pixel 3a です。 今年の6月ごろにPixel 4aが出るんじゃないかなと思っているので、出たらPixel 4aにするのがよいのではないかと思っています。
終わりに
去年よりシンプルに書こうかと思っていたのですが、なんだかんだ同じぐらいになっちゃいました。 ライブラリ編はまた別にまとめようと思います。
ライブラリ編