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
69
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
300
TCA魔法学入門🪄
dazy
0
1.1k
Other Decks in Programming
See All in Programming
By the way Google Cloud Next 2025に行ってみてどうだった
ymd65536
0
110
eBPF超入門「o11yに使える」とは (20250424_eBPF_o11y)
thousanda
1
110
七輪ライブラリー: Claude AI で作る Next.js アプリ
suneo3476
1
170
Cursor/Devin全社導入の理想と現実
saitoryc
28
21k
Jakarta EE Meets AI
ivargrimstad
0
770
サービスレベルを管理してアジャイルを加速しよう!! / slm-accelerate-agility
tomoyakitaura
1
200
KANNA Android の技術的課題と取り組み
watabee
0
180
The Nature of Complexity in John Ousterhout’s Philosophy of Software Design
philipschwarz
PRO
0
160
Rubyの!メソッドをちゃんと理解する
alstrocrack
1
110
Amazon CloudWatchの地味だけど強力な機能紹介!
itotsum
0
230
The Evolution of the CRuby Build System
kateinoigakukun
1
760
Contribute to Comunities | React Tokyo Meetup #4 LT
sasagar
0
590
Featured
See All Featured
Thoughts on Productivity
jonyablonski
69
4.6k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
GraphQLとの向き合い方2022年版
quramy
46
14k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Building Adaptive Systems
keathley
41
2.5k
Rails Girls Zürich Keynote
gr2m
94
13k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
410
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
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