NewsPicksモバイルチームの森崎(asa)です。
今回はモバイルチームで取り入れているライブラリの自動更新について紹介します。
スピーディーかつ複雑な開発が求められる現場では、ライブラリにお世話になることも多いと思います。しかし、実装時の楽さとは引き換えにライブラリのバージョンアップデートの追従や、ライブラリ自体がメンテナンス停止で移行を余儀なくされたりと、保守コストが上がってしまうという側面に悩まされる経験がある方も多いと思います。
そんな悩みを解消してくれるのがライブラリの更新の自動化です。今回の方法はモバイルだけでなくバックエンドやフロントエンドでも導入可能になっています。参考になれば嬉しいです。
全体の流れ
- Renovateがライブラリのリリースを検知してバージョンアップのPRを作成する
- PRの作成を検知してタスクチケットを作成する
- PRをレビュー・マージしてチケットを閉じる
自動化されている部分
- Renovateがライブラリのリリースを検知してバージョンアップのPRを作成する
- PRの作成を検知してタスクチケットを作成する
- PRをレビュー・マージしてチケットを閉じる
つまり、PRを確認してマージする作業以外、全て自動化されています。
Renovateについて
プロジェクトの依存関係の更新を検知し、PRを作成してくれるツールです。多くの言語や環境に対応しています。 DependabotというGitHubに統合された同様のツールもありますが、Dependabotは最近更新が進んでおらずSwiftPMにも対応していないので個人的には現状Renovateの方をお勧めします。
サポートされているプラットフォーム
- GitHub (.comとEnterprise Server)
- GitLab (.comとCE/EE)
- Bitbucket Cloud
- Bitbucket Server
- Azure DevOps
- Gitea
導入方法と使い方
GitHubを使用している場合は、renovate.jsonに設定を記述してGitHubリポジトリのルートに配置して、リポジトリにRenovate Appをインストールするだけで導入できます。 Qiitaの記事を別途書いているので参考にしてもらえると嬉しいです。
チケット更新の自動化について
弊社はチケット管理をClickUpで行なっており、チケットの更新にはZapierという自動化支援のツールを使用しています。詳細な方法については後日またブログにまとめたいと思います。
Zapierについても別途Qiitaの記事を書いているので、興味がある人は参考にしてください。
PRのマージを自動化しない理由
RenovateにはPRを自動でマージするかどうか設定できます。またどのバージョン(メジャー・マイナー・パッチ)が上がったかや、どのライブラリかによってマージのルールを分けることもできます。 弊社iOSチームは意図的に自動でマージせず、全て人のチェックを挟んでいます。
理由は下記の2点です。
・どういう変更があるかキャッチアップしたい
・動作に問題や変更がないかチェックしたい
特に2つ目の動作に関してですが、過去にライブラリのパッチバージョンのアップデートでクラッシュするようになってしまったり、アップデートしたことで挙動が変わることがありました。そのためチェックを挟むようにしています。
ただ最近はGem系の更新とかアプリの挙動に影響ないものは自動でマージしちゃってもいいなと思い検討しています。
おわりに
今回はライブラリの更新の自動化についてでした。自動化されたことの恩恵は非常に大きかったです。人的工数を最小限に品質を高めることができましたし、各ライブラリの必要性を見直すいい機会になっています。 Renovateに関してはサーバーサイドやWebクライアントなどいろんな環境に導入できるので、ぜひ活用して頂ければと思います。