Renovateというリポジトリの依存関係の更新を自動化できるツールをざっくり検証

# はじめに
こんにちは。
私が参画している開発チームで以前、Renovateを使ってライブラリ等の自動更新試してみたいね、という話があったそうで、
近々私が担当することになりそうなので、事前学習のためRenovateについて少し学んだ内容を書いてみたいと思います。

# Renovateとは
>Renovateは、以下を自動化するためのオープンソースツールです。
>
>* リポジトリ内の依存関係の検出（オープンソースおよびプライベート/クローズドソース）
>* 依存関係の更新があるかどうかを確認する
>* 依存関係を更新するためのコミットとマージ/プルリクエストの作成
>* リリースノートの表示

（[公式サイト](https://docs.renovatebot.com/)より。Google日本語翻訳。）

リポジトリ内で依存するライブラリ等って、普通に数十〜数百なんてこともざらですよね。
依存関係にある個々のバージョンアップを追いかけるのも大変だし、かといって古いバージョンのままだったりすると・・
脆弱性が見つかったりなどあって、やはり最新バージョンを使うのが良いだろうことはわかるが面倒な作業。。
そこを自動化してくれ、バージョンの更新があればそれを検知→プルリクエストを作成（Renovateの設定で自動でマージも可）までやってくれる便利なツールが`Renovate`のようです。

なお、`Renovate`は以下が提供されており、好きな方法で試すことができます。
* npmパッケージ
* Dockerイメージ
* 無料のGitHubアプリ

# Renovateが監視するパッケージファイル
[公式サイト](https://docs.renovatebot.com/) の説明によると、`Renovate`は以下のようなパッケージファイルを監視し、
* package.json
* Gemfile
* go.mod

以下のような方法でパッケージファイルを更新するようです。
1. リポジトリをスキャンして、パッケージファイルとその依存関係を検出します
2. 新しいバージョンが存在するかどうかを確認します
3. 利用可能なアップデートのプルリクエストを発生させます


# 実際に試してみる
それでは早速、簡単に試してみたいと思います。
今回はGitHubを使ったやり方を試してみたいと思います。

1.まずは検証用のリポジトリを用意
[renovate-test](https://github.com/mytysoldier/renovate-test) という検証用のリポジトリを作成。

2.検証用にpackage.jsonを作成 
`npm init` で雛形を作成し、適当に`dependencies`を定義しました。（以下抜粋）
2022/4/2時点ではrequestライブラリの最新バージョンは「2.88.2」なので、一つ古いバージョンをここであえて指定。([npmのサイト](https://www.npmjs.com/package/request) より)
この状態でいったんリポジトリにプッシュしておきます。

```json:package.json 抜粋
  "devDependencies": {
    "request": "^2.88.0"
  },
  "dependencies": {
    "request": "^2.88.0"
  }
```

3.`Renovate` の設定
続いて、リポジトリに`Renovate` を設定します。
まずは[こちら](https://github.com/apps/renovate) のRenovateのGitHub APPのページからInstallボタンをクリックして、自分のGitHubアカウントに紐付けます。（既に紐付けが完了している場合は、「Configure」ボタンになっていると思います。）
![スクリーンショット 2022-04-02 18.19.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519408/111ae630-499f-852d-0a1d-3db8927bc3d2.png)

紐付けが完了したら、
「Configure」ボタンをクリック
→遷移するページ下部の「Repository access」からリポジトリを選択します。（今回は「Only select repositories」のほうにしました。）
→「Save」をクリック
![スクリーンショット 2022-04-02 18.20.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519408/b66f5ce2-afcc-2935-41b2-01635fd0bc3d.png)


少しすると、「renovate.json」を追加せよ、と`Renovate` がプルリクエストを作成しています。
「renovate.json」に`Renovate`の様々なオプションを定義していくことになります。

![スクリーンショット 2022-04-02 18.25.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519408/f21d9c53-c26e-84e4-0628-843ca0c07494.png)

プリリクエストをマージして少しすると、今度はIssueと新たなプルリクエストが作成されます。
（Issueの内容）
![スクリーンショット 2022-04-02 19.27.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519408/59a17bda-db1c-c21e-08e5-83469c479715.png)

「Pin dependency request to 2.88.2」が作成されているようです。リンクをクリックしてみます。

![スクリーンショット 2022-04-02 19.29.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519408/ebc9655b-ec7e-1834-76df-06f0bb54d277.png)

プルリクエストに飛びました。
内容を見てみると、古いバージョンを指定していたrequestライブラリを最新バージョンに更新せよ、とのことです。
（dependenciesのほうは更新してくれないのか・・）
プルリクエストをマージすると、Issueの内容も更新されます。

![スクリーンショット 2022-04-02 19.32.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519408/38036f26-4838-857c-cc2d-b3b3fb0fb9ba.png)

# 終わりに
以上簡単ですが、`Renovate` を触ってみました。
リポジトリの依存関係に更新があるか確認する、という面倒な作業を自動化でき、なかなか便利なツールだと思いました。

とりあえずはデフォルトの設定で動かしてみましたが、任意のタイミングで動くようスケジューリングしたりなど、
様々なオプションでカスタマイズし、より便利に使うことができます。
長くなってしまうので、そのあたりも簡単に試した内容を[こちらの記事](https://qiita.com/kyappamu/items/76e716c6e2c6a7aee5b3)にまとめてみました。
ご興味ありましたら、そちらも見ていただけたら幸いです。
読んでいただき、ありがとうございました！

# 参考情報
* [公式サイト](https://docs.renovatebot.com/)
* [Renovate でパッケージの依存関係を最新に保つ](https://goodpatch-tech.hatenablog.com/entry/how_to_use_renovate)