Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
6年ほど育った iOSプロジェクトを 刷新した話 potatotips #63 2019/07/24 ryokosuge
Slide 2
Slide 2 text
自己紹介 ● 株式会社fluct ○ SSP開発本部 SDKチーム ■ 主にFluctSDK iOSの 開発してます ○ 入社して9ヶ月くらい ○ 前職はマンガアプリ作って ました Twitter: @ryo_kosuge GitHub: ryokosuge
Slide 3
Slide 3 text
アジェンダ ● 6年かけてどう育ったか ● 刷新作業(やったこと) ● 刷新した結果 ● まとめ
Slide 4
Slide 4 text
6年かけてどう育ったか
Slide 5
Slide 5 text
“git log --reverse” (噂ではSVN時代があるからもっと古い説あり)
Slide 6
Slide 6 text
広告SDKの開発について ● 継続的な開発ではない ○ がっつり作るのは新しいフォーマット対応のみ ● テストはしっかり書く ○ ほぼ100%網羅されている ○ 品質は絶対 ● 作る前にしっかり設計して100%作り込んでリリースする ○ 作ったものは容易に捨てられない世界
Slide 7
Slide 7 text
広告SDKのプロジェクト ● 初期はstaticなSDKしか提供できなかったので`lib~.a`を生成する方式 ○ `.framework`へ移行 ○ スクリプトで対応(Makefile) ● すごい古いプロジェクトなのでターゲットがおかしい ○ 1つの実装ファイルにたくさんのtargetが参照している ■ 無謀なテストもかけてしまう
Slide 8
Slide 8 text
広告SDKのプロジェクト ● ターゲットがおかしいからindexがうまくはられない ○ テストを書く時にサジェストが出ない ○ import error ■ Headerファイルが見つからないらしい ● CIも時間がかかる ○ キャッシュなど活用しても根本が解消されない ○ 1つPRのjobに10分以上かかってしまうこともある
Slide 9
Slide 9 text
流石にやばい
Slide 10
Slide 10 text
刷新作業(やったこと) ● 別ディレクトリに1からプロジェクト作成 ○ しっかりターゲット選定をする ■ FluctSDKとXCTestは1つのプロジェクトにして、依存するターゲット は別プロジェクトにする ● 作業はworkspaceでまとめる ● ファイルはコピーして持ってきてプロジェクトに追加していく ○ 命名規則などもこのタイミングで統一する
Slide 11
Slide 11 text
刷新作業(やったこと) ● ターゲットを分けたことで依存しちゃいけない実装をしていた箇所を修正す る ○ これは力技 ○ ターゲット設計をしっかりしてちゃんと閉鎖できるようにした ● テストもmockを使用することで対応可能
Slide 12
Slide 12 text
刷新作業(やったこと) ● プロジェクトが綺麗になったタイミングでドキュメント更新 ○ Makefileの分割 ○ 無駄なファイルを削除 ○ READMEもわかりやすく
Slide 13
Slide 13 text
結果
Slide 14
Slide 14 text
昔のプロジェクト すごい多いターゲット数
Slide 15
Slide 15 text
FluctSDKのプロジェクト
Slide 16
Slide 16 text
SDKに依存するプロジェクト
Slide 17
Slide 17 text
刷新した結果 ● indexがしっかり貼られるようになったのでサジェストでる ● 開発時に無駄なbuildが走らなくなった ● `lib~.a`なファイルではなく、xcode標準の`.framework`をbuildで生成でき るようになった ○ Static + bundleの提供方法は変えてない ■ dynamicにすると導入手法が変わるためやらなかった
Slide 18
Slide 18 text
刷新した結果 ● CIで落ちなくなった ○ Travisで起きる謎のクラッシュがなくなった ■ しっかり実行できるようになったからかな ● キャッシュも効くようになったので2分ほどjobの時間を短縮 ● Warningsがほぼ0 ○ deprecatedしているクラスのwarning以外はない
Slide 19
Slide 19 text
まとめ
Slide 20
Slide 20 text
まとめ ● 6年続いたプロジェクトにまずは敬意を持つ ● 何が依存していてどういう構成になっているか知るいいキッカケになった ○ やる際はタスクをしっかり書き出してどうなると成功なのか示す必要あ る ● outputは変えちゃいけない ○ 要は大規模リファクタリング
Slide 21
Slide 21 text
ご静聴 ありがとうございました