Dependabotを導入してみた

2019.09.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

みなさんこんにちは。
突然ですがプロジェクトで使用しているライブラリのアップデートって面倒ですよね。
活動が活発なライブラリは嬉しい反面アップデートが辛かったり、セマンティックバージョニングを採用しているからガンガン自動で上がってくれないかと思いませんか。

そんなお悩みを解決するDependabotというものがありましたので導入してみました。

Dependabotとは

package.jsongo.modといったマニュフェストファイルをみて古いライブラリやセキュアでないものを調べてくれます。 そして必要に応じてライブラリの更新を行いPull Requestを自動で作成してくれる優れものです。我々に残された仕事はPull Requestをmergeするだけなのです(そしてそれすらも自動化できる)。

こちら からも確認できますが現在サポートしている言語は下記のようになっています。

  • Ruby
  • JavaScript
  • Python
  • PHP
  • Elixir
  • Rust
  • Submodules
  • Docker
  • ELB(ALPHA)
  • Terraform(ALPHA)
  • GitHub Actions(ALPHA)
  • Java(BETA)
  • .NET(BETA)
  • Go(ALPHA)

JavaScriptやGoといったプログラム言語のみならず、DockerやGitHub Actionsもサポートしています。
そしてGitHubに買収されたこともありGitHubのMarketplaceから無料で導入できます。

導入してみた

実際にDependabotを導入してどのように動くかを確認してみます。
以前私が作ったmd2bg というリポジトリに導入してみます。

Market Placeからインストールする

こちらからインストールをします。

下の方に行くと、Install for Freeとあるのでインストールします。 あとは画面に従ってぽちぽちしていけばインストール完了です。   Dependabotのダッシュボードに行くとリポジトリ一覧が確認できます。

Dependabotの設定をする

Web上から設定したいリポジトリを選択して導入することが簡単にできます。

今回は設定の使い回しができたりどんな設定をしているかをすぐ確認できるのでDependabotの設定ファイルを設置して動かすようにします。
Webでも全然問題なく設定できますし、ファイルを置くとその分ディレクトリが増えるのでお好みでお願いします。

Dependabotで使える設定は公式ドキュメントに詳しく記載がありかつバリデーターがWeb上にあるので構文チェックも簡単に行えます。

下記内容でファイルをリポジトリに加えます。

.dependabot/config.yml

version: 1
update_configs:
  - package_manager: "javascript"
    directory: "/"
    update_schedule: "daily"
    target_branch: "master"
    default_labels:
      - "dependencies"
    allowed_updates:
      - match:
          update_type: "all"
    version_requirement_updates: "increase_versions"

ざっと項目について説明します。詳しくは先ほど貼ったドキュメントのリンクから確認してください。

  • package_manager:
    どのパッケージマネージャを使用するかを選択する必須項目です。
    Javascriptの場合は、javascriptで問題ありませんが、Goなどの場合はgo:depのように言語:パッケージマネージャのように書く場合もあります。

  • directory:
    どのディレクトリにpackage.jsonなどのマニュフェストファイルがあるかを指定する必須項目です。

  • update_schedule:
    DependabotがチェックしてPull Requestを作成する頻度です。
    dayilyweeklyのどちらかを選択した場合はダッシュボードから日時を指定できます。

  • allowed_updates:
    アップデートする項目を制限します。
    セキュリティアップデートのみを許可させたり、ライブラリ名が一致するもののみアップデートを許可させたりします。

  • ignored_updates:
    Dependabotによるアップデートをしないライブラリを指定します。

  • version_requirement_updates
    Dependabotがpackage.jsonなどのマニュフェストファイルをどのように更新するかを指定します。
    lockfileのみアップデートさせたりライブラリによって必要な場合のみマニュフェストファイルの更新をさせたり柔軟に指定できます。

設定ファイルを書いたところで実際にリポジトリにpushします。

Dependabotのダッシュボードに戻るとリポジトリが追加されているのでBump nowを押してチェックをかけてみます。

しばらく待ってからリポジトリを見るとたくさんのPull Requestが出来上がっていました。
あとはこれを片せばライブラリのバージョン問題は解決です。

最後に

他にも自動でmergeさせたり便利な機能はいっぱいあります。
まだ導入していない方はぜひ導入してみてください。

参考ドキュメント