Renovateを使ってそれぞれのパッケージのアップデートを、半自動化してみた

## 要約
いちいち`yarn upgrade`を気が向いたときに叩くのは面倒なので自動化しようぜ

## 導入の前に
### Renovateって何
例えばNode.jsの物であれば`package.json`に記載されたnpmパッケージに更新があった場合に、自動で検知してPull Requestを出してくれるブツです。他にもGithubActionsやdocker-compose、Dockerfileなんかもやってくれます。
[GitHub Marketplace](https://github.com/marketplace)から導入する場合、
今回は、[Renovateによるnpmパッケージ定期更新](https://user-first.ikyu.co.jp/entry/2018/05/07/193755)を参考に、私が作って管理している[DiscordBot](https://github.com/na2na-p/2na2-Discord)に導入してみます。

## 導入する
まずは私が作って管理している[DiscordBot](https://github.com/na2na-p/2na2-Discord)に、GitHub Marketplaceから導入していきます。

[GitHub MarketplaceのRenovateのページ](https://github.com/marketplace/renovate)へ移動する。
画面最下部のPricing and setupへ移動し、申請するアカウントが間違っていないことを確認したうえで`Install it for free`を押す。
前項(Renovateって何)で挙げた記事には有料プランが存在する旨が書いてありましたが、少なくとも本記事執筆時点では無料プランのみでした。`Unlimited Private and Public repositories per account`ともあるし、おそらく変わったのでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306146/47d4ce18-d904-d07c-939e-11dea4920c00.png)
確認画面の内容をよく確認したうえで`Complete order and begin installation`します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306146/b81f2d8b-56dc-4000-4383-6784249ac537.png)
最後に、インストールするリポジトリを選択します。複数選択できるのでいい感じにやっていってください。
~~多分`All repositories`でも問題はないのでしょうがえらいことになりそう~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306146/ea6d1a10-f913-4006-c807-684e070729b9.png)
導入が完了するとこんな画面が出てきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306146/002a416d-88e6-3d1d-c175-bd5ed46cea60.png)
待ちきれないのでclick hereしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306146/7351ae14-ce1e-8cc2-964c-61e2016fa0d3.png)

Githubと連携してやると、Renovateに登録するような画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306146/4d5bd055-41c7-2f4c-4328-9693afd74938.png)
登録が完了すると、Dashboardへ遷移します。(画像は塗りつぶしがありますが、ここには他のOrganizationsが出てます。)
![スクリーンショット 2022-08-03 211343.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306146/33a51dc2-fd40-ad10-1fcd-d963383be4e6.jpeg)
さて、Githubの該当のリポジトリのページへ移動すると、プルリクが生えているので確認します。今回生えたのは[これ(リンク)](https://github.com/na2na-p/2na2-Discord/pull/47)。
このままマージしてもいいのですが、さすがに検証せずにそのまま、というのも怖いので適当に満足いくまでローカルで試してからマージします。~~ちなみに、案の定というかコケたので泣きながら該当ブランチに修正コミット入れてます。ついでに該当箇所について、テスト書けそうだったので分割していい感じにしました~~
最終的にこんな感じで。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306146/70ab5da3-83a9-b0b7-7703-56b3148d4a61.png)

## `renovate.json`をいじる
### いい感じにグループ化する
まずプルリクの際に[グループしてくれるテンプレート一覧](https://docs.renovatebot.com/presets-group/)を確認します。今回挙げたDiscordBotで採用した物をピックアップしてみます。
- `group:allNonMajor`
- `group:definitelyTyped`
- `group:nodeJs`

### 自動アップデートさせない(バージョンの固定をしたい場合)
`ignoreDeps`の中に配列の形で指定してやります。
### その他
最終的に[こんな感じ](https://github.com/na2na-p/2na2-Discord/blob/develop/renovate.json5)になりました。
いじった後トリガー引いてやったら割とポコポコ生えてきて楽しい見た目になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306146/36ed9015-81e0-47fa-6b63-dea8ef79bd31.png)

## 終わりに
もともとnpmパッケージの更新だけを目的に導入していたのでActionsやDockerまで面倒見てくれるのは予想外でしたね。。。
また後でRenovateのセルフホストするパターンについて追記したいと思います。

## 参考にさせていただいた記事
- [Renovateによるnpmパッケージ定期更新](https://user-first.ikyu.co.jp/entry/2018/05/07/193755)
- [Renovateを半年運用して得た知見](https://qiita.com/okonomi/items/1cfd6fc908fbe9723127)