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
AI巻き込み型コードレビューのススメ
nealle
2
2.5k
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
410
今、アーキテクトとして 品質保証にどう関わるか
nealle
0
200
AI主導でFastAPIのWebサービスを作るときに 人間が構造化すべき境界線
okajun35
0
440
朝日新聞のデジタル版を支えるGoバックエンド ー価値ある情報をいち早く確実にお届けするために
junkiishida
1
310
Raku Raku Notion 20260128
hareyakayuruyaka
0
430
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
360
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
910
ぼくの開発環境2026
yuzneri
1
290
CopilotKit + AG-UIを学ぶ
nearme_tech
PRO
1
120
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
130
Go1.26 go fixをプロダクトに適用して困ったこと
kurakura0916
0
320
Featured
See All Featured
The Curious Case for Waylosing
cassininazir
0
260
Skip the Path - Find Your Career Trail
mkilby
1
71
Practical Orchestrator
shlominoach
191
11k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
200
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.4k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
65
Information Architects: The Missing Link in Design Systems
soysaucechin
0
810
Designing Experiences People Love
moore
143
24k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
77
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
What does AI have to do with Human Rights?
axbom
PRO
1
2k
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