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
6年ほど育ったiOSプロジェクトを刷新した話 / Renewed iOS project th...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ryokosuge
July 24, 2019
Technology
2
780
6年ほど育ったiOSプロジェクトを刷新した話 / Renewed iOS project that grew up for about 6 years
potatotips #63 @スマートニュース株式会社
https://potatotips.connpass.com/event/134616/
ryokosuge
July 24, 2019
Tweet
Share
More Decks by ryokosuge
See All by ryokosuge
Zendeskのチケットを Amazon Bedrockで 解析した
ryokosuge
3
550
広告実装、こうすると幸せだよ
ryokosuge
6
1.5k
アプリ開発とSDK開発の違い
ryokosuge
1
650
広告実装の苦しみ
ryokosuge
0
410
アプリを十数個作った僕が初めて書いたテストの話
ryokosuge
2
2.3k
広告SDKを駆使して 売り上げを5倍にした
ryokosuge
2
4.1k
早期発見プロジェクト
ryokosuge
0
59
Other Decks in Technology
See All in Technology
AIと新時代を切り拓く。これからのSREとメルカリIBISの挑戦
0gm
0
570
茨城の思い出を振り返る ~CDKのセキュリティを添えて~ / 20260201 Mitsutoshi Matsuo
shift_evolve
PRO
1
110
ZOZOにおけるAI活用の現在 ~開発組織全体での取り組みと試行錯誤~
zozotech
PRO
4
3k
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
1
120
KubeCon + CloudNativeCon NA ‘25 Recap, Extensibility: Gateway API / NRI
ladicle
0
170
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
110
(金融庁共催)第4回金融データ活用チャレンジ勉強会資料
takumimukaiyama
0
100
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
130
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
0
190
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
280
最速で価値を出すための プロダクトエンジニアのツッコミ術
kaacun
1
510
新規事業における「一部だけどコア」な AI精度改善の優先順位づけ
zerebom
0
450
Featured
See All Featured
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
210
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Marketing to machines
jonoalderson
1
4.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
66
36k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
ラッコキーワード サービス紹介資料
rakko
1
2.2M
Transcript
6年ほど育った iOSプロジェクトを 刷新した話 potatotips #63 2019/07/24 ryokosuge
自己紹介 • 株式会社fluct ◦ SSP開発本部 SDKチーム ▪ 主にFluctSDK iOSの 開発してます
◦ 入社して9ヶ月くらい ◦ 前職はマンガアプリ作って ました Twitter: @ryo_kosuge GitHub: ryokosuge
アジェンダ • 6年かけてどう育ったか • 刷新作業(やったこと) • 刷新した結果 • まとめ
6年かけてどう育ったか
“git log --reverse” (噂ではSVN時代があるからもっと古い説あり)
広告SDKの開発について • 継続的な開発ではない ◦ がっつり作るのは新しいフォーマット対応のみ • テストはしっかり書く ◦ ほぼ100%網羅されている ◦
品質は絶対 • 作る前にしっかり設計して100%作り込んでリリースする ◦ 作ったものは容易に捨てられない世界
広告SDKのプロジェクト • 初期はstaticなSDKしか提供できなかったので`lib~.a`を生成する方式 ◦ `.framework`へ移行 ◦ スクリプトで対応(Makefile) • すごい古いプロジェクトなのでターゲットがおかしい ◦
1つの実装ファイルにたくさんのtargetが参照している ▪ 無謀なテストもかけてしまう
広告SDKのプロジェクト • ターゲットがおかしいからindexがうまくはられない ◦ テストを書く時にサジェストが出ない ◦ import error ▪ Headerファイルが見つからないらしい
• CIも時間がかかる ◦ キャッシュなど活用しても根本が解消されない ◦ 1つPRのjobに10分以上かかってしまうこともある
流石にやばい
刷新作業(やったこと) • 別ディレクトリに1からプロジェクト作成 ◦ しっかりターゲット選定をする ▪ FluctSDKとXCTestは1つのプロジェクトにして、依存するターゲット は別プロジェクトにする • 作業はworkspaceでまとめる
• ファイルはコピーして持ってきてプロジェクトに追加していく ◦ 命名規則などもこのタイミングで統一する
刷新作業(やったこと) • ターゲットを分けたことで依存しちゃいけない実装をしていた箇所を修正す る ◦ これは力技 ◦ ターゲット設計をしっかりしてちゃんと閉鎖できるようにした • テストもmockを使用することで対応可能
刷新作業(やったこと) • プロジェクトが綺麗になったタイミングでドキュメント更新 ◦ Makefileの分割 ◦ 無駄なファイルを削除 ◦ READMEもわかりやすく
結果
昔のプロジェクト すごい多いターゲット数
FluctSDKのプロジェクト
SDKに依存するプロジェクト
刷新した結果 • indexがしっかり貼られるようになったのでサジェストでる • 開発時に無駄なbuildが走らなくなった • `lib~.a`なファイルではなく、xcode標準の`.framework`をbuildで生成でき るようになった ◦ Static
+ bundleの提供方法は変えてない ▪ dynamicにすると導入手法が変わるためやらなかった
刷新した結果 • CIで落ちなくなった ◦ Travisで起きる謎のクラッシュがなくなった ▪ しっかり実行できるようになったからかな • キャッシュも効くようになったので2分ほどjobの時間を短縮 •
Warningsがほぼ0 ◦ deprecatedしているクラスのwarning以外はない
まとめ
まとめ • 6年続いたプロジェクトにまずは敬意を持つ • 何が依存していてどういう構成になっているか知るいいキッカケになった ◦ やる際はタスクをしっかり書き出してどうなると成功なのか示す必要あ る • outputは変えちゃいけない
◦ 要は大規模リファクタリング
ご静聴 ありがとうございました