Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20周年を迎えるAmebaのアプリ開発
Search
Naoki Odajima
May 24, 2024
Programming
0
77
20周年を迎えるAmebaのアプリ開発
2023年11月20日に行われた、CA.swift #18 〜より良い設計のために〜 の登壇資料になります。
Naoki Odajima
May 24, 2024
Tweet
Share
More Decks by Naoki Odajima
See All by Naoki Odajima
TCAを用いたAmebaのリアーキテクチャ
dazy
0
470
TCA魔法学入門🪄
dazy
0
1.4k
Other Decks in Programming
See All in Programming
今、アーキテクトとして 品質保証にどう関わるか
nealle
0
200
Go 1.26でのsliceのメモリアロケーション最適化 / Go 1.26 リリースパーティ #go126party
mazrean
1
320
Python’s True Superpower
hynek
0
190
Agent Skills Workshop - AIへの頼み方を仕組み化する
gotalab555
13
7.6k
CSC307 Lecture 12
javiergs
PRO
0
450
AI活用のコスパを最大化する方法
ochtum
0
120
CopilotKit + AG-UIを学ぶ
nearme_tech
PRO
1
120
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
190
エージェント開発初心者の僕がエージェントを作った話と今後やりたいこと
thasu0123
0
220
Head of Engineeringが現場で回した生産性向上施策 2025→2026
gessy0129
0
200
CSC307 Lecture 13
javiergs
PRO
0
310
LangChain4jとは一味違うLangChain4j-CDI
kazumura
1
130
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
9.7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
150
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Optimizing for Happiness
mojombo
378
71k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
WCS-LA-2024
lcolladotor
0
470
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
460
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
[SF Ruby Conf 2025] Rails X
palkan
2
800
Git: the NoSQL Database
bkeepers
PRO
432
66k
So, you think you're a good person
axbom
PRO
2
1.9k
Transcript
20周年を迎える Amebaのアプリ開発 2023/11/20 CA.swift
小田島 直樹 (おだじまなおき) # AmebaLIFE事業本部 開発局 # 22/04中途(前職19新卒〜iOS) # サモラン(スプラ)ガチ勢
最近は # スーパーマリオRPG楽しい # 健康診断+2kgだった…😇 SNS # X → @devdazy(だじ) 2
国内最大級のブログメディア Ameba 3
データで見るAmeba 4
アプリ • 2010年にバージョン1.0.0をリリース。現在17.1.0(14年目) • ブログリーダー・エディター・マンガ • 2014年にWebViewアプリ(ObjC) → ネイティブアプリ(Swift) 5
Insights • コミット量は順調に右肩上がり • 新機能開発もまだまだ続いています ◦ 最近だと生成系AIを用いた機能もリリースしました🤖 6
もっと長生きするために… • 作り手(開発チーム)も長生きする必要がある • →魅力的な開発チームであり続ける • →時代の流れに乗った開発環境に継続して更新していく必要がある ◦ 何より自分がやってて楽しい😄 7
アジェンダ 1. KMPへの取り組み 2. SwiftUIへの取り組み 3. その他の取り組み 4. まとめ 8
KMP 9
KMP • Kotlin Multiplatform(KMMという呼び方もあったが統一された) • Kotlinをベースとしたマルチプラットフォーム開発の技術 • iOSへはObjective-Cのxcframeworkが生成される 10
メインアーキテクチャ • MVVM + Clean Architecture ◦ 新規実装する画面では、ほぼ100%採用 ◦ VMとUseCaseがIF化されている
• MVVM + Flux ◦ 新規での採用はあまりない ◦ 認証などのアプリ全体で共有する状態を扱う時に既存のStoreを用いる 11
12 ViewModel View Presentation Domain UseCase Data Gateway API Repository
UD, DB… Translator データの流れ
KMPの導入 13 ViewModel View Presentation Domain UseCase Data Repository UD,
DB… Translator UseCase KMP Package Repository API Gateway API
KMPの導入 • 導入部隊としてKMPチームが結成。ネイ ティブに浸透したのちに解散を目指す • 簡単な画面から導入をはじめ、現在iOSで は11のUseCaseが運用されている • Repositoryの先でGraphQLを利用すること も検証中
ネイティブ全体での工数削減、および仕様の共 通化による仕様差分の減少、テスト工数の削減 を期待 14
SwiftUI 15
SwiftUI • 最近流行りの宣言的UI • AppleはSwiftUI推し…? ◦ WWDC2022ではUIKitの話が出てこなかった • もう数年もすれば採用の場でSwiftUI-Nativeが当たり前になっていそう 16
SwiftUIにおけるアーキテクチャ • 未だはっきりとしたベストプラクティスはなさそう ◦ サービスの特性によってさまざまさので当たり前ではある • 少なくとも、今のAmebaの作りでは対応できない ◦ Rxに特化している ◦
Observable, ObservableObjectに対応していない 17
ComposableArchitecture(TCA)を導入 • Point-Freeの提供しているThe Composable Atchitecture (TCA)を導入することに決定 • Elm ArchitectureとReduxがベースとなったアーキテクチャ •
アーキテクチャでありフレームワーク • SwiftUIで採用が検討されるアーキテクチャとしては認知度・採用 率的に1歩リードしている印象 18
View Presentation Domain State Action Reducer Store Effect Data UseCase
KMP Package Repository API 19 SwiftUI・TCAの導入 ViewStore
TCAの👌な点 Dependency • property wrapper @Dependencyで利用する • 使用感としては@Environmentと似ている • 依存バケツリレーからの解放 •
テスト、プレビュー時に簡単にモックできる • Dependency自体はswift-dependenciesで単体での導入も可能 20 必要な分だけ上書きできる
TCAの👌な点 PresentationState • navigationDestination(for:destination:)と navigationDestination(isPresented:destination:)が合体したような使用感 • 遷移先が表示されているか、とStateが存在するか、がリンクしている • 画面遷移も状態管理でき、State上で画面遷移のテストも可能 21 遷移先のStateが存在するこ
とのアサーション
TCAの👌な点 その他 • 記法がIFによって細部まで強制されるため、強いコーディングルールとする ことができる ◦ 誰が書いてもおおそよ同じコードとなる • UIKitのランタイムでも動作するため、既存のAmebaのコードともリソースを 共有できる 22
TCAの学習障壁は? • 高いです! ◦ 概念以外にも定義されたクラス・メソッドを把握する必要がある • 勉強会を繰り返し開催 ◦ TCA公式でチュートリアルを利用 ▪
Meet the Composable Architecture • チームで理解してもらいやすいドキュメント作り ◦ Amebaのアーキテクチャとの差で示したり ◦ Amebaのコードでの例を示したり 23
その他の取り組み • デザインシステムSpindleの導入 ◦ 2023年度グッドデザイン賞を受賞🎉 ◦ システム化されたデザインでUI構築を効率とクオリ ティを両立 ◦ 実はこのスライドもSpindleをベースにしたデザイン
• テストの拡充 ◦ Autifyを用いたE2Eテスト ◦ テスターさんが行っているテストを移行し効率化 24
まとめ • Amebaは老舗アプリだけど、だからこそ開発の足は止めていません。チーム の魅力を高めるために改善を続けています • テックなこと、Amebaで一緒にしませんか? 25
ご清聴ありがとうございました 26