😬

[Swift]TCA初心者がアプリを作ってみて、役に立ったこと、つまづいたこと

2024/09/08に公開

概要

TCAを触ったことがない状態から、アプリを作成してリリースするまでのことを記事にした。

  • TCAの学習で役に立った資料
  • TCAを使ってみてつまずいたこと
  • TCAを使ってみてよかったこと

環境

  • TCA v1.13.1
  • Xcode: v15.3

作ったアプリ

https://apps.apple.com/jp/app/randomfizzbuzz/id6642706096?l=en-US

タイムライン

TCAの学習を開始して、リリースするまで3ヵ月(10Week)かかった

  • Week1~Week3: TCAの学習
  • Week4~Week10: アプリの開発

学習で役に立った資料

学習編

TCAのREADME

TCAの思想や必要な資料へのリンクなどが書かている。
https://github.com/pointfreeco/swift-composable-architecture

TCAのチュートリアル

TCAの雰囲気に触れる。
https://pointfreeco.github.io/swift-composable-architecture/main/tutorials/composablearchitecture/01-01-yourfirstfeature/

TCAのリポジトリの SwiftUICaseStudies

TCAの各要素(State, Action, Reducer)やそれをViewに組み合わせる方法などを基礎を学べる。
Viewの分割やNavigationのサンプルもあって、アプリを開発するために必要な情報を得ることができた。
https://github.com/pointfreeco/swift-composable-architecture/tree/main/Examples/CaseStudies/SwiftUICaseStudies

TCAのリポジトリのサンプルアプリ

TCAのリポジトリには、サンプルアプリが7個ある。アプリを作るときに、実際にTCAをどうやって使用するかを学べた。
ビルドできるため実装と動作を比べながら学べる。
https://github.com/pointfreeco/swift-composable-architecture/tree/main/Examples

TCAで作られた大きめのゲームアプリ

大きめのアプリを作成するときの実装例をみれる。
Dependencyの作り方やモジュールの分割の方法が学べた。
https://github.com/pointfreeco/isowords

上記すべて、TCAを開発しているPointfree社が提供している資料やリポジトリ。資料の充実度が分かる!(◎_◎)

開発編

個人的な Effective TCA

ベストプラクティスなどがまとめてあって、何回も読んだ。
実装で困ったときに、答えが見つかったりする。
https://zenn.dev/kalupas226/articles/5b0bf98c922aa0

Swiftによるアプリ開発のためのThe Composable Architectureがすごく良いので紹介したい

TCAについてのこと、つまずきやすいポイント、参考資料へのリンクなどまとまって、とても良い
https://qiita.com/yimajo/items/77c204ab091223f9cb14

公式ドキュメント

困ったときの答えは、だいたいここにある。
特に、NavigationやPerformanceは、大事なことが書いてあった。
英語なのがしんどいけど。
https://pointfreeco.github.io/swift-composable-architecture/main/documentation/composablearchitecture/gettingstarted

TCAを使ってみてつまずいたこと

Child ViewをParent Viewから分割する方法

https://github.com/pointfreeco/swift-composable-architecture/blob/main/Examples/CaseStudies/SwiftUICaseStudies/01-GettingStarted-Composition-TwoCounters.swift

  • NavigationもStateで管理するというのが、初見で難しかった。
  • 公式DocumentのNavigationの章を読むことで、理解した。(公式ドキュメント)
  • 自分でもまとめてみた

https://zenn.dev/ueeek/articles/20240901tca_navigation
https://zenn.dev/ueeek/articles/20240901tca_tree_based_navigation
https://zenn.dev/ueeek/articles/20240901tca_tree_destination

知らないMacroがたくさんある

  • @Reducer@Presentsみたいな、TCAで定義されているマクロがたくさんでてくる。
  • 初めのうちは、よくわらないので、とりあえず呪文だと思うことにした。
  • 慣れてきたら、定義元に実装を見に行くとよかった。コード以外にコメントも丁寧に記述してあって、理解の助けになった。

TCAを使ってみてよかったこと

サンプルプロジェクトがたくさんある

上でも書いたように、TCAを開発しているPointfree社から、たくさんのコードやサンプルプロジェクトが提供されている。
実装に困ったときなどは、だいたいサンプルプロジェクトのコードを読みに行くことで、答えが見つかる。
実装方針やベストプラクティスが公式から提供されているため、使用する側からすると、やりやすい。

ViewとLogic(Reducer)の部分を分離できる

制約として、状態(State)を変更するときは、Viewではなく、Reducerで行う必要がある。
厳しい制約だが、そのおかげで、ViewとLogicの分離ができ、ロジックの理解や変更がしやすいコードになった。

そのほか、感想

学習コストが少し高いと感じたが、資料が充実していて、大きくつまずくことはなかった。。
Macroのおかげて、定型的なコード(boilerplate)をあまり書かなくて済むため、書いていてあまりストレスがなかった。

Discussion