はじめに
AbemaTVでAndroidエンジニアをしている @gumiojiです。
9月10日に開催されたCA.apk #8のレポートをお届けします。
CA.apkとはCyberAgentの強いAndroidエンジニア達がAndroidに関わるLTをいくつか発表し、学生や社会人など関係なく、飲み物やご飯を交えつつ交流もできちゃうAndroidエンジニアによるAndroidエンジニアのための勉強会です。
発表リスト
『今後のJetpackでAndroid開発はこう変わる!』
発表者: @kkagurazaka
Jetpackが2018年のGoogleI/Oで発表されてから、1年少し経ち、だいぶ浸透してきたように感じますがどうでしょうか?皆さんはJetpack使ってますか?
今までは、実現するのに冗長だったり、少し面倒くさいコードになってしまうのを最新のJetpackを使うとこんなにもスマートになるよ!という発表でした。
FragmentのバックハンドリングをonAttach内に簡潔に書けるようになったみたいです!
LayoutのリソースIdをコンストラクタに指定できるようになったのは、嬉しいですね。テンプレート文が減りそうで恩恵でかそうです。
ViewModel便利なんですが、取得が少し冗長に感じたりしてました。by viewModels()で書けちゃうのはかなりスマートで見やすくなるように感じます!
Fragmentコンテナを用意するときにlayoutファイルにFrameLayoutって少し直感的ではないですよね…。
Fragmentを乗せるためだけの専用のViewがあったら、誰が見てもfragmentが乗っかってくるんだ!と直感的でわかりやすいように思います!
LiveDataに待望のdistinctUntilChangedが追加されました!これで、汎用的に特定のプロパティ変更検知ができそうですね。
Coroutineのscopeって意識することが多くて、慣れるまで難しいように感じます。
それぞれのライフサイクルに合わせたscopeが用意されるようになることで、相当のことがない限りはこれで完結してしまうのでは!?というくらい個人的に嬉しいです。
1年でだいぶMVVM with coroutineの書くための仕組みができてきたのではないでしょうか?
これからのAndroid開発のためにJetpackを勉強しておくとよさそうですね!
『リモートビルドのすゝめ』
発表者: @marshi
普段、開発をするときはローカルでビルドするのが当たり前だと思っていました..。ビルドを走らせたら、マシンリソースの一部が奪われたり、処理待ちだったり、そもそもビルドが遅いとかありませんか?それを快適にするためのリモートビルドみたいです!
外の強いサーバーにソースファイルを投げて、ビルドをした成果物ファイルをローカルPCで受け取る。サーバーにビルド環境を整えたり、ssh鍵交換をする必要はありますが、後はmainframerというツールを使って、サーバーとAndroidStudioをいい感じに設定したらリモートビルドができる!便利ですね。
ビルド速度は完全にマシン依存にはなりますが、並行作業が捗りそうで今すぐ試したくなる発表でした!
『CATSのアクセシビリティに関する取り組み』
発表者: @itome
アクセシビリティを普段気にしながら、開発したことはありますか?
今やモバイルアプリは、様々な人が使うと思われます。その様々なユーザーがアプリが提供している機能にできるだけ簡単にアクセスできるようにする必要があります。
世界には何かしらの障害を抱えた人が15%いるみたいです…知らなかったです。
その人たちにも配慮をしたアプリを実現することで15%の潜在的なユーザに使ってもらうことが可能になると。でかいですね。
CATSのAndroidチームでは、アクセシビリティの対応を積極的に行っていて、一人でも始めれるのこと。
実際にユーザと同じ目線で検証しているのは、とても素晴らしいと思いました。また、チームではアクセシビリティのレビューをしたり、自動テストまで行われているとのこと…!
アクセシビリティ対応を考えさせられるいい発表でした。
『タップルでたっぷりDaggerを使ってマルチモジュール構築している話』
発表者:@stsn_jp
タップルでたっぷりは、弊社の@ogaclejapanのFlux de Relaxという語感のいいタイトルにインスパイアされたのが由来らしいです。
タップルでは、AndroidDaggerを使っているが無理して使う必要がないみたいです。
DynamicFeatureModuleと相性が悪く、ViewModelのサポートが9/11現時点では入ってないとのこと。ただ、issueは立ってるので、期待はしていいかも….?
AnalyticsModuleは、ライブラリの知識を出来る限り閉じ込めたいときに有効な手法です。
具体的には専用Moduleを用意し、interfaceを定義してあげて、実装をinternal、@Bindsで依存定義してあげることで実現できます。
FeatureModuleはxxFeatureModuleのように各moduleを定義してあげ、他のclassをinternalにすることで、外moduleからの参照を最小限にできるとのこと。
FeatureModule間で遷移するとき、各画面をSubModuleに切り出してることによって、お互いが直接参照できなくなるという問題があります。これに対してのアプローチが大きく3つあるみたいです。
実際にタップルで採用されているのは専用のModuleを作成し、各画面のinterfaceを用意し(xxDirectionsとする)、これを使って遷移するとのこと。実際には、この専用ModuleをRouterModuleに配置し、実装を各FeatureModuleに任せているという感じですね。
マルチモジュール x Daggerをたっぷりしたい方は是非参考にしてみてください!
『COIL ことはじめ』
発表者: @furuwasa
AndroidでImageLibraryといえば?Glide, Picasso, Fresco…etc.
もはやデファクトになりつつある、ImageLibraryに先月、彗星の如く現れたのがCoilです。
Githubのスターも9/11現在、1712もついてます…!
CoilはKotlinファーストで、高速、軽量(Glideの1/8)なのが売りみたいです。
確かに紹介されているCodeとかをみると、直感的で分かりやすく、Kotlinらしい書き方がされていていいなと思いました。
DynamicImageSamplingは個人的にいいなと思って、聞いていました。うまく使うことで、クロスフェードアニメーションと組み合わせて、低解像度から高解像度に切り替えることでUX的にもいい体験を届けれそうですね。
Coilの画像パイプラインはRealImageLoaderとして定義されており、Mapper, Fetcher, Decoderの3つのクラスで構成されているみたいです。実装詳細をスライドでLTとは思えない量で紹介してくださっているので、ぜひご覧下さい!
もしかすると、この先Coilが選択肢に入るのが当たり前に…そんな日もくるかもしれませんね。
『Android IME ことはじめ』
発表者: @isSatake
IMEは古い情報ばかり出てきてしまうが故に貴重な知見で、いい発表でした!懇親会でもIME目的の人などがおり、会話が盛り上がってる姿が見られました。
IME: 文字入力を行うためのソフトウェアのことです。
IME開発をするには、AndroidManifestにおまじないを書かないとだめみたいで、これから開発したい人はしっかりと書きましょう!
実際の開発は、主にInputMethodServiceを継承したクラスを書いていくみたいです。
キーボードUIを定義できるKeyboardViewが存在していたらしいが、最新のAndroid10からはdeprecatedに….。
そんな今回IMEを発表してくださった、佐竹くんは趣味でIMEを開発していて、楽譜が書けるIMEを開発中とのこと!
すごいので、ぜひスライドの動画をご覧下さい。
さいごに
今回も多くのエンジニアの皆さんに足を運んで頂き、ありがとうございました。今回は学生の参加者も結構多かったみたいです。弊社ではAndroid以外にも様々な分野で勉強会やMeetupを開催しております。詳細や募集方法につきましてはこちらに随時更新していますので、是非ご覧ください。
サイバーエージェントではAndroidエンジニアを大募集中です!
弊社には今回登壇してくださった方以外にもたくさんの素敵なAndroidエンジニアがいます。まずは軽く雑談からでもしてみませんか?以下のページから気軽にお声掛けください!
サイバーエージェントのAndroidエンジニア募集中
カジュアル面談からスタートさせたい方はコチラ