Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
.PSJ"UTVTIJ 4IJCVZBBQL +FUQBDL$PNQPTFͰ 3FEVYͬΆ͍ΞʔΩςΫνϟΛࢼ͢ +FUQBDL$PNQPTF "SDIJUFDUVSF
Slide 2
Slide 2 text
株式会社サイバーエージェント 株式会社CyberZ OPENREC.tv 2019年度 未踏スーパークリエータ Mori Atsushi Twitter: @at_sushi_at 2019年度 未踏スーパークリエータ LINE株式会社(2023年4⽉〜) Android application engineer 詳解 Kotlin Coroutines [ 2021 ] Katalog / Koject / InsetsX
Slide 3
Slide 3 text
Jetpack Compose進めています IUUQTFOHJOFFSJOHMJOFDPSQDPNKBCMPHMJOE@EFTJHO@TZTUFN@XJUI@KFUQBDL@DPNQPTF
Slide 4
Slide 4 text
今回のゴール Jetpack ComposeでReduxっぽいアーキテクチャ を試す⽅法と、そのメリット/デメリットを知る 1. 標準的なアーキテクチャの⾟み 2 . Reduxっぽいアーキテクチャを試す 3. ⾮同期処理を扱う 4 . Reducerを分割する 5. まとめ 🚀
Slide 5
Slide 5 text
標準的な アーキテクチャの⾟み 1
Slide 6
Slide 6 text
標準的なアーキテクチャ ViewModelでStateを保持
Slide 7
Slide 7 text
複雑な画⾯だと… Composableの引数が爆増 🤯 ࡍݶͳ͘૿͑Δ εςʔτͱΞΫγϣϯ
Slide 8
Slide 8 text
バケツリレー地獄 7JFX.PEFM 4UBUF "DUJPO 末端のコンポーネントと情報をやりとりするのは⼤変
Slide 9
Slide 9 text
単⼀責任の原則の違反 末端の変更に合わせて、親も変更する必要が出てくる มߋ͕ൃੜʂ ߹Θͤͯมߋ ߹Θͤͯมߋ ߹Θͤͯมߋ
Slide 10
Slide 10 text
不要なrecomposeの発⽣ ը໘ߋ৽ SFDPNQPTF SFDPNQPTF SFDPNQPTF 末端の更新のために親もrecomposeされる
Slide 11
Slide 11 text
ViewModelも肥⼤しがち…
Slide 12
Slide 12 text
ViewModelを分割? 状態を共有する場合等、上⼿く⾏かないケースも 7JFX.PEFM 7JFX.PEFM
Slide 13
Slide 13 text
Reduxっぽい アーキテクチャを試す 2
Slide 14
Slide 14 text
Reudxとは? JavaScriptアプリケーションのための状態管理ライブラリ 7JFX "DUJPO 3FEVDFS 4UPSF
Slide 15
Slide 15 text
Storeをコンポーネントが参照できる 4UPSF
Slide 16
Slide 16 text
GitHubに実装を上げています IUUQTHJUIVCDPNNPSJBUTVTIJLSFEVY
Slide 17
Slide 17 text
StateとActionを定義する
Slide 18
Slide 18 text
Reducerを作る
Slide 19
Slide 19 text
Storeを作る
Slide 20
Slide 20 text
StoreをCompositionLocalで提供
Slide 21
Slide 21 text
Storeの値を監視する 4FMFDUͰඞཁͳ ͚ͩࢹ͢Δ
Slide 22
Slide 22 text
ActionをDispatchする %JTQBUDIFSΛऔಘ "DUJPOΛݺͼग़͠
Slide 23
Slide 23 text
アプリケーションロジックを CompositionLocalで提供する? 暗黙的なデータ渡しになる 公式では推奨されていない Reduxを再現するため、今回は許容 🤔
Slide 24
Slide 24 text
💡 単⼀⽅向のデータフローが強制される 複雑なステートが管理しやすくなる ⼊⼒と出⼒がはっきりしてるのでテストが書きやすい デメリット:単純なステート管理には書くコードが増える バケツリレー地獄からの脱却 ⼦コンポーネントで直接Storeを参照できる デメリット:やりすぎると再利⽤性に⽀障が出る メリット/デメリット
Slide 25
Slide 25 text
⾮同期処理を扱う 3
Slide 26
Slide 26 text
⾮同期処理は苦⼿ Action -> Stateのデータフローから逸脱するため いろんな対応⽅法が存在 ActionCreator内で処理する ActionとIntentを分けてその間で処理する Reducer内で処理する(the Composable Architecture)
Slide 27
Slide 27 text
MiddlewareでSideE ff ectをもたせる 7JFX "DUJPO 3FEVDFS 4UPSF .JEEMFXBSF "1*%#
Slide 28
Slide 28 text
Actionを定義する UIからのActionに、⾮同期処理のActionを加える
Slide 29
Slide 29 text
SideE ff ectでActionを監視する 3FRVFTUͷ"DUJPOΛ ࢹ͢Δ
Slide 30
Slide 30 text
SideE ff ectでActionを監視する ,PUMJO$PSPVUJOFTͰ ඇಉظॲཧΛݺͼग़͠
Slide 31
Slide 31 text
SideE ff ectでActionを監視する ඇಉظॲཧ͕ྃͨ͠Β "DUJPOΛݺͼग़͢
Slide 32
Slide 32 text
Flowも監視してActionに変換可能
Slide 33
Slide 33 text
Reducerを分割する 4
Slide 34
Slide 34 text
Reducerが肥⼤化する… ࡍݶͳ͘૿͑Δ "DUJPO
Slide 35
Slide 35 text
Stateをネストさせる
Slide 36
Slide 36 text
各Stateに対してReducerを作る
Slide 37
Slide 37 text
複数のReducerを組み合わせる 4UBUFΛղ 4UBUFΛΈཱͯΔ
Slide 38
Slide 38 text
まとめ Reduxっぽいアーキテクチャを導⼊することで、 いくつかの課題が解決できそう 軽量なアーキテクチャなので、コピペして使うことができる 検討事項: 簡単な画⾯には不要な複雑さをもたらす 学習コストがかかる 標準的なアーキテクチャを逸脱することによる不安感