with one click
dependabot-triage
Dependabot のPR・設定を診断し、ノイズPRや不要な更新を抑える正しい対処を選ぶスキル。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Dependabot のPR・設定を診断し、ノイズPRや不要な更新を抑える正しい対処を選ぶスキル。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
GitHub PRのレビューコメントのうち、Hide・解決済みでないものだけを抽出して対応する。
Commit, push, and create or update a PR
GitHub Actions の CI 失敗を、失敗ジョブの特定 → ログからの原因抽出 → 原因分類 → ローカル再現 → 修正 → 検証まで体系的に進めるスキル。特に、失敗ログのノイズに埋もれて原因が見えないとき、環境依存でフレーキーに落ちているときに役立つ。修正に人の判断が必要な場合は、対話モードでは確認して中断し、--non-interactive 指定時はPRにコメントを投稿して中断する。
`bundle exec erblint app` の既存違反をファイル単位で無効化する todo ファイル群 (`.erb_lint_todo.yml` / `.erb-lint-rubocop-todo.yml`)を生成・初期化する手順。手動起動専用 (`/erblint-todo-init`)。todo を作り直したいときなど、一回性のセットアップ作業でのみ使う。 rubocop 単体・haml-lint・herb-lint の運用には使わない。
プランモードで作成したプランファイル(Markdown)の内容に沿って実装を行う。実装フェーズを軽量なsonnetモデルで実行し、コスト・速度を最適化する。引数でプランファイルのパスを指定できる。省略時は直近のセッションログから対象プランを自動特定してユーザーに確認する。コミット・push・PR作成は、プランに明記されている場合のみ実施する。
APM パッケージ由来ルール(.claude/rules/*.md)と重複するプロジェクト固有ローカルルール (.apm/instructions/*.local.instructions.md)を検出し、ローカル側を削除・縮小する。未管理ルールの 新規移行は行わない(それは migrate-rules-to-apm の役割)。手動実行専用(自動トリガーしない)。
| name | dependabot-triage |
| description | Dependabot のPR・設定を診断し、ノイズPRや不要な更新を抑える正しい対処を選ぶスキル。 |
| license | MIT |
| disable-model-invocation | true |
Dependabot のノイズPR(繰り返し作られる・上げたくないメジャー・追従不要なコミット)は、依存の種類によって正しい止め方が違う。種類を取り違えると効かない設定を入れてしまう。このスキルは、PRや困りごとを見て種類を分類し、種類ごとの対処を選び、設定に反映するまでの判断フローを提供する。
このスキルは診断して対処方針を提案するところまでを担う。最終的にどの方針を採るか(特にPRをクローズするか、メジャーを固定するか等の運用判断)は人間に確認してから実装・検証・コミットへ進む。
PRの差分(gh pr diff <n> や PR の get_diff)、あるいは困っている対象を見て、どの種類かを特定する。種類で対処が分かれるので、ここを誤らない。
| 種類 | 見分け方 | semverのignoreが効くか |
|---|---|---|
| 公開パッケージ(semver) | rubygems/npm 等のレジストリ公開gem・パッケージ。バージョン番号が X.Y.Z で進む | ✅ 効く |
| git参照の依存(ブランチ追従) | マニフェストで VCS を直接参照(例: github:/git: 指定)かつブランチ追従。lock に branch: と revision:(コミットSHA) が出る | ❌ 効かない(後述) |
| git参照の依存(タグ/バージョンpin) | 同上だがバージョン風タグに pin 済み(lock に tag: vX.Y.Z) | ✅ タグ判定が効く |
| CI のアクション類(GitHub Actions等) | ワークフローが参照するアクションのバージョン/SHA | ✅ 効く |
判別がつかないときは lock ファイルの該当エントリを見る。branch: 行があればブランチ追従、tag: 行があればタグpin、どちらも無く純粋なバージョン番号だけならレジストリ公開パッケージ。
ignore で止められないのかDependabot は VCS 直接参照の依存について、ブランチ追従の場合はブランチHEADのコミットSHAを「最新版」とみなし、新コミットが入る度にPRを作る。ここには semver(メジャー/マイナー/パッチ)の概念が存在しないため、version-update:semver-major などを使った ignore はそもそもマッチしない。
止めるには、依存側に semver の土俵を与える必要がある。バージョン風タグに pin すると、Dependabot はそのタグ群のうち最新を判定基準にし、「新しいタグが切られた時だけPR」に変わる。CI のアクションでハッシュpinした場合と同じ仕組み。
この性質は推測で断定しない。挙動に確信が持てなければ、対象のパッケージマネージャ/Dependabot の最新ドキュメントを確認する(git参照依存の更新判定はエコシステムごとに差がある)。
ignore「メジャーは上げたくないが minor/patch は上げてよい」のような方針は、dependabot.yml の該当エコシステムに ignore を足す。
ignore:
- dependency-name: "<package-name>"
update-types:
- "version-update:semver-major"
^ や ~> 等)も、その範囲を超える更新を防いでいる。ignore と二重で効かせると堅い。npm / bundler それぞれの完全な dependabot.yml ブロック例(groups+ignore+cooldown 込み)は references/dependabot-yml-examples.md を参照。
ブランチ追従が原因のノイズPRは、ignore ではなくマニフェストの参照方法を変えて直す。
branch: '<branch>'(または無指定)から tag: '<vX.Y.Z>' に書き換える。これで以降は「新タグが切られた時だけ」更新PRが出るようになり、semver の ignore も効くようになる。branch: → tag: の Gemfile 記述例は references/dependabot-yml-examples.md を参照。
対処はワークフローでの参照粒度で決まる。
uses: actions/checkout@v7 のような @vN)— v7 タグは v7系の最新コミットを指すので、minor/patch 更新はタグ参照側が自動で追従する。Dependabot が出す minor/patch のPRは実質ノイズ(マージしても参照は @v7 のまま)。意味があるのはメジャー更新(v7→v8)だけなので、version-update:semver-minor と version-update:semver-patch を ignore してメジャー更新PRだけ通す。@v7.1.2 や @<sha>)— その粒度の更新PRは意味がある(参照を書き換えないと上がらない)ので ignore しない。必要なら groups でまとめるだけにする。加えて、アクションは数が多くPRが乱立しがちなので、groups(patterns: ["*"])で1本のPRにまとめると効く。
個別の ignore/pin と直交して、PR量・タイミングを整える設定がある。困りごとが「PRが多すぎる/早すぎる」なら、こちらを検討する。
groups — minor/patch をエコシステム単位で1本のPRにまとめる。レビュー回数を大きく減らせる。cooldown(default-days)— リリース直後の不安定な版を避けるため、公開後N日経つまでPRを作らない。schedule.interval — weekly 等に落としてPR頻度を下げる。403 で失敗する場合は、ワークフロー側の対処になる。次の「Dependabot PR で CI が権限不足(403)で失敗する」を参照。groups・cooldown を組み込んだ完全な設定例は references/dependabot-yml-examples.md にある。
schedule.day: monday(や time:)を指定しているのに別の曜日にPRが来た、というケース。設定ミスを疑う前に、まず次の2点を押さえる。
schedule は best effort — 指定はジョブを「だいたいその頃に開始する」程度で、厳密な曜日/時刻は保証されない。バックプレッシャー次第で前後する。dependabot.yml を編集してpushすると即時再実行される(仕様) — 設定変更はすぐ反映したいという想定で、Dependabot はスケジュールを待たずその場でジョブを走らせPRを作る。現在スケジュール外で走る主因はこれ(他はセキュリティアドバイザリ公開時・前回ジョブ失敗時の再実行)。したがって「予定外の曜日にPRが来た」ら、まず 直前に dependabot.yml を編集・pushしていないか(直近コミットに dependabot.yml の変更が無いか)を疑う。あれば設定どおりの正常動作であり、対処不要。schedule を触らずに次回を待てば通常はスケジュール付近に戻る。
出典: dependabot-core #3059(メンテナ回答)。スケジュール挙動は推測で断定せず、挙動に確信が持てなければ一次情報を確認する。なお
cooldownは「リリース直後の版を避ける猶予期間」であってスケジュールの曜日/時刻とは無関係。混同しない。
依存更新そのものとは別軸の、Dependabot PR 特有のCI失敗。
症状と原因 — Dependabot が作るPRでは GITHUB_TOKEN がデフォルト read-only になる。そのため PR への書き込み(PR更新・コメント・レビュー投稿・チェック作成)を行うステップが 403 Resource not accessible by integration で落ちる。2021年10月以降、Dependabot PR でもジョブの permissions: キーは尊重されるので、必要な権限を明示すれば直る。
対処 — そのジョブを「動かしたいか / 回したくないか」で分ける。
permissions: を明示する(最小権限で)。書き込みの種別ごとに必要なスコープが違う:
contents: read + pull-requests: writechecks: writeactions: readif: に github.actor != 'dependabot[bot]' を足してスキップする。勘所 — ジョブに permissions: を1つでも書くと、明示しなかったスコープは絞られる(read 中心になる)。書き込みステップが複数種別あるなら、必要なスコープを取りこぼさず全部挙げる。それでいて付けすぎず最小権限に保つ。
ワークフロー側の設定例(permissions: 明示・actor スキップの if:)は references/dependabot-yml-examples.md を参照。
マニフェストを書き換えたら lock を整合させる。bundler の例:
bundle install
git diff <lockfile> # 差分を検証
検証の勘所:
branch: ... → tag: vX.Y.Z に置き換わっている。revision:(コミットSHA) は変わることがある。annotated tag の場合、タグ一覧APIが返すSHAはタグオブジェクト自身のSHAで、タグが指すコミットSHAとは別物。lock 再生成後はコミットSHAに解決されるため、バージョン番号さえ同じなら正常。ローカルの git 設定 safe.bareRepository=explicit が有効だと、bundler が git参照gemの bare キャッシュを操作できず bundle install が "not yet checked out" / "cannot use bare repository" で落ちることがある。その場合だけ、コマンド実行時に一時的に上書きして回避する:
GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=safe.bareRepository GIT_CONFIG_VALUE_0=all bundle install
これはローカル環境固有の回避で、コミット内容にもCIにも影響しない。エラーが出ないなら付けない。
ignore や pin にはなぜそうするかを設定ファイルのコメントに書く。後任が誤って外すのを防ぐ。@dependabot close 等のコメントコマンドもある)。