テックリード 栗山 徹 @kotetu 2023 年 9 月 28 日 モバイルアプリの開発生産性を上げる Lunch LT 登壇資料
栗山 徹 (@kotetu) - ϞόΠϧΞϓϦͷ։ൃੜ࢈ੑΛ্͛ΔLunch LT (2023/09/28)Renovateを使ったライブラリアップデート仕組み化の取り組み1
View Slide
• LTのテーマ• iOSアプリ開発における Renovate を使ったライブラリアップデート仕組み化について• ライブラリアップデートに対する考え方• 株式会社アンドパッドにおける運用事例• Renovate の使い方については最後に参考文献として共有しますはじめに2
1. モバイルアプリ開発におけるライブラリアップデート2. Renovate について3. ANDPAD iOS アプリにおけるライブラリ更新フロー4. まとめアジェンダ3
(くりやま とおる)• X (Twitter) : @kotetu• 株式会社アンドパッド テックリード• iOSDC Japan 2023• 「認証体験向上のために passkeys (パスキー)に対応する」• 「Swift Markdownを使ったMarkdownアプリ開発」栗山 徹4
1. モバイルアプリ開発におけるライブラリアップデート5
• 新機能の利用、機能改善の適用• 不具合の解消ライブラリアップデートの目的6
• 新機能• パフォーマンス向上• 既存機能のエンハンス• プログラミング言語のバージョンアップ対応• 破壊的変更が発生することもある新機能の利用、機能改善の適用7
• ライブラリの実装起因の不具合解消• セキュリティ問題の修正• OSアップデートに伴う不具合解消不具合の解消8
• 「遅れないように」かつ「小まめに」アップデートすることが望ましいライブラリアップデートへの向き合い方9
• 重要なアップデートに迅速に対応できる程度には追従する• クラッシュをはじめとした不具合修正• セキュリティ問題• 一方で慎重さも必要• アップデートにより問題が発生しないかどうか見極める必要がある「遅れないように」アップデートする理由10
• アップデート間隔が長いと1回あたりのアップデート対応工数が増える• リリーススケジュール調整の手間が増える• アップデート作業に対する理解を得るのに苦労する• 工数かかる → 今はアップデートしない → 放置してさらに対応工数増えるの悪循環「小まめに」アップデートする理由11
• 対応工数 (特にメジャーバージョンアップ時)• 機能開発に影響しないような体制作りが必要• アップデート作業の手間• ライブラリアップデート情報のキャッチアップ• Pull Request 作成• テスト望ましいアップデートフロー実現への障壁12
• 対応工数 (特にメジャーバージョンアップ時)• 機能開発に影響しないような体制作りが必要• アップデート作業の手間• ライブラリアップデート情報のキャッチアップ• Pull Request 作成• テスト望ましいアップデートフロー実現への障壁13Renovateで効率化できる
2. Renovate について14
• “Universal dependency update tool”• 依存関係の更新ツール• 主な機能• ライブラリの更新検知• Pull Requestの自動生成Renovate15Renovate のGitHub リポジトリhttps://github.com/renovatebot/renovate
• 更新を検知したら自動でPRを作る• 自動でマージ設定可能• 生成頻度など、設定項目が豊富Pull Request ࣗಈੜ16
• ライブラリ管理ツールへの対応 (iOS)• Renovate は SwiftPM, CocoaPods, Carthage をサポートしている• Dependabot は SwiftPM のみ• ANDPAD (iOSアプリ) は Renovate を利用• CocoaPods を利用しているためRenovate と Dependabot17
3. ANDPAD iOS ΞϓϦにおけるライブラリ更新フロー18
• 更新に気付いたらアップデートする、という慣習が続いてきた• 気付かないこともある• 更新が多すぎて上げにくい• 全社で Dependabot 導入の機運が高まった• バックエンド・フロントエンド問わずアンドパッド全リポジトリで対応Renovate を使い始めた経緯19
• CocoaPods を利用• 社内全 iOS 関連リポジトリで利用• 複数種類の社内共有ライブラリを運用• 使用しているサードパーティライブラリ• 20種類以上ANDPAD iOS アプリ20
ライブラリアップデートフロー21
ライブラリアップデートフロー22Renovate で自動化 手動実行
• Pull Request 作成までは Renovate で自動化• 更新確認は日次で実施• 並列で出せる Pull Request の数は 5 に設定• レビュー担当がレビューし、手動でマージする• QA 方針はアップデート内容により異なる• 影響範囲が小さい場合はリリース前のリグレッションテストで担保Renovate の運用ポリシー23
• ϚΠφʔόʔδϣϯΞοϓͷසΞοϓ• 通常の運用工数の範囲内でアップデート対応できるようになった• レビューアのチェックとQAにより品質も維持Renovate 導入の効果24
• 影響範囲が大きなアップデートに対するアップデートポリシーの確立• ex) メジャーアップデート、破壊的変更の有無• 「時間的に余裕があれば対応」「アップデートしないといけない状況に追い込まれたら対応」になりがち• Pull Request 作成頻度が高い• レビューアコスト増、コンフリクト頻度増運用面での課題25
4. まとめ26
• ライブラリのアップデートは「遅れないように」かつ「小まめに」• アップデートフローの確立には様々な障壁がある• Renovate によりフローを一部自動化してエンジニア負荷を軽減できる• Renovate が貢献できるのはフローの一部• 手動で対応する作業含めチームとしてどう取り組むかを考える必要があるまとめ27
もっとアンドパッドの開発組織が知りたい方へWe are Hiring!!28技術スタックや募集ポジションを掲載しています!https://engineer.andpad.co.jp/
• 「 potatotips #77で「RenovateによるiOSライブラリーの自動更新」という発表をしました&いくつかの補足」• https://ikesyo.hatenablog.com/entry/potatotips-77-renovate-for-ios• 「Renovateで実現するライブラリの自動更新生活」• https://speakerdeck.com/ikesyo/automated-library-updates-with-renovate• 「Renovateまとめ(iOSを例に解説)」• https://qiita.com/_asa08_/items/b0be1453f70efb3b9c29• 「Renovateの導入と半年間の運用の振り返り」• https://zenn.dev/sunadoi/articles/889219ab865583• 「[GitHub] Renovate の導入と設定」• https://qiita.com/ksh-fthr/items/40732b6396f36c62bea2参考文献29