ソーシャル経済メディア「NewsPicks」でiOSエンジニアをしている金子です。
先日、弊社ユーザベース主催でTCA(The Composable Architecture)の勉強会を開催しました。
本記事では勉強会の開催レポートをお届けいたします!
- 総勢約140名の参加者
- 入門から最新バージョン情報、開発ノウハウまで!バラエティに富んだ10名の登壇者によるLT
- TCA入門したてなので、自分が馴染みのある実装と比較しながらキャッチアップしてみる(fumiyasacさん)
- TCA魔法学入門(dazyさん)
- 個人開発をTCAで運用していくということ(entaku0818さん)
- TCA with UIKit(tatsubeeさん)
- むやみにActionを送信してはいけない(takehilo)
- TCA Practice in 5 min(d_dateさん)
- TCA+Observationではなぜstructの変更を受け取れるのか(Ryuさん)
- DocC Tutorial と TCA におけるテスト機能の紹介(kalupas226さん)
- TCAの Shared Stateって どういう仕組みになってんの?(y.imajoさん)
- TCAにおける副作用の分離(uabyssさん)
- TCA仲間を作る懇親会
- アーカイブ動画
- おわりに
総勢約140名の参加者
本勉強会はオフライン(弊社オフィス)とオンライン(Youtube Live)のハイブリッドで実施しました。
事前の登録者数は全部でなんと169人...!(枠が余ってるように見えますが、増枠に次ぐ増枠でここまでの規模になりました...!)
TCAという技術への注目度の高さが伺えますね。
勉強会企画当初には全く予想もしていなかった反響をいただき、運営メンバーの一人として嬉しい限りです。
そして勉強会当日、オフライン約30名、オンラインではなんと最大110名の方にご視聴いただいたようです。
X(Twitter)にも勉強会についてのたくさんの投稿をしていただきました。
ハッシュタグ #tca_waiwai でトゥギャっておきましたので、是非ご覧ください。
入門から最新バージョン情報、開発ノウハウまで!バラエティに富んだ10名の登壇者によるLT
イベント公開当初はLT枠を5名までとしていました。
5名の枠でもなかなか登壇者は集まらないだろうと思っていたので、5分LTでQAを挟みつつ、ゆったり進行するつもりでいました。
ところが、ありがたいことにconnpassページを公開して数日でLT枠が埋まってしまい、あわてて増枠して最終的に10名もの方々にご登壇いただくことができました。
その結果、入門から最新バージョン情報、開発ノウハウ等々、バラエティに富んだ様々な内容を参加者のみなさまにお届けできる形となりました。
全ての発表に関して資料を公開いただいていますので、ここではそれぞれの内容について簡単にご紹介させていただきます。
TCA入門したてなので、自分が馴染みのある実装と比較しながらキャッチアップしてみる(fumiyasacさん)
自作したReduxアーキテクチャとTCAとの違いについて、多くのコードサンプルを用いて解説をしてくださいました。
TCAはElmやReduxの考え方がベースにあることが公式に言及されていて、当然共通点も多いです。
発表にもありましたが、TCAは状態管理や副作用の扱いだけでなく、テストやDI、ナビゲーションなどのサポートも充実している点もポイントですね。
TCA魔法学入門(dazyさん)
「TCAって魔法(みたいなコード)多くないですか?」(スライドより)
同感ですw そして、バージョンアップのたびにその魔法は増えていきますね。
TCAはSwiftの最新機能を積極的に取り入れて、よりシンプルなAPIになることを意識して開発が行われています。
本発表ではそんな魔法の中から、@Dependency
と_printChanges(_:)
の2つのAPIについて解説をしてくださいました。
個人開発をTCAで運用していくということ(entaku0818さん)
個人開発されているアプリでTCAを採用していて、とある画面がTCAでどのように設計されているかを解説してくださいました。
画面キャプチャとコード例と共に解説していただいているので、TCAにまだあまり馴染みがない方にとっては、実装がイメージしやすくとても参考になる発表だと思います。
発表では軽く触れられていただけでしたが、バージョンアップの辛み、わかりますw
TCA with UIKit(tatsubeeさん)
UIKitでTCAを利用する上での基本と、いくつかの注意点について解説してくださいました。
TCAはSwiftUIとの親和性が高いライブラリですが、UIKitもサポートされています。
発表でも言及されていますが、ビューがSwiftUIとUIKitのどちらで実装されていても、Reducerの形が変わらないので、UIKitベースでTCAを使いつつ後からSwiftUIに移行するというのも可能ですね(弊社でも経験があります)。
むやみにActionを送信してはいけない(takehilo)
僕も登壇者の一人として発表をさせていただきました。
TCAにおいてActionの送信は決して軽い操作ではなく、注意しないとパフォーマンス上の問題を引き起こすことについて、NewsPicksアプリでの具体的な事例をご紹介しました。
TCA Practice in 5 min(d_dateさん)
TCAの最新バージョンで導入されているAPIについて解説してくださいました。
TCAはバージョンアップと共にどんどんAPIがシンプルになっていくので、最新のAPIを活用することでコード量が減り、より可読性の高いコードにすることができます。
TCAは互換性が維持されるためバージョンアップしてもコンパイルエラーにならないように工夫されていますが、本発表で紹介されているAPIを漏れなく採用してコードを改善しましょう。
TCA+Observationではなぜstructの変更を受け取れるのか(Ryuさん)
※発表スライドは後日公開いただけるそうなので、公開されたらここにリンクを貼ります
TCAにおいて、Stateはstructで実装します。しかし、@Observableマクロはstructに対して適用することはできません。
TCAはこの問題を見事に解決していますが、具体的にどのように解決しているのか、その基本的な部分を本発表を通じて理解することができます。
僕はまだあまり理解できていない部分だったので、非常に参考になりました。
DocC Tutorial と TCA におけるテスト機能の紹介(kalupas226さん)
本発表の中で紹介されているTCAワークショップのリポジトリは必見です。
ドキュメントはDocCで作られていてとても見やすく、チュートリアルの内容はとても実践的ですぐに業務で活かせるレベルのものになっています(公開いただけるなんて、なんとありがたい...!)。
後半はTCAでテストを書くときに知っておきたい網羅性(Exhausitivity)について解説してくださっています。
こちらもわかりやすいので、是非キャッチアップしてみてください。
TCAの Shared Stateって どういう仕組みになってんの?(y.imajoさん)
TCA1.10.0でのリリースが見込まれている新機能、Shared Stateについて解説してくださいまいた。
僕もまだ全然キャッチアップできていない機能なので、この発表で概要を掴むことができてめちゃめちゃありがたかったです。
本発表で学んだ概要を把握した上で、Point-Freeの解説を見たりしていこうと思います。
TCAにおける副作用の分離(uabyssさん)
TCAにおいて、状態変更と副作用のコードがどのように分離されているかについて、具体的なコード例をもとに解説してくださいました。
実際のアプリにおいては、単なる状態変更だけでなく、API通信やDBアクセスといった副作用を伴うケースがほとんどです。
状態変更と副作用を同時に扱う場合、TCAではどのような実装をすることができるのか、本発表を通じて理解することができます。
TCA仲間を作る懇親会
全てのLTが終了した後、オフライン参加者で懇親会を行いました。
TCAという共通のテーマで集まった参加者なので、会話のネタには困らなかったのではないかと思います。
実は勉強会を開催した目的の一つとして、僕がTCA仲間を作りたかったというのがありますw
TCAは数年前から注目されていて、昨年1.0のリリースを迎えて以降導入する企業も増えてきている印象ではありますが、国内ではまだまだ技術的な発信がされておらず、開発で困ったときに頼る先がなかなかないのが現状です。
TCAは学習リソースが豊富で、Github DiscussionsやSlackでのやり取りも活発なので、困ったときはまずそこで相談するというのがオススメではありますが、実際こういうとき他のプロダクトではどうしてるのかなあ?っていうのを直接話せる仲間がいると嬉しいですよね。
懇親会ではたくさんの方々とお話することができ、今回参加いただいた方はみんなTCA仲間だと勝手に思っていますw
アーカイブ動画
本勉強会のアーカイブ動画を以下のURLにて公開しております。
今回参加できなかった方、参加したけど復習したい方、是非是非アーカイブ動画をご覧ください。
なお、途中で配信トラブルがあり、d_dateさんの発表の冒頭で音声が出ていない箇所があります。
なんとd_dateさん自ら、帰宅してすぐ発表内容をご自身で撮影されたとのことで、こちらのURLも共有させていただきます(ご迷惑おかけしたにもかかわらず、d_dateさんありがとうございます...!)。
おわりに
参加者の方にアンケートでTCAの経験について伺ったところ、約1/3の45名の方に回答をいただき、以下のような結果となりました。
今回は参加者の裾野を広げるために、TCAに興味がある・触ったことがある・バリバリやってる方のどなたでも参加可能というコンセプトを打ち出していたので、様々な属性の方にご参加いただけて良かったです。
LTもやや入門寄りの内容から実践的なノウハウまで幅広かったので、どなたにとっても楽しめる会にできたのではないかと思います。
ただ、実践的な内容についてはもっと長い時間話を聞きたかったというご意見もいただきました。
TCAというキーワードでこれだけ多くの方にご参加いただけることがわかったので、ノウハウをじっくり聞ける会、逆に入門的な内容をメインに扱う会など、今回とは違うスタイルでの勉強会も、今後検討していきたいと思います。
TCAを盛り上げていくぞ!!