🤨

GitLabで使うdependabotは思ってたより微妙

2024/10/06に公開

はじめに

株式会社ラクーンホールディングスの技術戦略部に所属しているK1mu21です!
最近弊社のコーポレートサイトをリプレイスする作業に携わっていて、自分はCI/CDの調整を行ったりCloudflareを触ったりしてます!

今回dependabotを導入してパッケージの自動管理をするようにしました
ですが思っていたより微妙だったので、これから導入しようと思ってる方向けに何が微妙だったのかをお伝えできればなと思っています

この記事を読んでほしい方

  • dependabotを使われている方、興味がある方
  • CIに興味がある方
  • GitLabを使われている方

dependabotとは?

dependabotは、GitHubがホストしているボットで、リポジトリ内の依存関係をチェックし、必要に応じてアラートの通知や、更新の候補をプルリクエストとして発行してくれるツールになります

https://github.com/dependabot

少し動作はGitHubとは異なりますが、dependabotはGitLabでも使うことができます!

https://gitlab.com/dependabot-gitlab/dependabot

https://qiita.com/ymbk990/items/6066b6967030a0495bc8

導入方法はここでは紹介しませんが、上記のリポジトリやQiitaを見れば楽に導入できると思います!

微妙な点

  1. 各パッケージのアップデートがあった場合ぞれぞれのMRが作られてしまう
  • GitLabではパッケージのアップデートをグループ化できないのでそれぞれのMRが作成されてしまいます
    • 物によっては依存関係もあり簡単にMergeボタンを押せないため、かなりめんどくさいです
    • 1MRをMergeするとすぐにconflictが発生するのでそれの修正にまあまあ時間が取られます

dependabotが作るMRの例

https://dependabot-gitlab.gitlab.io/dependabot/config/configuration.html

  1. package.json,package-lock.json以外のファイルの更新ができない
  • Biomeはbiome.jsonを設定する必要があり、package.jsonなどと共に更新する必要があります
    • 利用バージョンを記載する部分を、アップデートされるたびに手動で更新しなければいけなかったのが手間でした

https://biomejs.dev/reference/configuration/#:~:text=A list of paths to other JSON files. Biome resolves

3.ブランチ名を指定の長さにしたらランダムな文字列のブランチ名になる

  • これはCloudflare Pagesで発生した問題です
    • Pagesにはブランチ名をプレビュー環境のドメイン名に指定してデプロイするようにしていました
      https://ブランチ名.pages.dev/~
      • 実はブランチ名の部分で指定できる文字数は28文字以下という仕様がありました
      • dependabotが作ったブランチ名が場合によって30文字を超えることもあり、おかしなURLで環境が立ち上がる原因になっていました
      • 解決方法として28文字以下という指定を入れましたが、その結果ランダムなブランチ名になってしまい、どれがどのブランチなのかMRから遷移しないと特定できないのが微妙でした

よかった点

まあデメリットもありましたが、よかった点もありました

  1. 自動でパッケージのバージョン管理をしてくれる
  • dependabotを入れたら管理がとても楽になったので初めは感動してました
    • あとは脆弱性が発見されると、securityラベルを付けて教えてくれるのが結構よかったです
  • やはり人間が管理できる部分ではないなと感じたので、この辺は自動化すべきと思えたきっかけになっています
  1. AutoMerge機能が便利だった
  • パッケージ管理をしてくれるのはいいがパッチバージョン、マイナーバージョンが上がるたびにマージリクエストのMergeボタンをポチポチ押すのはめんどくさいですよね...
    • AutoMerge機能があるので自動でMergeしてくれるようにできます
    • 追加でAllow-Ignoreの設定を入れることで特定のパッケージのみ、特定のバージョンのみオートマージされるようになります
  • しかし安定動作が保証されていないのであんまり有効にするのはよろしくないかもしれません
    • 複数MRがあるのに1MRだけしかMergeされないなど実際に発生していました
    • Patchバージョンなら有効にするレベルなら大丈夫かと思います

https://dependabot-gitlab.gitlab.io/dependabot/features/auto-merge.html

https://dependabot-gitlab.gitlab.io/dependabot/config/configuration.html#allow-ignore-1

その後

  • 実際にdependabotが微妙だと感じたので、ツールをRenovateに移行しました
  • Renovateとはdependabotと同じようにパッケージの自動管理をしてくれるツールになります
    • dependabotではできなかった複数パッケージを1MRにまとめたり、biome.jsonも一緒に変更してくれるような機能もあり、自分の要望をかなり満たせるツールでした
  • また別記事でRenovateの説明もしたいと思います

https://github.com/renovatebot/renovate?tab=readme-ov-file

追記

続きを書いたのでぜひご覧になってください
https://zenn.dev/aeon_mall/articles/1704bebe048ef0

Discussion