🏃‍♂️

Flutterと単方向データフローについて

2024/10/04に公開

はじめに

自分自身はWebエンジニア出身でFlutterでの開発経験はほぼ皆無なのですが、個人的に最近Flutterの勉強を始めています。

Flutterのアーキテクチャについて調べている中で、単方向データフローの思想になっているかが大事という情報を見かけたのですが、iOS・Android・Flutterではまた色々事情が異なりそうだったので、軽く調査してみました。

iOS・Androidの場合

https://zenn.dev/tonionagauzzi/articles/be9d39bf2f9718

こちらの記事がとてもわかりやすかったです。双方向データバインディングについての解説で使われている図ではMVVM + Usecaseになっていますが、確かに各社の事例を調べているとよく見る構成です。

最近よく聞くJetpack ComposeはAndroidの宣言型UIフレームワークであり、強く単方向データバインディングを意識した設計になっているようで、Android公式も今ではJetpack Composeを使った単方向データフローを推奨しているようです。Androidのアーキテクチャガイドは詳しくて読むだけで勉強になりますね。
https://developer.android.com/topic/architecture?hl=ja#unidirectional-data-flow

iOSアプリの方もSwiftUI/CombineやTCAが登場したことで、単方向データフローへの置き換えが着々と進んでいっているようです。

Flutterの場合

Flutterのアーキテクチャという意味ではスタンダードは特に決まっていなそうです。

ネイティブのモバイル開発者がFlutterを使うことが多いので、学習コストの観点からAndroid・iOS両方で使えるアーキテクチャとして、MVVM + レイヤードアーキテクチャの構成でFlutterも作る方向で考えているチームが多そうでした。

ただSwiftUI、Jetpack Compose、Flutterのような宣言型UIとMVVMは相性が良くない問題もあるらしく、アーキテクチャを検討する余裕があるなら、MVVM以外の構成を検討しても良さそうです。

所感

この辺りの記事は特に参考になりました。
https://zenn.dev/8rine23/scraps/cbb59f85814ea1
https://qiita.com/karamage/items/8a9c76caff187d3eb838
https://developer.android.com/topic/architecture?hl=ja

解決したい課題意識から過不足のないアーキテクチャを考えることが大事そうですね。特にAndroidのアーキテクチャガイドはこれからのモバイルアーキテクチャで抑えておきたい原則が書かれていてとても参考になるので、熟読したいと思います。

Discussion