こんにちは。エンジニアの安達 (@ry0_adachi) です、チョコミントが美味しい季節ですね。今回はpackage.jsonとyarn.lockの更新をいい感じで自動化できないかなーと思ってGreenkeeperの検証をしてみたよ、という話です。
Greenkeeperについて
Greenkeeperはライブラリのアップデートを自動化してくれるGitHub Appです。greenkeeper-lockfileを使うことでyarn.lockにも対応できるとのことなので使ってみることにしました。
競合サービス
Renovateというサービスがあり、こちらもライブラリのアップデートを自動化するためのGitHub Appです。こちらはyarn.lockにデフォルトで対応しており特に設定等は不要そうなのでyarnをお使いの方はこちらの方がいいかもしれません 😇
Renovateについては一休さんの記事がとても参考になりました。
料金体系
https://greenkeeper.io/#pricingを見てみると個人とOrganizationのどちらで利用するのかで料金体系が異なり、個人の場合はprivateリポジトリ1個につき$1.5/monthで、Organizationの場合は$25/monthでprivateが10個まで(11個目からは個別に$1.5/month)となっているようです。publicリポジトリはどちらも無料です。
Greenkeeperを使うための準備
CIの設定
- https://greenkeeper.io/docs.html#prerequisitesに書いてあるようにまずはCIの設定をしておかないといけないです
- ちなみに1回目にこれを読まずにCI未設定の状態で先にGitHub Appをインストールしたら何も起きなくなってしまいサポートに問い合わせる事になりました 😢
- 間違えたとしても、GitHub Appを削除→CIの設定をする→再度GitHub Appをインストールでいけるはず、とサポートからは言われました (今回はそれでもダメでしたが...)
GitHub Appをインストールする
- https://greenkeeper.io/docs.html#installationあたりを参考にポチポチとやっていきます
- 上記手順を2番まで終わらせると「README.mdにGreenkeeperのバッジ追加」と「package.jsonの更新」を含んだPRが作成されます
Greenkeeperが作成したPRをマージする
PRをマージすると初期設定が完了ですが、初回のPRにもpackage.jsonの更新が含まれるのでただしく動作する事は別途確認した方が良いです。
また下記の例だとwebpackが3.xから4.xになってwebpack-cli (もしくはwebpack-command) 入れないとダメになったり、CircleCIで使ってたDocker imageのNodeのバージョンが古くてバージョンアップしたライブラリのenginesの範囲外になってテストがコケました。それくらいだったので手動でサクッと直しましたが、あまりメンテしてなかったリポジトリとかだと最初のPRで地獄を見そうですね。あと、テストがないと動作確認が大変そうです。
Greenkeeperで作成してみたPRの例
- Update dependencies to enable Greenkeeper 🌴 by greenkeeper · Pull Request #8 · Connehito/eslint-config-connehito · GitHub
- Update dependencies to enable Greenkeeper 🌴 by greenkeeper · Pull Request #9 · dachi023/docbase-js · GitHub
lockfileも更新する
greenkeeper-lockfile を使いましょうということなのでこれをCIに組み込みます。
TravisCIは3行くらいなんで多分サクッと設定できると思います。CircleCIの場合もちょっと書く量が増えますがやってることは変わらないのでWorkflowsがちゃんと分かっていれば大丈夫かなーと思います。
CircleCIのconfig.ymlの例
所感
結論:更新PRを投げて欲しいだけならGreenkeeper、柔軟な設定が必要そうならRenovate
package.jsonとlockfileの更新PRが飛んできてそれをマージするだけなのでめちゃくちゃ楽だなぁ〜と思ったのと、Renovateと比べてやれることは少ないみたいですが、インストール完了までにやることがCIのconfigに書き足すだけなのでシンプルでいいなと思いました。ですが、lockfileがデフォルトで対応されてないのはやっぱりしんどいので改善して欲しいですね...。Greenkeeperの今後のアップデートに期待しつつ、Renovateの動向も追っていきたいなと思います。