Renovateを使ってみる

# 目次
1. 背景
2. Renovateとは
3. Renovateでできること
4. 対応しているpackage manager
5. 使ってみる
6. 参考

# 1. 背景
 https://docs.renovatebot.com/

 Renovateを使うとバージョンを上げないといけないライブラリ単位でgithubのPull Requestを自動で作ってくれるらしいので興味を持ちました。

# 2. Renovateとは
公式では以下の定義です。
>Automated dependency updates. Multi-platform and multi-language.

有名な企業にも積極的に導入されているのが伺えます。
[https://docs.renovatebot.com/#who-uses-renovate](https://docs.renovatebot.com/#who-uses-renovate)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/dd3d0bf9-8630-8807-4ea6-760c7cccdb6a.png)

# 3. Renovateでできること
[https://docs.renovatebot.com/#why-use-renovate](https://docs.renovatebot.com/#why-use-renovate)
- プルリクエストを取得して依存関係を更新し、ファイルをロックする。
- RenovateがPRを作成するタイミングを調整することでノイズを減らす。
- Renovateは、monoreposを含め、関連するパッケージファイルを自動的に見つける。
- 設定ファイルでボットの動作をカスタマイズでき、そのファイルは共有可能。
- 非推奨になった依存関係から、コミュニティが推奨する新しい依存関係に移行するためのプルリクエストを自動的に作成する。

# 4. 対応しているpackage manager
以下に記載ありましたのでご覧下さい。

https://docs.renovatebot.com/modules/manager/#supported-managers

# 5. 使ってみる
以下を参考に進めていきます。
renovateを使うリポジトリは[こちら](https://github.com/yamatai12/renovate-lab)です。
package.jsonのdependencies,nodeのバージョンは以下です。
```package.json
{

  "dependencies": {
    "typescript": "^4.1.6"
  },
  "volta": {
    "node": "18.18.0"
  }
}
```

https://github.com/renovatebot/tutorial#renovate---hands-on-tutorial

## Mend Renovate App をインストール
 [the Mend Renovate App installation page](https://github.com/apps/renovate)に移動し、installをクリックして下さい。

 Only select repositoriesにしました
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/3aefc040-ee6b-1b80-1310-6ab3631ca9cf.png)

 githubの認証画面に遷移します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/e5dd31e1-b2c8-c923-3764-c02fffa94475.png)

## ダッシュボード画面

以下のようにFinishedというポップが出ました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/ece08d93-a263-e453-a28e-1da145be2e22.png)

interactiveモードを選択しました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/e4c46166-41cc-b9b9-04fa-1ad2247cb7a6.png)

Onboarding Pull Requestsを選択しました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/e6862832-2942-f912-6c54-3a9addbc6f2c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/e615285b-ca0f-939b-0294-4162e4683736.png)

## github

するとこのようにPullRequestが作成されてます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/2c1123ed-6015-c56f-579f-615d36264bc2.png)
中身を見てみると、

- package管理しているファイルの特定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/63c82568-bbda-6da9-ce6a-01cfde72ca4f.png)

- バージョンアップ対象のライブラリと、これから作成するPull Requestについて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/3223c2bf-3e9b-81ff-354f-71f7cc7d601b.png)

それと以下の設定ファイルが作成されてました。
```renovate.json
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:base"
  ]
}
```

このPull Requestをmergeすると以下のissue、Pull Requestが作成されていました。

issue
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/a73c8c2e-611f-c193-0bd6-92a52b90084a.png)

下にある、これにチェックするとPull Requestが自動で作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/67fec572-3fe8-177e-ba93-3335147cb917.png)


Pull Request
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/bf0a77b1-b890-0c02-3b0c-865d864ae3d8.png)

typescriptのpull requestを見てみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/2cc49c33-762e-4364-669c-cf4dca43de1e.png)

Release Notesも記載してありました。

package-lock.jsonを修正してくれてます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/e84ac088-3d80-5c69-699b-0b7fa456bbe5.png)

これをマージすると無事完了ということになります。

# 6. 参考
- [Renovateってなぁに](https://zenn.dev/takamin55/scraps/87bcceca29364a)
- [[GitHub] Renovate の導入と設定](https://qiita.com/ksh-fthr/items/40732b6396f36c62bea2)

# 7. 感想
- renovate.jsonで細かい設定ができるのでそこも今度勉強したいです。
- [dependabot](https://github.com/dependabot)、[synk](https://snyk.io/jp/)との違いを勉強したいと思います。
- Renovateは自動でPull Request作って、ライブラリのバージョンを管理してくれるのでとてもありがたいツールだなと思いました。