Slide 1

Slide 1 text

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


Slide 2

Slide 2 text

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


Slide 3

Slide 3 text

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


Slide 4

Slide 4 text

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


Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Renovateの仕組み
 ① 対象となるレポジトリ内のライブラリの依存関係管理ファイルを取得 
 (ex. Podfile, Mintfile) 
 ② ライブラリの依存関係管理ファイルから依存関係を全て取り出す 
 ③ 構成ファイル(renovate.json)からどのライブラリを更新するか決める 
 ⑤ 依存関係を解決して、Pull Requestを送信 
 ④ ライブラリ更新がある 
 ⑤ 何もしない


Slide 7

Slide 7 text

iOSアプリの対応パッケージマネージャ
 
 Renovate
 Pull Request
 会社の所属iOSチー ム
 CocoaPods
 󰢍
 #4667
 使用している
 Carthage
 󰢁 (正規表現を使う)
 
 
 XcodeGen
 󰢁 (正規表現を使う)
 
 使用しているが、
 ライブラリ管理はして いない
 Package.swift
 󰢍
 #3911
 
 .xcodeproj
 .xcworkspace
 󰢁
 #15133 (Draft)
 
 Mint
 󰢍
 #17351 by coffmark
 使用している
 2022/11/28時点


Slide 8

Slide 8 text

導入方法
 ~ GitHub Actions ~


Slide 9

Slide 9 text

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


Slide 10

Slide 10 text

.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/netrc@v1 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'

Slide 11

Slide 11 text

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, }

Slide 12

Slide 12 text

Renovateを実行
 https://github.com/coffmark/Renovate-iOS-sample/pull/39 
 
 coffmark/Renovate-iOS-sample 


Slide 13

Slide 13 text

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


Slide 14

Slide 14 text

2ヶ月間運用してみて良かったこと
 - 👍 1週間に1つ以上のライブラリ更新ができている
 - 2ヶ月間で合計8つのライブラリを更新 
 - RxSwift, 6.5.0
 - SwiftGen, 6.6.2
 
 - 👍 ライブラリ更新が簡単に
 - 問題がなければapprove・merge、問題があればcloseするだけOK 
 - closeすれば、また新しいPull Requestを作成してくれます 


Slide 15

Slide 15 text

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


Slide 16

Slide 16 text

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


Slide 17

Slide 17 text

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