はじめに
今までSwiftUIを使用してアプリを作る際、アーキテクチャには、情報量なども多いことから「MVVM」を採用していました。
しかし、ふと「本当にMVVMが最適なんだろうか?」と思いネットで調べた結果、どうやら「The Composable Architecture(TCA)」というものがいいらしいという情報を見つけたので調べることにしました。
今回は、その調べたことを忘れないようにメモします。
The Composable Architecture(TCA)とは
The Composable Architecture(TCA)とは、Apple製品プラットフォーム上でのアプリ開発におけるシステムアーキテクチャをフレームワークのかたちで提供してくれるフレームワークです。
TCAが提供する機能
- State Management
シンプルな値型を使ってアプリケーションの状態を管理し、多くの画面で状態を共有することで、ある画面での変異を別の画面ですぐに確認できるようにする方法。 - Composition
大きな機能を小さな部品に分解して、それぞれ独立したモジュールに抽出し、簡単に接着して機能を形成できるようにする方法。 - Side Effects
アプリケーションの特定の部分を、可能な限りテスト可能で理解しやすい方法で外界と対話させる方法です。 - Testing
アーキテクチャで構築された機能をテストするだけでなく、多くのパーツで構成された機能の統合テストを書いたり、副作用がアプリケーションに与える影響を理解するためにend-to-endテストを書いたりする方法です。これにより、ビジネスロジックが期待通りに動作していることを強く保証することができます。 - Ergonomics
上記のすべてを、できるだけ概念や可動部の少ないシンプルなAPIで実現する方法。
TCAの主な概念
- State
アプリケーションの状態を表します。Stateは、Viewによって表示される情報を保持します。 - Action
アプリケーションで実行される操作を表します。Actionは、View、Reducer、およびEffectから生成されます。 - Reducer
Actionを受け取りStateを更新する役割があります。Reducerは、アプリケーションの状態の変更を管理します。 - Effect
外部とのやり取りを表します。Effectは、非同期タスク、ネットワーク通信、またはデータの保存などの副作用を処理します。 - Environment:
アプリケーションの環境を表します。Environmentは、Effectの実行に必要な依存関係を提供します。また、プロパティラッパーの@Environmentとは全くの別物です。
TCAを使用するメリット
- Reduxを使用していた人には使いやすい
- 可読性があがる
- テストがしやすい
- アプリケーションの開発プロセスを簡素化し、品質の向上が期待できる
TCAを使用するデメリット
- 学習コストが高い
- テストコードを書いたことが無いと理解が難しい
- 関数型プログラミングの知識が必要
- Combineの理解が必要
感想
TCAについて色々調べてみた結果、初学者には学習コストが高い上に個人での開発にはあまりメリットがなさそうな感じがしました。ですが、TCAを採用することでメリットもたくさんあると感じました。また、今回完全に理解することができなかったので、今後サンプルコードをいくつか作りTCAの理解を深めていきたいと感じました。
参考記事