Droidkaigi 2019に参加しました
2019/2/7~2/8に行われたDroidkaigi 2019に参加してきました。
弁当おいしかった。
バリスタさんは長蛇の列でした。おいしかった。
今年はコントリビュートしました🎉(左上)
パーティーはめっちゃ人がいました...
以下参加したセッションのメモです。
1日目
マルチモジュールなプロジェクトでテストはどう変わる?
- Mutation testing
- 変更検知してテストが通ってしまったら変更点に関するテストがないと判断されて失敗する
- 抜けているテストがわかる
- PIT pitest.org
- マルチモジュール化したとき、どの組み合わせまでテストを書くか?を要検討
マルチモジュールプロジェクトでのDagger2を用いたDependency Injection
- Dagger-AndroidのモチベーションとしてはApplicationがinjectできることを知っているのが良くないよね
- FragmentInjectが上書きされるので考える必要がある
LiveData と Coroutines で実装する DDD の戦術的設計
- IDをStringにしない(理由は2017?で発表済み)
- Stringで比べたときに他のIDだとしてもマッチングしてしまう
- 文字列のテキスト表現をどこに置くか?
- 誰の関心事か?
- 日付・時間がモデルの関心事で共通ならモデル
- UIごとに変わるならUIの関心事
- 誰の関心事か?
- Repository
- オブジェクトがメモリ上にあるかのように振る舞う
- nullableにするのではなく共通項目をsealed classで定義
- Lunch, PartyをTimelineItemとしたが、そのようなユビキタス言語はないので悩ましいところ。ドメインエキスパートとすり合わせる
- suspend は非同期を表明するものとも言える
Master of Android Theme
- どんなattributeがあるかはAndroid Studioの補完→GitHubでコード見る
- どう共通化するかでstyle(部分的)かtheme(アプリ全体)か選ぶ
The good and bad of modern app architecture
- BDDでテストかけるようにしてもメンバーの母国語が英語じゃないから逆にわかりづらくなる
- きれいな設計にしても新人がなぜこんなにコードを書かなければならないのかとなり教育も大変
- リリースが迫ってくるとワークアラウンド的に規約から外れたコードが入ってメンテナンスが大変になる
- 層を分けて担当する
Redux for Android
- ReduxはFlux実装の一部
- Reduxは状態管理のため
2日目
中規模以上のアプリ開発におけるCIレシピとリリースフロー戦略
- BitriseだとGUIで組めて属人化しにくくできる
- tagトリガーでGoogle Playアップロード
- 規模の大きいときのfeatureのブランチ名をきめておいてCIを設定
- Bitriseでは_をつけることで単体では実行できないユーティリティフローとして定義できる
- Google Play Developer APIで段階公開を自動化できる
- Crashlytics APIでは統計データを取れないので連携はしんどい
Guide to app architectureを踏まえた既存アプリの設計改良
- 人的リソースや設計の将来性も考慮する
- イベントはSingleLiveEventで、状態はDatabindigで行う
Deep dive into MotionLayout
- スワイプやクリックに応じてViewを動かしたり色を変えたりできる
- CycleEditorでGUIで設定できる
- KeyTriggerでどこまでスクロールしたかでモーションを指定できる
- alpha4でRecyclerViewとの組み合わせが入る。SharedElementTransitionみたいなことがMotionLayoutでできる。
Android Studio設定見直してみませんか?
- File Colorでバリアントでビルドされるところが色付けされるの助かる
- Layout EditorでXMLが左に来るのありがたい...
Lifecycle, LiveData, ViewModels - The inner wiring
- Android PからonSavedInstanceState()がコールされるタイミングがonStop()の後になった
- FragmentとFragmentのViewのライフサイクルは異なる
Androidにおけるパフォーマンスチューニング実践
- ライフサイクルを考慮していつ破棄するのかを意識する
- レンダリングはハード(HWA)とソフトで2種類ある
- ソフトは全描画
- ハードはdirty(必要な分)のみ
- トラバーサルで描画するのでコストが高い
- 開発者オプションを有効
- 赤はoverdrawが4回以上走っているので要改善
- 階層を減らす。inflateの第二引数をtrue。ConstraintLayoutを使う
- Protocol bufferでサイズを減らす
- WebPでサイズ圧縮
Navigation Architecture Component によるアプリ内遷移の管理
- Deeplink時でもバックスタックを自動形成してくれる
- SafeArgで引数を渡した遷移のためのメソッドが自動生成される
build.gradle.ktsに移行しよう
- Kotlin移行で補完が効くようになる。エラーが表示されるようになる
- 一部分だけでも移行できる
- エラー修正の最終手段はgroovyとして別ファイルで読み込む
おわりに
今年はマルチモジュール関連の話が多かった印象でした。Droidkaigiに参加しているようなエンジニアでもまだまだ導入できてないところが多そうなのでまだ安心・・・という訳じゃないですが、積極的にマルチモジュール化していきたいと感じました。アーキテクチャ系の話もいくつか聞きましたが、MVVMからFluxにしたみたいな話もあったのでFluxの何がいいか調べ始めないとだめだなと。その上でMVP/MVVM/Flux/その他でどのアーキテクチャがアプリに適しているかを検討したい。
MotlonLayoutやNavigationは導入したら面白そうだなという雰囲気を感じれたので導入機会を探っていきたいところ。AACは入っているの当たり前でしょ感があったのでMVPだったらどう入れるか?MVVMにしてViewModel入れるか?等考えたほうがいいなと思いました。
2日間お疲れ様でした。