Slide 1

Slide 1 text

栗山 徹 (@kotetu) - ϞόΠϧΞϓϦͷ։ൃੜ࢈ੑΛ্͛ΔLunch LT (2023/09/28) Renovateを使った ライブラリアップデート 仕組み化の取り組み 1

Slide 2

Slide 2 text

• LTのテーマ • iOSアプリ開発における Renovate を使ったライブラリアップデート仕組み 化について • ライブラリアップデートに対する考え方 • 株式会社アンドパッドにおける運用事例 • Renovate の使い方については最後に参考文献として共有します はじめに 2

Slide 3

Slide 3 text

1. モバイルアプリ開発におけるライブラリアップデート 2. Renovate について 3. ANDPAD iOS アプリにおけるライブラリ更新フロー 4. まとめ アジェンダ 3

Slide 4

Slide 4 text

(くりやま とおる) • X (Twitter) : @kotetu • 株式会社アンドパッド テックリード • iOSDC Japan 2023 • 「認証体験向上のために passkeys (パスキー) に対応する」 • 「Swift Markdownを使ったMarkdownアプリ 開発」 栗山 徹 4

Slide 5

Slide 5 text

1. モバイルアプリ開発における ライブラリアップデート 5

Slide 6

Slide 6 text

• 新機能の利用、機能改善の適用 • 不具合の解消 ライブラリアップデートの目的 6

Slide 7

Slide 7 text

• 新機能 • パフォーマンス向上 • 既存機能のエンハンス • プログラミング言語のバージョンアップ対応 • 破壊的変更が発生することもある 新機能の利用、機能改善の適用 7

Slide 8

Slide 8 text

• ライブラリの実装起因の不具合解消 • セキュリティ問題の修正 • OSアップデートに伴う不具合解消 不具合の解消 8

Slide 9

Slide 9 text

• 「遅れないように」かつ「小まめに」アップデートすることが望ましい ライブラリアップデートへの向き合い方 9

Slide 10

Slide 10 text

• 重要なアップデートに迅速に対応できる程度には追従する • クラッシュをはじめとした不具合修正 • セキュリティ問題 • 一方で慎重さも必要 • アップデートにより問題が発生しないかどうか見極める必要がある 「遅れないように」アップデートする理由 10

Slide 11

Slide 11 text

• アップデート間隔が長いと1回あたりのアップデート対応工数が増える • リリーススケジュール調整の手間が増える • アップデート作業に対する理解を得るのに苦労する • 工数かかる → 今はアップデートしない → 放置してさらに対応工数増える の悪循環 「小まめに」アップデートする理由 11

Slide 12

Slide 12 text

• 対応工数 (特にメジャーバージョンアップ時) • 機能開発に影響しないような体制作りが必要 • アップデート作業の手間 • ライブラリアップデート情報のキャッチアップ • Pull Request 作成 • テスト 望ましいアップデートフロー実現への障壁 12

Slide 13

Slide 13 text

• 対応工数 (特にメジャーバージョンアップ時) • 機能開発に影響しないような体制作りが必要 • アップデート作業の手間 • ライブラリアップデート情報のキャッチアップ • Pull Request 作成 • テスト 望ましいアップデートフロー実現への障壁 13 Renovateで効率化できる

Slide 14

Slide 14 text

2. Renovate について 14

Slide 15

Slide 15 text

• “Universal dependency update tool” • 依存関係の更新ツール • 主な機能 • ライブラリの更新検知 • Pull Requestの自動生成 Renovate 15 Renovate の GitHub リポジトリ https://github.com/renovatebot/renovate

Slide 16

Slide 16 text

• 更新を検知したら自動でPRを作る • 自動でマージ設定可能 • 生成頻度など、設定項目が豊富 Pull Request ࣗಈੜ੒ 16

Slide 17

Slide 17 text

• ライブラリ管理ツールへの対応 (iOS) • Renovate は SwiftPM, CocoaPods, Carthage をサポートしている • Dependabot は SwiftPM のみ • ANDPAD (iOSアプリ) は Renovate を利用 • CocoaPods を利用しているため Renovate と Dependabot 17

Slide 18

Slide 18 text

3. ANDPAD iOS ΞϓϦにおける ライブラリ更新フロー 18

Slide 19

Slide 19 text

• 更新に気付いたらアップデートする、という慣習が続いてきた • 気付かないこともある • 更新が多すぎて上げにくい • 全社で Dependabot 導入の機運が高まった • バックエンド・フロントエンド問わずアンドパッド全リポジトリで対応 Renovate を使い始めた経緯 19

Slide 20

Slide 20 text

• CocoaPods を利用 • 社内全 iOS 関連リポジトリで利用 • 複数種類の社内共有ライブラリを運用 • 使用しているサードパーティライブラリ • 20種類以上 ANDPAD iOS アプリ 20

Slide 21

Slide 21 text

ライブラリアップデートフロー 21

Slide 22

Slide 22 text

ライブラリアップデートフロー 22 Renovate で自動化 手動実行

Slide 23

Slide 23 text

• Pull Request 作成までは Renovate で自動化 • 更新確認は日次で実施 • 並列で出せる Pull Request の数は 5 に設定 • レビュー担当がレビューし、手動でマージする • QA 方針はアップデート内容により異なる • 影響範囲が小さい場合はリリース前のリグレッションテストで担保 Renovate の運用ポリシー 23

Slide 24

Slide 24 text

• ϚΠφʔόʔδϣϯΞοϓͷස౓Ξοϓ • 通常の運用工数の範囲内でアップデート 対応できるようになった • レビューアのチェックとQAにより品質 も維持 Renovate 導入の効果 24

Slide 25

Slide 25 text

• 影響範囲が大きなアップデートに対するアップデートポリシーの確立 • ex) メジャーアップデート、破壊的変更の有無 • 「時間的に余裕があれば対応」「アップデートしないといけない状況に追 い込まれたら対応」になりがち • Pull Request 作成頻度が高い • レビューアコスト増、コンフリクト頻度増 運用面での課題 25

Slide 26

Slide 26 text

4. まとめ 26

Slide 27

Slide 27 text

• ライブラリのアップデートは「遅れないように」かつ「小まめに」 • アップデートフローの確立には様々な障壁がある • Renovate によりフローを一部自動化してエンジニア負荷を軽減できる • Renovate が貢献できるのはフローの一部 • 手動で対応する作業含めチームとしてどう取り組むかを考える必要がある まとめ 27

Slide 28

Slide 28 text

もっとアンドパッドの開発組織が知りたい方へ We are Hiring!! 28 技術スタックや募集ポジションを 掲載しています! https://engineer.andpad.co.jp/

Slide 29

Slide 29 text

• 「 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