TL;DR

リポジトリの依存関係が古くなったり脆弱性が見つかったりしたときに、更新するプルリクエストを自動で作る GitHub の機能。

なぜ必要か

依存のバージョンを固定したまま放っておくと、古いバージョンに留まり、安全でなくなるおそれがある。Effective Rust の項目 25 では、Cargo.lock をバージョン管理するなら、Dependabot などでアップグレードを管理する仕組みも用意するよう勧めている。

仕組み

GitHub の公式ドキュメントによると、Dependabot には 2 つの機能がある。

  • バージョン更新: 既知の脆弱性がなくても、依存を最新に保つためのプルリクエストを作る。リポジトリに dependabot.yml をコミットして有効にし、このファイルでマニフェストの場所や更新の方法を指定する。
  • セキュリティ更新: 既知の脆弱性がある依存を更新するプルリクエストを作る。バージョン更新とは別に有効にする。

古い依存が見つかると、マニフェストを最新のバージョンに更新するプルリクエストが作られる。利用者は変更履歴やリリースノートを確かめ、テストが通ることを確認してからマージする。既定では、新しいバージョンは公開から 3 日たつまで提案されない。この待ち期間(cooldown)はバージョン更新にだけ適用され、セキュリティ更新には適用されない。

例

Effective TypeScript の項目 65 によると、Dependabot や Renovate には、エンドユーザに直接影響する dependencies の更新を優先する設定がある。

関連

出典