つよしさんブログ

とっ散らかった内容ではございますが

DroidKaigi 2019にてDaggerとModularizationの話をしました

DroidKaigi2019、スタッフの皆さんを始め、非常に有意義な時間を過ごさせて頂きまして、どうもありがとうございました。

f:id:tsuyoyo:20190209143820p:plain:w200

僭越ながら 2/7(Thu) の 16:30 からのセッションにて "From Monolithic to Modularized codebase with Dagger" というタイトルで発表させていただきました。初日の最後の時間帯でしかも50分枠ということで、参加頂いた皆さんはなかなか大変だったかと思いますが (疲労感的に) 、内容以上にその辺のこと (早く飲みたい、疲れた...etc) をすごく気にしながら喋らせて頂いたつもりです (何

drive.google.com

何についてのお話だったのか

Dagger2を使って依存管理しているアプリにおいて、app モジュールに全てのコードが入った状態 (monolithic) から1つのfeatureをsub moduleに切り出していく過程を紹介する、というプレゼンでした。

伝えたい考え方そのものは結構汎用的な話だったと思うのですが、どう考えても泥臭い話になることが見えていたので、具体例 (どんなアプリを題材にするのか) の紹介であったり、自分がどういう意図でDagger2を使っているのか、そもそもmodularizationって何が嬉しいのか、といったbackgroundの説明を大事にしたつもりです。

結果、backgroundの説明に約30分、modularizationの過程の紹介 (本題) に15分、dynamic feature moduleを試してみた話 (せっかく来てもらっているので新しい話もしたかった) に5分、といった内容になりました。50分という長丁場でしたが、「メモを一生懸命取らなくても分かってもらえる話を目指した」と前置きした通りの50分になっていたら嬉しいなぁ…と思ってるのですがいかがでしたでしょうか。。。

Daggerとワタシとmodularization

Dagger2そのものは、2016年に仕事のprojectに導入された事をきっかけに勉強し始めました。ですがDI (Dependency Injection) に関してはもうずっと前から興味を持って取り組んでいて、仕事のAndroidアプリ開発の中でもちょいちょい意識してました。意識していた、というのは、満足行くように出来てなくてモヤモヤしてたんですね。Dagger2のような高尚かつ魔法のような道具(←第一印象)を使えば、そのモヤモヤも解決できるだろうし、個人的に凄く拘りのあるActivity lifecycleに起因するデータ管理の解決にもなるんじゃない?なんて、高い期待を持って取り組んでいたものです。

ということで、Dagger2の正体を (自分の狙いに関するベクトルで) 理解していく日々を過ごしてました。このQiitaの記事なんかはまさにその気持ちが高まっている時に調べたものですな。

qiita.com

そして、そこから半年くらい色々見ていく中で「あれ、 @Module@Component の関係って、"部品とその組み立て" みたいで面白くない?」ってことに気づきまして。 @Moduleとある機能領域のロジックやUIパーツを提供する "部品" と捉えて全体を開発していく、ってキレイなのでは?なんて思ったんですねー。

だけど、実際のお仕事でそこまでやろうとするにはタイミングが悪かった (出来上がったものを、そのような状態に持っていくのはコストが高すぎる) こともあり、しかも自分は US プロジェクトをたった一人でリモートから参加していた、という背景もあって、話半分で終わりました。

しかしそこはハイ意識なワタクシ、「やっぱりやってみたいなぁ。。。」とずっと思ってて、結局プライベートで出しているアプリを全部壊してイチから書き直すことで、チャレンジすることにしました (←ここが2017年秋) 。

時間はかかってしまったものの (仕事の状況だけでなく、人間のモチベーションは常に高いわけでは無い) 徐々に形が見えてきて、しかも会社でやっているようなアプローチを丸々コピーしつつもそこにAndroid Architecture Componentを導入する余地を研究しながら進めたりしていて、楽しみながらいい感じに育っていきました (2018年の夏くらいにアプリ再リリース & Instant app対応もした) 。

DroidKaigiに向けて

そんな最中DroidKaigi2019のCFP募集が始まりまして。

昨年のDroidKaigiのCFPに落選した時、同僚の @mhidaka さんに「ねーねー、なんで毎年毎年CFP通らないの?」と相談したところ「CFPちゃんと書いてないでしょ?」と、サンダーバキュームボールばりの直球を受けたことを思い出し、今年はちゃんと書くことにしました (4回目のCFP挑戦にしてついに)。

今年に入って、弊社には一段と著名な方が続々と入ってらっしゃいまして、そんな状況に相乗りするかのごとし何人かの方にreviewをしていただき (うふふ) 、おかげさまで提出した3つのうち1つが通過しました。ニッチ路線も出すことでよりcoverageを上げよう!と書いた PreferenceFragmentCompatを使って超簡単に設定画面を作ろう というセッションが通過しなくて本当に良かったです。

modularizationのお話なので、せっかくなら!と思って、11月はdynamic feature moduleに挑戦しました。ところがmodule化の延長でサクッと対応できるシロモノではない事が分かった上に、当日デモをするにも、後ほどyoutubeで動画が公開されることを考えると著作権的に色々マズそうな画面が多く (汗)、頑張った割には地味なoutputになりました (一応手元にはいつでも公開できる状態にはなってる) 。

12月に入ってからgoogle docsにagendaを書き始め、年末年始はプレゼンの作成、、、と進めていたところ、まさかの1月、3週間のUS出張が決まりまして、google本社のお膝元のMountainViewにてプレゼンの練習およびスライドの手直しをしていくことになりました。形から入ることが大好きなワタクシには、ある意味、最高の展開です。

f:id:tsuyoyo:20190209144539p:plain:w200 f:id:tsuyoyo:20190209145815p:plain:w200

一生懸命そのスペシャル感を醸し出そうとしたのですが、、、

1月は雨季ですし、日の長さも日本と変わりませんし、日本よりは暖かいとはいえ寒い時間帯も多いですし、何より仕事が忙しかった、ってことで、スペシャル感どころかただのピンチに陥っただけでした orz

当日

開始3分前くらいまで広めの会場に20人くらいしかいらっしゃらなく、「全員前に来てください!ぜひぜひ!」なんて言っちゃおうかな!なんて考え始めましたが、続々と来て頂き、本当に嬉しかったです(泣)。

途中スライドが映らなくなったり、カメラが定点だったことをまったく気にせずスライドの前をうろちょろしたり、色々アレだったところもありますが、なんとか終わってよかったです。発表中、何度も皆さんに「ですよね!?」なんて投げかけさせてもらいましたが、その度に頷いて目を合わせてくださった何人かの皆様、特にありがとうございました (泣)。

疑問、質問、ご相談、対応しかねることもあるかと思いますが、お気軽に @tsuyogoro までいただければと思います。

なお、来年またプレゼンに挑戦するかどうか、今は全く考えられません (疲)。何よりネタ切れです(ピンチ)。