はじめに
この記事はフラー株式会社 Advent Calendar 2022の6日目の記事です。5日目は @Nao1215 さんで「【Golang】CSV/TSV/LTSV/JSONにSQLを実行するsqlyコマンドを作った話【開発背景/設計/使い方】」でした。
Androidエンジニアになって4年経った
Androidエンジニアになってから今年で4年である。そろそろ ひよっこ とも よわよわ とも言っていられない経験年数になってきた。そもそも曲がりなりにもテックリードであるからしてそんな事を言っていたら他のメンバーに失礼だ。
今回は4年間の振り返りをAndroid界隈の技術の変遷も踏まえながら書こうと思う。
※しっかり調査したものではないので多少時系列などは間違っているかもしれません。基本はポエムとして認識してもらえればと思います
1年目:虚無期
自分
2018年10月に前職の会社に拾われてモバイルエンジニアになった。最初はiOSアプリの経験が(ほんのわずかに)あったこと、応用情報を持っていることを評価してもらって拾ってもらった。応用情報さまさまである。
しかしiOSエンジニアはもっとちゃんと経験のある人が後に入る予定であったから、わたしはスライドしてAndroidエンジニアになった。その時は当たり前のように Kotlin も触ったことがなかったし Java はぬるぽだった。そもそも JSON の存在もよく知らなかった。ハナクソである。
速習Kotlin や 有志のかたたちが公開してくださっていた Kotlin助走読本 を読んだあとは業務コードをひたすら解読したり、Webの動画を見たりして必死で勉強した。数ヶ月でMVPアーキテクチャを見よう見まねで組めるようにはなった。でもまだオブジェクト指向もよく分かっていなかったしアーキテクチャの意義とかも何も分からなかった。
Android界隈
Kotlin が Android の公式言語として採用されたのが2017年5月のことだったので、まだ Kotlin は「Java から徐々に置き換わりつつはあるが、まだデファクトスタンダードとまでは言えない」という温度感だったのではないかと思う(このあたりは虚無時代のことなので実態としてズレているかもしれない)。業務でも Java のコードが出てくることはたまにあった。
このころは Android Architecture Components や Android ViewModel もまだやっと出てきたばかり、というぐらいの温度感で、MVVMがAndroidの主流アーキテクチャになるまではまだ少し時を待つ必要があったように思う。Kotlin Android Extensions がまだゴリゴリ使われていた。
2年目:Android完全に理解した期
自分
自社サービスアプリのリリース後、いくつ小規模な Android アプリを手掛けてだいぶ Android を理解した気になった。この頃から技術同人誌の存在や DroidKaigi を始めとしたカンファレンスイベントの存在を認知し始め、技術同人誌を買い漁ったり自分でもイベントに(観客として)参加してみたいと思うようになった。
技術的にはMVVMアーキテクチャを小規模なアプリから実験的に導入し始め、 DataBinding なども少しずつ学習していった。このあたりでやっとオブジェクト指向を完全に理解した(と思う)。
2年目に、前職のiOS、Androidエンジニアがそれぞれ1人ずつしかいない状態でのスキル研鑽や成長に限界を感じ、転職を検討し始めた。ちょうどその頃から新型コロナウイルスが流行り始め、緊急事態宣言の発令を機に職場がフルリモートになった。フルリモート勤務の合間に転職活動を行い、最終的に現職のフラー株式会社への転職を決めた。転職の話などは 別記事 に譲る。
初めて参加しようとしていた DroidKaigi 2020 がコロナで中止になってショックを受けたり、オンライン勉強会が活発になりここぞとばかりに勉強会に参加しまくったりした。Twitter などで活動を始めたり、技術記事の執筆や個人アプリ開発を始めたのもこの頃である。
Android界隈
AAC や ViewModel を用いたMVVMアーキテクチャがAndroid開発の主流になりつつあり、 DataBinding を採用する企業も増えていた。非同期処理としては Kotlin Coroutines / Coroutines Flow が徐々に浸透し始めており、RxJava に比べてシンプルに書けるところが評価されていた。簡単な非同期処理であれば Coroutines で、 RxJava の高機能なストリーム処理を必要とする場合は RxJava で、というような棲み分けが提唱されていたように思う。
DataBinding よりも手軽な ViewBinding が登場し始めたのもこのあたりで、Navigation Components の SafeArgs なども含め、徐々に「型安全に色々なデータを処理できる」体制が整っていったと記憶している。
Jetpack Compose の初出が2019年の Google I/O で、2020年にアルファ版がやっとリリースされたぐらいの時期だった。まだ未知数な部分が多く、新し物好きだけが触って試していたぐらいの時期だったのではないだろうか。
Android とはちょっとズレるが、この頃は Flutter がにわかに盛り上がりを見せており、BLoCパターンなどをはじめとする状態管理の手法がさまざまに考案されていた。(まだギリギリ Provider や RiverPod などは姿を見せていなかった気がする)
3年目:転換期
自分
フラー株式会社に入社を機に、千葉へ引っ越して一人暮らしを始めた。「Androidチーム」と呼べるものがある環境、コードレビューをしっかりと受けられる環境に感動したのを覚えている。コードレビューを受けて初めて自分のコードの未熟な部分を知れたり、人がどういった部分をコードレビューで指摘するのかなどを吸収できたのは本当によかった。
フラーに入社する前後ぐらいから、自身でもアーキテクチャ設計をある程度一から考えられるようになり、「何のためにこのような実装をするのか」という部分までを考慮しながら、見よう見まねではない実装を進められるようになったと思う。このあたりは個人アプリを開発した経験が大きかったように感じる。
業務外では技術記事の執筆などを続けていたが、ゐろはさんに影響を受けて女性エンジニアの半生を綴る記事を書いたら軽く拡散されたり、なぜか DroidKaigi 2021 のセッションに応募したら採択されてしまい、初の登壇が DroidKaigi という訳のわからない状態になったりして状況に頭がついていかなかった。
Android界隈
Dagger Hilt が2020年にリリースされ、2021年に Stable になったのが大きなニュースだったと思う(個人的な感想込み)。今まで Dagger 2 の複雑さに、なんとなく雰囲気でやっていたDIがメチャクチャ簡単にできるようになったのは感動的であった。
Kotlin Android Extensions が deprecated になり、DataBinding や ViewBinding への移行が推奨されるようになったり、Jetpack Compose 1.0 がリリースされ、フル Jetpack Compose のプロダクト開発もそろそろやっていけるのではないか、という雰囲気が少しずつ出てきた年で、UI周りのニュースが多い年だったように思う。
Androidのアプリアーキテクチャガイド を公式がアナウンスし始めたり、状態管理の手法として、いわゆる UiState
を用いるやり方が主流になり始めたのもこの頃だったのではないかと思う。
4年目:激動期
自分
4年目の今年は本当に激動と言っても過言ではなく、家族が急逝したり 学び直しのために通信制の大学へ入学した り Android ユニットのテックリードになったり昨年に引き続いて DroidKaigi 2022 にも登壇することになったりと、2〜3ヶ月に1回ぐらい大きなイベントが発生する年であった。
テックリードになってからやったことについては別記事で言及する予定なので ここで言及するとネタが無くなるので 割愛する。Androidの技術的には「まあだいたいの事はなんとかなるやろ」ぐらいの知識は身についたと感じており、どちらかというと組織についてや他技術について、もしくはもっと根本的なCS知識などに関心を持つことが多くなってきたように思う。
反省点としては、 Compose の UI周りの勉強をあまり出来なかったことである。そのうち個人アプリの Compose リプレースなどを試そうかと思っている。
DroidKaigi に初めてオフライン参加 することができ、オンライン勉強会やTwitterなど経由でしか知らなかった人たちとご挨拶できたのはとてもいい経験だった。
Android界隈
Jetpack Compose が今後主流になることがほぼ確実な流れとなり、同時に DataBinding (xmlレイアウト) や RxJava (Compose と連携するならば Coroutines や Flow の方が使い勝手がよいため) といった技術が少しずつレガシーなものになりつつあるのを感じるようになった。
今後数年は Jetpack Compose が使われ続けるだろうとは思うものの、 DataBinding の登場から考えてもまだ4年程度しか経っていない現状を考えると、Compose に変わる新たな技術が今後すぐに登場してくる可能性もある。
Android開発における状態管理やアーキテクチャなどは一定成熟されてきており、「とりあえず公式の推奨する設計に則っておけば安心できる」というような風潮になってきた一方、UI周りについては Pixel Watch の登場による Compose for Wear OS やフォルダブル端末、タブレットなどへの マルチサイズスクリーン対応 を Google が推奨するようになってきており、今後はUI周りでの試行錯誤が増えていくのではないかと感じている。
まとめ
このように振り返ると、Android開発というのは2-3年程度のサイクルで新たな手法やフレームワークが登場し、そちらに主流が移り変わっていくのを繰り返しているように感じる。Androidエンジニアになってから4年の間にxmlレイアウトは少し過去のものになりつつあり、必死こいて勉強した Dagger2 は Dagger Hilt に置き換わり、 RxJava も Gson も Picasso も徐々に主流から消えつつある。時代の移り変わりというのは残酷なものである。
いま主流となっている技術も2-3年で廃れていく可能性がある事を考えると、エンジニアは生涯勉強というのはわりと真実なのだなあと思うと同時に、技術が移り変わってしまった時にも慌てずに済むように、特定のフレームワークに依存しない知識を身につけていくことが重要なのではないかと考える次第である。
おわりに
7日目のアドベントカレンダーは @okazaki3 さんで「なにか」です。お楽しみに!