Upgrade to Pro — share decks privately, control downloads, hide ads and more …

6年ほど育ったiOSプロジェクトを刷新した話 / Renewed iOS project that grew up for about 6 years

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

More Decks by RyoKosuge

Other Decks in Technology

Transcript

  1. 6年ほど育った
    iOSプロジェクトを
    刷新した話
    potatotips #63
    2019/07/24 ryokosuge

    View Slide

  2. 自己紹介
    ● 株式会社fluct
    ○ SSP開発本部 SDKチーム
    ■ 主にFluctSDK iOSの
    開発してます
    ○ 入社して9ヶ月くらい
    ○ 前職はマンガアプリ作って
    ました
    Twitter: @ryo_kosuge
    GitHub: ryokosuge

    View Slide

  3. アジェンダ
    ● 6年かけてどう育ったか
    ● 刷新作業(やったこと)
    ● 刷新した結果
    ● まとめ

    View Slide

  4. 6年かけてどう育ったか

    View Slide

  5. “git log --reverse”
    (噂ではSVN時代があるからもっと古い説あり)

    View Slide

  6. 広告SDKの開発について
    ● 継続的な開発ではない
    ○ がっつり作るのは新しいフォーマット対応のみ
    ● テストはしっかり書く
    ○ ほぼ100%網羅されている
    ○ 品質は絶対
    ● 作る前にしっかり設計して100%作り込んでリリースする
    ○ 作ったものは容易に捨てられない世界

    View Slide

  7. 広告SDKのプロジェクト
    ● 初期はstaticなSDKしか提供できなかったので`lib~.a`を生成する方式
    ○ `.framework`へ移行
    ○ スクリプトで対応(Makefile)
    ● すごい古いプロジェクトなのでターゲットがおかしい
    ○ 1つの実装ファイルにたくさんのtargetが参照している
    ■ 無謀なテストもかけてしまう

    View Slide

  8. 広告SDKのプロジェクト
    ● ターゲットがおかしいからindexがうまくはられない
    ○ テストを書く時にサジェストが出ない
    ○ import error
    ■ Headerファイルが見つからないらしい
    ● CIも時間がかかる
    ○ キャッシュなど活用しても根本が解消されない
    ○ 1つPRのjobに10分以上かかってしまうこともある

    View Slide

  9. 流石にやばい

    View Slide

  10. 刷新作業(やったこと)
    ● 別ディレクトリに1からプロジェクト作成
    ○ しっかりターゲット選定をする
    ■ FluctSDKとXCTestは1つのプロジェクトにして、依存するターゲット
    は別プロジェクトにする
    ● 作業はworkspaceでまとめる
    ● ファイルはコピーして持ってきてプロジェクトに追加していく
    ○ 命名規則などもこのタイミングで統一する

    View Slide

  11. 刷新作業(やったこと)
    ● ターゲットを分けたことで依存しちゃいけない実装をしていた箇所を修正す

    ○ これは力技
    ○ ターゲット設計をしっかりしてちゃんと閉鎖できるようにした
    ● テストもmockを使用することで対応可能

    View Slide

  12. 刷新作業(やったこと)
    ● プロジェクトが綺麗になったタイミングでドキュメント更新
    ○ Makefileの分割
    ○ 無駄なファイルを削除
    ○ READMEもわかりやすく

    View Slide

  13. 結果

    View Slide

  14. 昔のプロジェクト
    すごい多いターゲット数

    View Slide

  15. FluctSDKのプロジェクト

    View Slide

  16. SDKに依存するプロジェクト

    View Slide

  17. 刷新した結果
    ● indexがしっかり貼られるようになったのでサジェストでる
    ● 開発時に無駄なbuildが走らなくなった
    ● `lib~.a`なファイルではなく、xcode標準の`.framework`をbuildで生成でき
    るようになった
    ○ Static + bundleの提供方法は変えてない
    ■ dynamicにすると導入手法が変わるためやらなかった

    View Slide

  18. 刷新した結果
    ● CIで落ちなくなった
    ○ Travisで起きる謎のクラッシュがなくなった
    ■ しっかり実行できるようになったからかな
    ● キャッシュも効くようになったので2分ほどjobの時間を短縮
    ● Warningsがほぼ0
    ○ deprecatedしているクラスのwarning以外はない

    View Slide

  19. まとめ

    View Slide

  20. まとめ
    ● 6年続いたプロジェクトにまずは敬意を持つ
    ● 何が依存していてどういう構成になっているか知るいいキッカケになった
    ○ やる際はタスクをしっかり書き出してどうなると成功なのか示す必要あ

    ● outputは変えちゃいけない
    ○ 要は大規模リファクタリング

    View Slide

  21. ご静聴
    ありがとうございました

    View Slide