Renovateでnpmモジュールを監視する


システム開発において、プロジェクトで利用しているライブラリやフレームワークのアップデートを追うことはとても重要です。 特に、Webフロントエンドでは追う作業だけで日が暮れてしまいます。

実際、複数のプロジェクトで利用しているモジュールを1つの package.json に個人的に纏めて、定期的に yarn outdated を行なってリリース内容を確認しに行くっていう地獄の作業を最近まで行なってました。

そんな地獄の最中、プロジェクトに対してモジュール依存をアップデートする PR を作成してくれる Renovate を利用してリリースを追うという耳寄りな情報を得ました。

Renovate の超簡単な使い方も合わせて。

What is Renovate

Renovate は、ざっくり以下のようなツールです。

  • 多くの言語、プラットフォームに対応した依存関係自動更新ツール
  • GitHub、GitLab、Azure DevOps に対応
  • package.json や go.mod などの依存関係ファイルを監視し、モジュールに変更があった場合に自動的に PullRequest を作成

依存関係ファイルだけでなく、Docker の Dockerfile や CircleCI の config.yml なども監視することができます。

具体的な Configuration の書き方やアップデートの流れに関してはドキュメントを漁ってください。

一つだけ有益な情報をお伝えすると、GitHub の public リポジトリであれば無料で利用できます。

Configuration

以下のように設定しました。 離れ業をしていないので、ごくごく普通です。強いて言えば、React と ReactDOM のようなニコイチなモジュールは一纏めにしているあたりでしょうか。

{
  "extends": ["config:base"],
  "npm": {
    "schedule": ["after 9pm", "before 9am"],
    "rangeStrategy": "bump",
    "postUpdateOptions": ["yarnDedupeFewer"],
    "lockFileMaintenance": {
      "enabled": true,
      "schedule": ["before 6am on the first day of the month"]
    },
    "packageRules": [
      {
        "groupName": "React and ReactDOM",
        "packageNames": ["react", "react-dom"]
      },
      {
        "groupName": "ESLint and Prettier",
        "packageNames": ["eslint", "prettier"],
        "packagePatterns": ["^eslint-config-", "^eslint-plugin-", "^@typescript-eslint"]
      },
      {
        "updateTypes": ["pin", "digest"],
        "automerge": true
      },
      {
        "description": "Disable package.json > engines update",
        "depTypeList": ["engines"],
        "enabled": false
      }
    ]
  }
}

オートマージさせるかどうか、どのようなグルーピングを行うか、どのようなアップデート(メジャー、マイナー、パッチ、ピン、ダイジェスト)だったらどうするか、みたいなところを弄り回して自分好みにしていく感じですね。 更新されるモジュールがプロジェクトで使われている場合とは訳が違って、自分がどのレベルまで追いたいかで調整すると良さそうです。

あのバグいつ直るのかな〜みたいな気持ちが報われるよう、パッチまでは手動マージするように設定しています。

おわりに

一応、リポジトリ置いておきます。

日々の日課に費やす時間は可能な限り削減していきたいですね。