Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20周年を迎えるAmebaのアプリ開発
Search
Naoki Odajima
May 24, 2024
Programming
0
75
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
430
TCA魔法学入門🪄
dazy
0
1.4k
Other Decks in Programming
See All in Programming
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
420
複数人でのCLI/Infrastructure as Codeの暮らしを良くする
shmokmt
5
2.2k
dnx で実行できるコマンド、作ってみました
tomohisa
0
140
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
380
関数実行の裏側では何が起きているのか?
minop1205
1
680
FluorTracer / RayTracingCamp11
kugimasa
0
220
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
130
CSC509 Lecture 14
javiergs
PRO
0
220
【CA.ai #3】Google ADKを活用したAI Agent開発と運用知見
harappa80
0
300
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
120
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
600
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
260
Featured
See All Featured
Unsuck your backbone
ammeep
671
58k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Become a Pro
speakerdeck
PRO
31
5.7k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Statistics for Hackers
jakevdp
799
230k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
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