Slide 1

Slide 1 text

2023-07-05 Ebisu.mobile #3 STORES 株式会社 榎本健太 iOS リポジトリへの Renovate の導入

Slide 2

Slide 2 text

自己紹介 2 榎本 健太 STORES 株式会社 STORES ブランドアプリチーム iOS エンジニア 2023年5月入社 twitter.com/enomotok_ github.com/enomoto

Slide 3

Slide 3 text

ライブラリの更新を自動化するモチベーション 3 ● 機能追加 ● バグフィックス ● セキュリティリスクの低減 ● ビッグリリースを避ける とはいえ手作業で行うのは大変

Slide 4

Slide 4 text

Renovate とは 4 依存関係の自動更新をサポートするためのツール 依存しているライブラリのリリースを検知 アップデートのための Pull Request を自動で作って くれる 同様のサービスとして Dependabot がある https://github.com/apps/renovate

Slide 5

Slide 5 text

Renovate の導入方法 5 GitHub App をインストールするだけで簡単に導入で きる Swift Package Manager CocoaPods regexManagers の設定が必要なケース Carthage XcodeGen でプロジェクトの構成管理をしている

Slide 6

Slide 6 text

Renovate の導入方法 6 [pull request] Configure Renovate

Slide 7

Slide 7 text

Renovate の導入方法 7 [pull request] Configure Renovate

Slide 8

Slide 8 text

renovate.json 8 { "$schema": "https://docs.Renovatebot.com/Renovate-schema.json", "extends": [ "config:base" ], "schedule": [ "every weekend" # Pull Request を作成するタイミング ], "labels": [ "Renovate" # Pull Request に付与するラベル ], "packageRules": [ # ライブラリ毎に細かいルールを設定できる { "excludePackageNames": ["onevcat/Kingfisher"] # 更新対象から除外する } ] }

Slide 9

Slide 9 text

困ったこと、工夫したこと 9 ● XcodeGen で構成管理しているプロジェクトでは regexManagers の設定 が必要 ● Package.resolved が更新されない問題

Slide 10

Slide 10 text

regexManagers とは 10 regexManagers では正規表現を使ってライブラリ名とバージョン番号をキャプ チャ renovate.json に設定を記載

Slide 11

Slide 11 text

regexManagers による、ライブラリ名とバージョン番号の検知 11 project.yml (抜粋) packages: Firebase: url: https://github.com/firebase/firebase-ios-sdk from: 8.0.0 renovate.json (抜粋) "regexManagers": [ { "fileMatch": [ "^project.yml$" ], "matchStrings": [ "url: https:\\/\\/github\\.com\/(?.*?)(\\.git)?\\s*from: (?.*?)\\s" ], "datasourceTemplate": "github-releases" } ]

Slide 12

Slide 12 text

Package.resolved が更新されない問題 12 PR が生成されるタイミングで差分をコミットするようにしている CI の途中で以下の Shell Script を呼び出す #!/usr/bin/env bash set -eo pipefail # ここで依存解決をしているのは、ライブラリのリポジトリに含めているデモ用のプロジェクト xcodebuild -project "Appmaker-Demo/Appmaker-Demo.xcodeproj" -resolvePackageDependencies diff_result=$(git diff --name-only) if [[ "$diff_result" == *"Package.resolved"* ]]; then git ls-files | grep 'Package.resolved$' | xargs git add git commit -m "Update Package.resolved [skip ci]" # bitrise で使用しているスクリプトの抜粋なので bitrise の環境変数を参照します git push origin HEAD:$BITRISE_GIT_BRANCH fi

Slide 13

Slide 13 text

自分の環境で手軽に試す方法 13 チュートリアル README.md の通りにぽちぽちしていくだけで簡単に試せる https://github.com/Renovatebot/tutorial iOS のリポジトリで試したい GitHub で公開されているリポジトリを fork して、自分で設定してみると よい https://github.com/pointfreeco/isowords とか

Slide 14

Slide 14 text

参考URL 14 https://docs.renovatebot.com/ https://speakerdeck.com/ikesyo/renovateniyoruiosraiburarifalsezi-dong- geng-xin https://qiita.com/_asa08_/items/b0be1453f70efb3b9c29 https://tech.dely.jp/entry/2020/12/04/102515

Slide 15

Slide 15 text

おわり 15 ありがとうございました