LoginSignup
11
5

More than 3 years have passed since last update.

Bitrise/fastlaneでpod updateの自動化はいいぞー

Last updated at Posted at 2019-07-15

TL;DR

  • Podで管理してるライブラリ群のアップデートをするlaneを書く
  • BitriseでWorkflowを指定
  • Workflowをスケジューリングしておこう

前書き

iOSの開発を行っているみなさん, Pod, 使いますよね?
Podに限らず, Railsで開発するときもGemでライブラリ群を管理すると思うのですが, ライブラリというのは定期的にアップデートしないといつの間にか古くなってしまったりしますよね.
マイナーバージョンやパッチバージョンがいくつかアップデートされてるだけならまだいいのですが, 気づいたらメジャーバージョンが二つも上がってる! なんてこともあるかもしれません.

これにはいくつか原因があるかも知れないのですが, わたしは気付けないことが原因になることが多いのではと思っています.
つまり, アップデートがあったときに検知できる仕組みがあることが重要だと考えます.

この記事では, Bitriseとfastlaneを用いてPodで管理されているライブラリ群のアップデートがあったときに検知できる仕組みを作っていこうと思います.

FastfileにPodをupdateするlaneを用意する

Fastfile
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内に記述します.
やっていることはシンプルです.
1. pod updateコマンドをたたく
2. 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を起動させるだけです.
スクリーンショット 2019-07-16 0.11.35.png

Workflowをスケジューリングしよう

Buildsタブの画面右上の方にStart/Schedule a Buildというボタンがあるので, そこからスケジューリングの設定を行います.
スクリーンショット 2019-07-16 0.18.53.png
上のような画面で設定が行えます.

  • 時間
  • 曜日
  • ブランチ
  • Workflow

を設定することで, 自動でWorkflowが起動できます.
上の例だと毎日AM02:00に起動しますが, 毎日だとさすがに鬱陶しい場合は週一とかにすると良いと思います.

まとめ

いかがでしょうか?
今回はPodのアップデートについて書きましたが, Gemのアップデートも同様に行えるので, fastlaneやcocoapodsのアップデートも自動で検知できるようにすると非常に便利ですよ!

ちなみに, ライブラリをアップデートしたら不具合が! なんてこともよくあると思うので, PRが出た時に自動テストが走るようにしておくとGoodですね!

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5