起床
Android Studio 3.3.1 が出たのでアップデートしてから家を出た。
"Hopefully it includes a fix for slow Kotlin file editing!"
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月6日
オッ
Android Studio 3.3.1 released : androiddev https://t.co/z4eOT83Nyy
ことしもやってきたぞ DroidKaigi (@ ベルサール新宿グランド in 新宿区, 東京都) https://t.co/opQdKpO6JH pic.twitter.com/EHvR8NH5DP
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
わいわい pic.twitter.com/pjPoaEoQZW
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
マルチモジュールなプロジェクトでテストはどう変わる?
Android アプリを作る場合どういう指針でモジュールを分割していくかは全く把握してないんだよね…DroidKaigi アプリがマルチモジュールだしあとで再確認してみよう #droidkaigi #hallA
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
モジュール単位のテスト観点、モジュールを1部品としてかんがえるという意味でいいかもしれないという感触ある。ただ、モジュールができあがるまで最終的なテストも通らないというのはあるか。 #droidkaigi #hallA
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
これについては「そのための mock だよね」という意見を頂いた。自分が単体テストを作ってきた感覚だと対象クラスが依存するものを mock に置き換える、という使い方をしていたので、できあがっていない部分はとりあえず mock にするという観点を持てていなかった。
Unit test for ViewModel and LiveData
Truth ちょいちょい見てるけれどまだ使ったことない。アサーションライブラリだよね? #droidkaigi #room3
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
アサーションライブラリ Truth は Google に入社した Jake が作ったライブラリで AssertJ ぽいもの。 ここらへんに違いが書いてある。
Model 内での待ち合わせがある場合は例外だけれど UI スレッドと別のスレッドで叩きたいというのが Coroutines する理由の1つなので ViewModel と Repository の間が Coroutines で繋がるのはそうだよね、という印象 #droidkaigi #room3
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
これは言葉不足。Model 内は基本的に同期でよいと考えていて、時間の掛かること、複数の処理の待ち合わせが発生するなら、Kotlin であれば suspend を使って中断可能関数にする手段が考えられるよね、と言いたかった。
distinctUntilChanged。重複するイベントを排除しながら通知できる KTX。よい。 #droidkaigi #room3
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
LiveData と Coroutines による DDD の戦術的設計
ユビキタス言語がグチャグチャデス言語になってると会話の言葉もソースコード上での名前もグチャグチャデス言語ナイズドされていくのでユビキタス言語大事 #droidkaigi #room1
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
「表示する文字列」は UI の都合だから View あるいは View の責務、BindingAdapter を使えれば ViewModel が公開した値をバインディングしてそこで「表示する文字列」の設定をする、というのも良いんじゃないかと思う #droidkaigi #room1
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
BindingAdapter.kt が神のファイルになる恐れがあると前から思っているけれど、個人開発ではまだ明確な問題に遭遇していなく、1ファイルでやってしまっている。 仮に分割するとするとどのような観点で切り分けていくかは少し気になる。LayoutXML ファイル単位という観点だと、同じ処理をするメソッドが複数産まれてしまいそうだし…。
「ドメイン」「ユースケース」「リポジトリ」ここらへんの言葉ってだいたい既に別の用途で使っているものだから設計のお話でここらへんの言葉が出てくると ? となったり、はー、理解したわー(してない)になるのは触れ続けることで解決する、という選択肢になりがちな課題ある #droidkaigi #room1
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
ここは会話におけるコンテキストがとても重要だと思っていて、ついでに、コンテキストが共有されていてもなんとなくの理解だとやはり齟齬が発生しそうなのでこれはちゃんと共通認識を持てるようにする知識がそもそも必要になるのかなと思った。無論、自分を含む。
あ、なるほど。Repository が中断可能関数でないと未来に向かって走り出した Repository を止めることが出来ない(Cancellable じゃない)のか、それは、そうだ。これは中断可能関数を使うべき理由の1つだなあ。 #droidkaigi #room1
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
FCMを使った用途に合わせたPush通知設計
10万人フォロワー規模のライブ配信開始の通知を10分以内で捌く目標…。 #droidkaigi #room7
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) February 7, 2019
通知送信対象を絞り込むために考えること、多すぎる #droidkaigi #room7
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) February 7, 2019
これまでの経験上、プッシュ通知を細かく取り扱うような機会に遭遇することがなかった。時間制約の厳しい、たとえば10時ちょうどにプッシュ通知が表示されるような要件を考えたとき、最近ではどのようなアプローチが適切だろうか。自分が思いつく手段としては、WorkManager を使って予めプッシュ通知が表示される Work を事前に登録しておく、というものだった。大量ユーザを対象とする練習は困難ではあるが、こういった使い方が上手くできるか検証できていないので試す必要がある。
Understanding Kotlin Coroutines
「コルーチンは中断するもの」「スレッドはブロックするもの」 #droidkaigi #room3
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
ViewModel 用にコルーチンスコープが欲しい所作の Job() + Dispatchers.Main をシュッとできるというのがこれ、ということか。
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
lifecycle/viewmodel/ktx/src/main/java/androidx/lifecycle/ViewModel.kt - platform/frameworks/support - Git at Google https://t.co/VDZJuVAhR0
runBlocking はテストコードでのテストを実現するためのメソッドだよなー、と思っていたけれど、そういう認識でよさそう #droidkaigi #room3
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
runBlocking
の使いどころについてはドキュメントにも書いてあった。
It is designed to bridge regular blocking code to libraries that are written in suspending style, to be used in main functions and in tests.
RxJava でやってたこと Coroutines で賄えるなら、それは、RxJava 外しても大丈夫だよね、ということになる #doroidkaigi #room3
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日
Coroutines に対する自分の認識の再確認ができたので次は Channel などをちゃんと理解したい #doroidkaigi #room3
— バトルプログラマー柴田智也🔄🍣乙倉とよしのんと結婚した (@tomoya_shibata) 2019年2月7日