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

RenovateをiOSアプリ開発に導入・運用した話

coffmark
November 29, 2022

 RenovateをiOSアプリ開発に導入・運用した話

Mobile勉強会 Wantedly × チームラボ #7 で発表しました
https://wantedly.connpass.com/event/266081/

coffmark

November 29, 2022
Tweet

Other Decks in Programming

Transcript

  1. RenovateをiOSアプリ開発に
 導入・運用した話
 coffmark
 Mobile勉強会 Wantedly × チームラボ #7


  2. coffmark (コフマーク)
 
 株式会社ドワンゴ iOSエンジニア


  3. Mobile勉強会 Wantedly × チームラボ #6
 継続的な依存性のアップデートにより得られたこと (久保出さん)
 https://speakerdeck.com/kubode/what-we-have-learned-from-continuou s-dependency-updates
 


  4. 話すこと
 ・Renovateとは
 ・iOSアプリの対応パッケージマネージャ
 ・導入方法
 ・2ヶ月間ほど運用して良かったこと・大変だったこと
 ・まとめ


  5. Renovateとは
 ・ライブラリの依存関係を自動で更新してくれるツール
 ・依存関係を解決した上で、バージョンアップを行うPull Requestを作成
 ・Renovate構成ファイル書くことができます (renovate.jsonなど)
 ・レビュアーの人数、同時にアップデートするライブラリ数など
 https://github.com/renovatebot/renovate

  6. Renovateの仕組み
 ① 対象となるレポジトリ内のライブラリの依存関係管理ファイルを取得 
 (ex. Podfile, Mintfile) 
 ② ライブラリの依存関係管理ファイルから依存関係を全て取り出す

    
 ③ 構成ファイル(renovate.json)からどのライブラリを更新するか決める 
 ⑤ 依存関係を解決して、Pull Requestを送信 
 ④ ライブラリ更新がある 
 ⑤ 何もしない

  7. iOSアプリの対応パッケージマネージャ
 
 Renovate
 Pull Request
 会社の所属iOSチー ム
 CocoaPods
 󰢍
 #4667


    使用している
 Carthage
 󰢁 (正規表現を使う)
 
 
 XcodeGen
 󰢁 (正規表現を使う)
 
 使用しているが、
 ライブラリ管理はして いない
 Package.swift
 󰢍
 #3911
 
 .xcodeproj
 .xcworkspace
 󰢁
 #15133 (Draft)
 
 Mint
 󰢍
 #17351 by coffmark
 使用している
 2022/11/28時点

  8. 導入方法
 ~ GitHub Actions ~


  9. 用意するもの
 ・GitHub Actions
 ・.github/workflow/renovate.yml
 ・Renovate構成ファイル
 ・renovate.json5 など
 ・参考: Configuration Options


    
 

  10. .github/workflow/renovate.yml
 https://github.com/renovatebot/github-action name: Run Renovate on: schedule: - cron: '0

    0 * * 1-5' jobs: renovate: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/[email protected] - name: Setup netrc uses: extractions/[email protected] with: machine: "github.com" username: ${{ secrets.USER_NAME }} password: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - name: Self-hosted Renovate uses: renovatebot/[email protected] with: configurationFile: renovate.json5 token: ${{ secrets.RENOVATE_TOKEN }} env: LOG_LEVEL: 'debug'
  11. renovate.json5
 { "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": ["config:base", ":timezone(Asia/Tokyo)"], "platform": "github", //

    ... 省略 "baseBranches": ["main"], // mainブランチ "branchPrefix": "renovate/", "labels": ["dependencies"], "prCreation": "immediate", "automerge": false, // 動作確認が必要な場合があるので、自動マージをオフに "prHourlyLimit": 0, "prConcurrentLimit": 1, // Renovateが提出できるOpenなPR数は1つまで "prBodyNotes": [ ... ], // PR説明文にレビュー手順を記載 "separateMajorMinor": true "separateMultipleMajor": true, }
  12. Renovateを実行
 https://github.com/coffmark/Renovate-iOS-sample/pull/39 
 
 coffmark/Renovate-iOS-sample 


  13. 2ヶ月間ほど運用して良かったこと・大変だったこと


  14. 2ヶ月間運用してみて良かったこと
 - 👍 1週間に1つ以上のライブラリ更新ができている
 - 2ヶ月間で合計8つのライブラリを更新 
 - RxSwift, 6.5.0


    - SwiftGen, 6.6.2
 
 - 👍 ライブラリ更新が簡単に
 - 問題がなければapprove・merge、問題があればcloseするだけOK 
 - closeすれば、また新しいPull Requestを作成してくれます 

  15. 2ヶ月間運用してみて大変だったこと・改善したいこと
 - CIが通れば、すぐマージできるようにしたいこと
 - どうしてもUI系のライブラリは動作確認が必要 
 
 - バグが混入している新しいライブラリにアップデートしてしまいそうになる 


    - stabilityDaysを14日間に調整して様子をみています 
 - (参考: stabilityDays)

  16. まとめ
 - Renovateでライブラリ更新が(ほぼ)自動化できるようになりました
 - 改善点もいくつかあるので、今後改善していきたい
 
 


  17. 参考
 ・dely Tech Blog: RenovateをiOSアプリ開発に導入してみた
 ・@ikesyoさん: RenovateによるiOSライブラリーの自動更新