Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TCAを用いたAmebaのリアーキテクチャ

 TCAを用いたAmebaのリアーキテクチャ

SwiftUI、Swift Concurrencyといったモダンな技術の登場は、iOSアプリ開発に大きな変化をもたらしました。本セッションでは、これらの技術を活用して既存のUIKitとRxSwiftによる開発から脱却し、TCA(The Composable Architecture)を中心としたリアーキテクチャを行うAmebaの事例をご紹介します。

Naoki Odajima

March 03, 2025
Tweet

More Decks by Naoki Odajima

Other Decks in Programming

Transcript

  1. C A . s w i f t 2 0

    2 5 . 3 . 3 株 式 会 社 サ イ バ ー エ ー ジ ェ ン ト A m e b a L I F E 事 業 本 部 小 田 島 直 樹 TCAを用いたAmeba のリアーキテクチャ
  2. C A . s w i f t 2 0

    2 5 . 3 . 3 小 田 島 直 樹 A m e ba L I F E 事 業 本 部   @ d e v d a z y # 2 2 中 途 # モ ン ハ ン
  3. C A . s w i f t 2 0

    2 5 . 3 . 3 Contents # 1 A m e b a ア プ リ に つ い て # 2 こ れ ま で の ア ー キ テ ク チ ャ と 課 題 # 3 リ ア ー キ テ ク チ ャ と T C A の 導 入 # 4 導 入 し て の メ リ ッ ト ・ デ メ リ ッ ト # 5 こ れ か ら
  4. C A . s w i f t 2 0

    2 5 . 3 . 3 #01 A m e ba ア プ リ に つ いて
  5. C A . s w i f t 2 0

    2 5 . 3 . 3 A m e b a は 2 0 周 年 ! ( 2 0 2 4 / 9 / 1 5 )
  6. C A . s w i f t 2 0

    2 5 . 3 . 3 ƒ ブ ロ グ 読 み 書 p f H T M L ベ ース の エ ディ タ ・ リ ー ダ V ƒ 広  f 記 事 内 や マ ン ガ の リ ワ ー 5 ƒ P i c g f ア フィ リ エ イ y ƒ マ ン 0 ƒ W i d g e ' f アク セ ス 数 の 表 r ƒ 有 料 プ ラ H f I A P で の サ ブ ス % f 広 告 の 非 表 示 や レ ッ ス ン の 視 聴 ア プ リ は 1 3 年 目
  7. C A . s w i f t 2 0

    2 5 . 3 . 3 #02 こ れ ま で の アー キ テ ク チ ャ と 課 題
  8. C A . s w i f t 2 0

    2 5 . 3 . 3 アー キ テ ク チ ャ ( B e fo re ) † M V V M ( + C l e a n A r c h i t e c t u r e a † R x S w i f t で 単 方 向 な デ ー タ フ ロ F † I n p u t : V i e w の イ ベ ン r † O u t p u t : V i e w の 更 新 情 A † V M は V i e w の 状 態 を I F に は 持 た ず、 デ ー タ 流 す ハ ブ
  9. C A . s w i f t 2 0

    2 5 . 3 . 3 課題はあったの か?
  10. C A . s w i f t 2 0

    2 5 . 3 . 3 ロ ジ ッ ク の 複 雑 さ の 限 界 ƒ 基 本 的 に 1 画 面 1 V M の 構 成 。 複 雑 な 画 面 の も つ V M , U s e C a s e の 肥 大 化 が 顕 Y ƒ 複 雑 な 条 件 分 岐 を R x S w i f t で 表 現 し つ づ け て き た こ と に よ る 可 読 性 の 低 4 ƒ 保 守 性 ・ 拡 張 性 の 低 4 ƒ → 開 発 速 度 の 低 下
  11. C A . s w i f t 2 0

    2 5 . 3 . 3 モ ダ ン な 開 発 の 導 入 R V i e w の 状 態 を 保 持 し な い た め 、 S t a t e - D r i v e n な S w i f t U I と 相 性 が 悪 D R I F が R x S w i f t に 完 全 に 依 存 し て い る た め S w i f t C o n c u r r e n c y の 導 入 が 難 し D R チ ー ム の 魅 力 ・ 採 用 力 の D o w n
  12. C A . s w i f t 2 0

    2 5 . 3 . 3 つまり
  13. C A . s w i f t 2 0

    2 5 . 3 . 3 効率よく モダンなコード を書きたい
  14. C A . s w i f t 2 0

    2 5 . 3 . 3 #03 リ アー キ テ ク チ ャ と TC A の 導 入
  15. C A . s w i f t 2 0

    2 5 . 3 . 3 T h e C o m p o s a b l e A rc h i te ct u re H F l u x / R e d u x パ タ ー ン を 基 に 設 1 H s w i f t - c o m p o s a b l e - a r c h i t e c t u r e
  16. C A . s w i f t 2 0

    2 5 . 3 . 3 リ アー キ テ ク チ ャ
  17. C A . s w i f t 2 0

    2 5 . 3 . 3 リ アー キ テ ク チ ャ
  18. C A . s w i f t 2 0

    2 5 . 3 . 3 I n p u t → A ct i o n
  19. C A . s w i f t 2 0

    2 5 . 3 . 3 A ct i o n D V i e w の ラ イ フ サ イ ク ル 、 ユ ー ザ ー の 操 作 を A c t i o n と し て 定 義 す & D そ の 機 能 に 必 要 な イ ベ ン ト は すべ て 定 義 す る
  20. C A . s w i f t 2 0

    2 5 . 3 . 3 b i n d → Re d u ce r + E ffe ct
  21. C A . s w i f t 2 0

    2 5 . 3 . 3 Re d u ce r + E ffe ct i V i e w か ら の A c t i o n か ら 副 作 用 と な る E ff e c t を 発 8 i こ こ で は 非 同 期 処 2 i E ff e c t 内 で は 状 態 を 更 新 し な 3 i E ff e c t は 結 果 を A c t i o n と し て 送 信 し 、 状 態 を 更 新 す る
  22. C A . s w i f t 2 0

    2 5 . 3 . 3 #04 導 入 して の メ リ ッ ト ・ デ メ リ ッ ト
  23. C A . s w i f t 2 0

    2 5 . 3 . 3 ロ ジ ッ ク が 明 確 に な る C A c t i o n は そ の 機 能 で 発 生 す る すべ て の イ ベ ン ト が 定 義 さ れ て い る
  24. C A . s w i f t 2 0

    2 5 . 3 . 3 ロ ジ ッ ク が 明 確 に な る i A c t i o n は そ の 機 能 で 発 生 す る すべ て の イ ベ ン ト が 定 義 さ れ て い ` i E ff e c t で は S t a t e を 変 更 で き な い た め 、 i ボ タ ン を 押 し た → 読 み 込 み 開 f i 読 み 込 み 成 功 → タ イ ト ル 更 新 発 生 す る A c t i o n に 対 す る 処 理 が 簡 潔 に 網 羅 的 に 表 現 さ れ `
  25. C A . s w i f t 2 0

    2 5 . 3 . 3 テ ス ト が 自 然 と 網 羅 的 に な る
  26. C A . s w i f t 2 0

    2 5 . 3 . 3 テ ス ト が 自 然 と 網 羅 的 に な る E ff e c t が 発 行 す る A c t i o n が あ る の に テ ス ト さ れ て い な い
  27. C A . s w i f t 2 0

    2 5 . 3 . 3 テ ス ト が 自 然 と 網 羅 的 に な る
  28. C A . s w i f t 2 0

    2 5 . 3 . 3 画 面 遷 移 を シ ーム レ ス に 移 行 で きる V i e w U I V i e w C o n t r o l l e r
  29. C A . s w i f t 2 0

    2 5 . 3 . 3 画 面 遷 移 を シ ーム レ ス に 移 行 で きる U I H o s t i n g C o n t r o l l e r
  30. C A . s w i f t 2 0

    2 5 . 3 . 3 TC A x S w i f t U I の 画 面 遷 移 ‡ S w i f t U I の 状 態 管 理 に よ る 画 面 遷 移 を 実 現 し た e ‡ S w i f t U I 側 の 状 態 だ け で 完 結 で き る ( テ ス ト な ど C ‡ フ ル S w i f t U I 化 し た 時 の マ イ グ レ ー シ ョ ン が 少 な く て 済 む
  31. C A . s w i f t 2 0

    2 5 . 3 . 3 TC A x U I K i t の 画 面 遷 移 t ほ と ん ど の I F が S w i f t U I と 同 Q t 状 態 管 理 に よ る 画 面 遷 5 t S t o r e 側 の コ ー ド は 同 Q t s w i f t - n a v i g a t i o n
  32. C A . s w i f t 2 0

    2 5 . 3 . 3 ロ ジ ッ ク の 分 割 が 簡 単
  33. C A . s w i f t 2 0

    2 5 . 3 . 3 ロ ジ ッ ク の 分 割 が 簡 単 A V i e w の よ う な 感 覚 で 、 分 割 と 合 成 が 可 4 A 子 の A c t i o n 、 S t a t e は 親 か ら 観 測 が で き る
  34. C A . s w i f t 2 0

    2 5 . 3 . 3 学 習 コ ス ト が 大 き い 7 単 純 に フ レ ー ム ワ ー ク を 一 つ 理 解 し な け れ ば な ら な ” 7 特 に F l u x / R e d u x 系 の ア ー キ テ ク チ ャ が 未 経 験 の メ ン バ ー へ の 負 荷 が 高 ” 7 7 C a s e P a t h a b l e : e n u m の c a s e を K e y P a t h の よ う に ア ク セ ス す る T C A 独 自 の 記 法 が 存 在 す d
  35. C A . s w i f t 2 0

    2 5 . 3 . 3 学 習 コ ス ト が 大 き い Q 例 を 作 ` Q M V V M 時 代 か ら の マ イ グ レ ー シ ョ ン ガ イ ド を 整 え ` Q X c o d e の テ ン プ レ ー ト 機 能 を 使 用 す る
  36. C A . s w i f t 2 0

    2 5 . 3 . 3 パ フ ォ ー マ ンス は n ot B e st Q R e d u c e r を 分 割 し や す い 分 、 不 要 な V i e w に ま で R e d u c e r を つ け て し ま い が ) Q A c t i o n の 送 信 は 負 荷 が 重 め の 処 理
  37. C A . s w i f t 2 0

    2 5 . 3 . 3 パ フ ォ ー マ ンス は n ot B e st G A c t i o n を 極 力 減 ら せ る よ う に 吟 Q G テ ス ト へ の 影 響 が 出 る の は
  38. C A . s w i f t 2 0

    2 5 . 3 . 3 Po i n t- f re e へ の 依 存 リ ス ク c R x S w i f t の 例 に 同 じ く 、 T C A は 開 発 元 の P o i n t - f r e e の 支 え が 大 き Q c 特 に V i e w と R e d u c e r を 繋 ぐ c O S S と は い え 、 サ ポ ー ト さ れ な く な っ た 時 に 更 新 の 継 続 が う ま く い く 保 証 は な い ラ ン タ イ ム ( S t o r e ) の 部 分 は 、 利 用 者 は 意 識 し て い な い た め 、 万 が 一 の 場 合 に 対 応 が 難 し Q
  39. C A . s w i f t 2 0

    2 5 . 3 . 3 記 法 の ブ レ が か な り 抑 制 さ れ る v チ ー ム 開 発 で は 、 書 き 方 の 部 分 で 揺 れ る こ と が 多 f v T C A は フ レ ー ム ワ ー ク 化 さ れ た ア ー キ テ ク チ F v A P I に な い 書 き 方 は で き な f v ど う すべ き か が 、 G i t H u b や S l a c k で 活 発 に 行 わ れ て い ˜ v チ ー ム 内 で 議 論 が で き な い / 議 論 が 薄 ま る と 言 う 点 で は B A D … か も
  40. C A . s w i f t 2 0

    2 5 . 3 . 3 #05 こ れ か ら
  41. C A . s w i f t 2 0

    2 5 . 3 . 3 ま ず は や り 切 る G 中 途 半 端 に 移 行 し 、 複 数 の ア ー キ テ ク チ ャ が 混 ざ っ て し ま ! G G 何 よ り の 技 術 的 負 債 S w i f t 6 、 C o c o a P o d s な ど 対 応 し な け れ ば な ら な い こ と が 複 数 あ r G 中 長 期 的 な 計 画 を 立 て て 進 め て い く
  42. C A . s w i f t 2 0

    2 5 . 3 . 3 引 き 続 き より 良 い 方 法 を 求 め て い く G T C A の 動 向 を チ ェ ッ ク す る G O S S の 強 み を 活 か し て 情 報 収 ( G v 1 の リ リ ー ス か ら も か な り 扱 い や す く な っ て き — G S w i f t D a t a と の 連 携 な ど 、 ま だ ま だ 進 化 し て い u G 世 界 中 の i O S e r が 課 題 と 解 決 策 を 提 示 し て く れ て い u G A m e b a で 出 た 課 題 は 大 体 す で に 解 決 さ れ て い る
  43. C A . s w i f t 2 0

    2 5 . 3 . 3 ご 清 聴 あ り が と う ご ざ い ま し た !