TL;DR
- Podで管理してるライブラリ群のアップデートをするlaneを書く
- BitriseでWorkflowを指定
- Workflowをスケジューリングしておこう
前書き
iOSの開発を行っているみなさん, Pod, 使いますよね?
Podに限らず, Railsで開発するときもGemでライブラリ群を管理すると思うのですが, ライブラリというのは定期的にアップデートしないといつの間にか古くなってしまったりしますよね.
マイナーバージョンやパッチバージョンがいくつかアップデートされてるだけならまだいいのですが, 気づいたらメジャーバージョンが二つも上がってる! なんてこともあるかもしれません.
これにはいくつか原因があるかも知れないのですが, わたしは気付けないことが原因になることが多いのではと思っています.
つまり, アップデートがあったときに検知できる仕組みがあることが重要だと考えます.
この記事では, Bitriseとfastlaneを用いてPodで管理されているライブラリ群のアップデートがあったときに検知できる仕組みを作っていこうと思います.
FastfileにPodをupdateするlaneを用意する
desc 'Update pods'
lane :update_pods do
date = Date.today.to_s # 現在日付を取得
branch_name = "feature/pod-update-automation-" + date # branch名
sh("pod update") # この時点でファイル差分があれば以降の処理でPRが出る
sh("git checkout -b #{branch_name}")
git_add
git_commit(
path: "./",
message: "Update Pods"
)
push_to_git_remote(
remote: "origin",
local_branch: branch_name,
remote_branch: branch_name,
tags: false
)
create_pull_request(
repo: "tihimsm/my_app",
title: "Update Pods", # PRタイトル
head: branch_name,
base: "develop", # PRを出す先のブランチ
body: "A difference exists in Podfile.lock.\n Please check!" # PRのメッセージ部分
)
slack(message: "A difference exists in Podfile.lock. Please confirm Pull Request.")
end
このようなlaneをFastfile内に記述します.
やっていることはシンプルです.
-
pod update
コマンドをたたく -
Podfile.lock
に差分があればPRを作成
やろうと思えば, 差分があったらメインブランチに直接pushとかもできるのですが, さすがに動作確認などを行わずにメインブランチには反映したくないと思うので, PRを出すようにしています.
ちなみにこの中で使われているsh
, git_add
, git_commit
, push_to_git_remote
, create_pull_request
はfastlaneが標準で用意しています.
オプションなど詳しい情報は公式ドキュメントを下に貼っておくのでご覧ください.
BitriseにWorkflowを設定
Workflowはとても簡単です.
リポジトリをCloneしてきてfastlaneでupdate_pods
を起動させるだけです.
Workflowをスケジューリングしよう
Builds
タブの画面右上の方にStart/Schedule a Build
というボタンがあるので, そこからスケジューリングの設定を行います.
上のような画面で設定が行えます.
- 時間
- 曜日
- ブランチ
- Workflow
を設定することで, 自動でWorkflowが起動できます.
上の例だと毎日AM02:00
に起動しますが, 毎日だとさすがに鬱陶しい場合は週一とかにすると良いと思います.
まとめ
いかがでしょうか?
今回はPodのアップデートについて書きましたが, Gemのアップデートも同様に行えるので, fastlaneやcocoapodsのアップデートも自動で検知できるようにすると非常に便利ですよ!
ちなみに, ライブラリをアップデートしたら不具合が! なんてこともよくあると思うので, PRが出た時に自動テストが走るようにしておくとGoodですね!