ページ内ナビ
概要
The Composable Architecture(TCA)は、アプリのstate、user action、side effect、testを一貫したmodelで扱うSwiftライブラリです。@Reducerと@ObservableStateでfeature domainを定義し、Storeを介してSwiftUI/UIKitからactionを送り、複数featureを合成できます。
特徴と向いている用途
公式資料に基づく紹介・実機未検証 · 内容確認日:
主な特徴
State・Action・Reducerをfeature単位へ閉じ込める
@Reducerでfeatureを定義し、@ObservableStateのStateとAction enum、Reduce bodyへstate遷移とeffectを記述します。UI eventとbusiness logicの流れを同じdomain modelで追跡できます。
出典:[2]
StoreとTestStoreでruntimeとtestを同じreducerから駆動する
SwiftUIではStoreOf<Feature>をviewへ渡し、stateを観測しながらactionをsendします。TestStoreではaction送信後のstate変化やeffectから戻るactionを順にassertでき、featureをcomposeしたintegration testにも利用できます。
出典:[2]
向いている用途
複雑なstateとside effectを持つiOSアプリをfeature分割したい場合に向く
画面数が増え、navigation、dependency、非同期effect、shared stateを一定の規約で扱いたいSwiftUI/UIKitアプリに適します。小さなfeatureをmodule化して再合成する設計を取りやすくなります。
出典:[2]
導入前の確認
参考にした公式資料
- [1]pointfreeco/swift-composable-architecture — GitHub repository(2026-10-06)
- [2]Composable Architecture 1.26.2 — README(2026-10-06)
- [3]Composable Architecture 1.26.2 — Package.swift(2026-10-06)
- [4]Composable Architecture 1.26.2 release(2026-10-06)
- [5]Composable Architecture MIT license(2026-10-06)
編集部からの補足
複雑なstate・navigation・dependency・非同期effectをfeature単位で整理したいSwiftUI/UIKitアプリに向きます。1.26.2はSwift tools 6.4とiOS 16以上が前提なので、既存projectのtoolchainとdeployment targetを先に確認してください。
3ステップで試す
- 1
ComposableArchitecture 1.26.2を追加する
確認済みreleaseを固定します。1.26.2はSwift tools 6.4、iOS 16以上が前提です。
.package(url: "https://github.com/pointfreeco/swift-composable-architecture", exact: "1.26.2") - 2
最小のReducer featureを定義する
READMEのBasic Usageに沿ってState・Action・Reducerを1つのfeature domainへまとめます。
import ComposableArchitecture @Reducer struct CounterFeature { @ObservableState struct State: Equatable { var count = 0 } enum Action { case incrementButtonTapped } var body: some ReducerOf<Self> { Reduce { state, action in switch action { case .incrementButtonTapped: state.count += 1 return .none } } } } - 3
Storeを作りactionを送る
同じreducerからStoreを作成し、action送信でstateが更新される最小経路を確認します。
let store = Store(initialState: CounterFeature.State()) { CounterFeature() } store.send(.incrementButtonTapped)
成長
成長の推移 · 直近30日
14,952 Stars
推移データを蓄積中です。
開発アクティビティ
直近90日・週次
- Commit(直近30日)
- 0
- Open PR
- 10
開発アクティビティを蓄積中です。
Built with
カテゴリとタグ
GitHubデータ
関連情報
関連記事を投稿するこのOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。
あわせて探訪
- Starscream8,641 Stars
共通タグ 3件 · 共通カテゴリ 2件 · 同じ言語
RFC 6455 WebSocketをSwiftで接続し、text/binary・TLS/WSS・圧縮eventを扱う
Swift - Nimble4,836 Stars
共通タグ 3件 · 共通カテゴリ 2件 · 同じ言語
expect・matcher・polling expectationでSwift testの期待値を読みやすく表現する
Swift - DeviceKit4,733 Stars
共通タグ 3件 · 共通カテゴリ 2件 · 同じ言語
UIDeviceをvalue typeで補完し端末model・family・simulator・battery・hardware capabilityを判定する
Swift - SnapshotTesting4,362 Stars
共通タグ 3件 · 共通カテゴリ 2件 · 同じ言語
UI・request・JSONなど任意の値をreference snapshotと比較してregressionを検出する
Swift - Apollo iOS4,037 Stars
共通タグ 3件 · 共通カテゴリ 2件 · 同じ言語
GraphQL schemaから型安全なSwift modelを生成し、query・normalized cacheを扱う
Swift - Flutter179,343 Stars
共通タグ 3件 · 共通カテゴリ 2件
Dartの一つのcodebaseからmobile・web・desktop UIを構築するcross-platform SDK
Dart
情報の誤りを報告
掲載内容に誤りや古い情報があればお知らせください。