Dependabot は依存パッケージの更新を定期的にチェックし,更新があった場合にプルリクエストを作成してくれるサービスで,現時点で「Ruby, JavaScript, Python, PHP」など,多くのプログラミング言語がサポートされている.他にも「Go, .NET」などは BETA & ALPHA 版でサポートされている.依存パッケージの更新が重要なのはわかっていても,月に1回など,定期的なイベントとして実施しているチームも多いと思うので,Dependabot を使うメリットがある.
Dependabot 以外だと Greenkeeper や Tachikoma.io を使っているチームもあるし,CircleCI などと組み合わせて独自実装で実現しているチームもある.あえて自動化はせず「チームメンバーの教育目的で手動で依存パッケージを更新する」というチームの話も聞いたことがある.
Docker サポートとは?
Dependabot がサポートしているプログラミング言語の中に「Docker」があり,具体的に何をしてくれるんだろう?と興味があったので,実際に試してみた.結論から言うと「Dockerfile のベースイメージに更新があったら Dockerfile を更新するプルリクエストを作成してくれる機能」だった.これは便利では!?
インストール & 設定
Dependabot は GitHub Marketplace からインストールし,次にリポジトリを登録しておく.パブリックリポジトリなら無料で使えるので,すぐに試すことができる.あとはチェック設定をするだけで,今回は以下のように Dockerfile を管理しているリポジトリを登録してみた.Docker の場合,以下のオプションを追加で指定することができる.
- Directory (optional)
- Target branch (optional)
- Automatic PR merging
- Runtime dependency PRs to merge automatically
- Development dependency PRs to merge automatically
なお,スケジュールは以下の3種類から選ぶことができる.
- Daily updates
- Weekly updates
- Monthly updates
プルリクエスト
以下のように alpine:3.7
を alpine:3.8
に更新するプルリクエストが作成された.常に最新バージョンを確認しているわけではないので,Dependabot が定期的にチェックしてくれるのは便利だった.常に最新という意味で alpine:latest
を指定しているのであれば,プルリクエストは出ないと思う.
ChatOps
Dependabot は ChatOps に対応しているので,プルリクエストのコメントで以下のようなメンションをすると,トリガーすることができる.今回は自分でプルリクエストをマージするのではなく @dependabot merge
を使ってマージした.
@dependabot rebase
@dependabot merge
@dependabot cancel merge
@dependabot reopen
@dependabot ignore this [patch|minor|major] version
@dependabot ignore this dependency
@dependabot use these labels
@dependabot use these reviewers
@dependabot use these assignees
@dependabot use this milestone
@dependabot badge me
Flexible monorepo support
サイトには Flexible monorepo support と書いてあるけど,実際にディレクトリ /
で登録しようとすると Repo must contain a Dockerfile.
とエラーが出て使えなかった(なぜ?).今回はディレクトリごとに登録をした.
Using a monorepo? No problem - you can specify one or many directories within a repo for Dependabot to look for Dockerfiles in.
まとめ
- 依存パッケージの更新を定期的にチェックしてくれる Dependabot は便利
- Dependabot は Dockerfile もサポートしているので,ベースイメージの更新をチェックできる
- すごく便利なので Dependabot がもっと人気になれば良いな!