/deps-update(SKILL.md)から参照される,gh コマンド・GraphQL クエリ・分類規則・ローカル検証手順・台帳と PR コメントの書式.{owner}/{repo} は gh がカレントリポジトリから自動補完する.
/deps-update に関わる全エージェント(司令塔・ops-runner・deps-analyst)が厳守する.
app/dependabot の open PR のみを対象にする.人間や他のボットの PR には一切操作しないmain への取り込みは gh pr merge --merge のみ: ローカルで main に直接コミット・push しない.依存ファイル(マニフェスト・ロックファイル)を自分で書き換えて別 PR を作ることもしない(競合やビルド失敗の解消は @dependabot rebase / @dependabot recreate コメントで Dependabot にやり直させる)@dependabot ignore)は Dependabot と人間に任せる.@dependabot ignore ... のコメントも自分では投稿しない(無視は人間の決定)/loop /deps-update でのラップはユーザー起動とみなす)司令塔(/deps-update のメインループ)から委譲された ops-runner が実行する.振り分けの判断はせず,結果を構造化して返す.
gh 未認証・リモートが GitHub でない場合は停止して報告する(stash もしない).開始時のブランチ名を控えるdocs/02_ENV/ENV_04_開発コマンド.md があればそれを唯一の参照先とする.無ければ構成ファイル(package.json,pubspec.yaml,Cargo.toml,go.mod,pyproject.toml 等)から依存インストール・テスト・(あれば)ビルド/型チェック/リンタのコマンドを特定する.推測で試さず,特定できなければ「ローカル検証不可」として返す.claude/deps-update-merged.md・.claude/deps-update-report.md・.claude/deps-update-skip.md(無ければ空扱い..gitignore で追跡除外されていなければ追記する)patch / minor / major / unknown)・依存スコープ(本番 / 開発)・種別(security / version)・mergeable / mergeStateStatus・CI 状況で整理する司令塔がマージ候補と判定した PR を,指定された順に 1 件ずつ処理する ops-runner の手順.
@dependabot rebase をコメントして次へ進む(マージしない)mergeable・CI 状況を取り直す.CONFLICTING / BEHIND になっていれば rebase 依頼に切り替えるgh pr merge <番号> --merge --delete-branch でマージし,deps-update-merged.md へ「台帳の書式」で追記し,ローカル main を pull するgit status --short が空であることを確認して結果(マージ済み・rebase 依頼済み・分析行き)を返すgh auth status
gh repo view --json nameWithOwner -q .nameWithOwner
git status --short # 空であること
git branch --show-current # 開始時のブランチを控える
gh api repos/{owner}/{repo}/vulnerability-alerts # 204 なら Dependabot alerts 有効(404 なら無効)
gh api repos/{owner}/{repo}/automated-security-fixes # {"enabled":true,...} なら security updates 有効
test -f .github/dependabot.yml && echo "dependabot.yml: あり" || echo "dependabot.yml: なし"
ls .github/workflows/*.yml 2>/dev/null # CI の有無
gh pr list --author app/dependabot --state open --limit 100 \ --json number,title,body,url,headRefName,baseRefName,labels,mergeable,mergeStateStatus,statusCheckRollup,createdAt,isDraft
gh pr view <番号> --json number,title,body,mergeable,mergeStateStatus,statusCheckRollup,files,commitsgh pr checks <番号>(CI が無いリポジトリでは何も返らない)gh pr diff <番号> --name-only(マニフェストとロックファイルだけのはず.それ以外が含まれていたら報告に回す)gh pr view <番号> --json comments -q '.comments[].body' | grep -c "<!-- deps-update -->"GraphQL で「紐づく PR」と「PR を作れなかった理由」まで一度に取る(REST の /deps-update/alerts には PR との紐づけが無い).
OWNER=$(gh repo view --json owner -q .owner.login)
REPO=$(gh repo view --json name -q .name)
gh api graphql -f owner="$OWNER" -f repo="$REPO" -f query='
query($owner: String!, $repo: String!) {
repository(owner: $owner, name: $repo) {
vulnerabilityAlerts(states: OPEN, first: 100) {
nodes {
number
vulnerableManifestPath
vulnerableRequirements
securityVulnerability {
package { name ecosystem }
severity
vulnerableVersionRange
firstPatchedVersion { identifier }
}
securityAdvisory { ghsaId summary permalink }
dependabotUpdate {
pullRequest { number url }
error { title body errorType }
}
}
}
}
}'
dependabotUpdate.pullRequest があれば,その PR は security updatedependabotUpdate.error があれば,Dependabot は修正 PR を作れなかった(推移的依存・対応外マニフェスト・上限超過等).errorType と body を報告に転記するfirstPatchedVersion が null なら修正版が無いgh api "repos/{owner}/{repo}/dependabot/alerts?state=open&per_page=100".PR との紐づけは PR 本文の GHSA リンク(securityAdvisory.ghsaId)で照合するタイトル Bump <pkg> from <A> to <B>(Update <pkg> requirement from ... to ... の形もある)から版を取り,semver で比較する.
| 条件 | 規模 |
|---|---|
メジャーが上がる(1.x → 2.x) | major |
メジャーが 0 でマイナーが上がる(0.3.x → 0.4.x) | major 相当(破壊的変更を含みうる) |
| メジャー同じでマイナーが上がる | minor |
| パッチだけ上がる | patch |
| semver として解釈できない(日付版・ハッシュ・範囲指定等) | unknown |
-beta 等)への更新は unknown として扱うgithub-actions の v3 → v4 のようなメジャータグ更新は majorタイトル Bump the <group> group (across N directories )?with N updates の PR は,本文の Updates \行(または本文の表)を全て取り,**最大の規模**で判定する.テンプレートのdependabot.ymlではminor-and-patchグループがマイナー/パッチだけを含むので定義上minor` になるが,本文から実際に確認する.
マニフェストのセクションで判定する(package.json の devDependencies,pubspec.yaml の dev_dependencies,pyproject.toml の dev グループ/[project.optional-dependencies],Cargo.toml の [dev-dependencies] 等).github-actions・docker は CI/実行環境への影響として本番扱いにする.
gh pr checks <番号> --watch --interval 30 # 全チェック完了まで待つ(Bash ツールの timeout を 10 分程度にする)
CI が無い/CI 待ちに使う.最新 main を取り込んだ状態で検証し,終わったら必ず元に戻す.push は一切しない.
START_BRANCH=$(git branch --show-current) git fetch origin gh pr checkout <番号> # PR のブランチをローカルに取得して切り替え PR_BRANCH=$(git branch --show-current) git merge --no-edit origin/main # 失敗(コンフリクト)なら: git merge --abort → この PR は見送り(@dependabot rebase) # 依存インストール → 検証スイート(ENV_04_開発コマンド.md のコマンド) # 例: npm ci && npm test && npm run build / flutter pub get && flutter test && flutter analyze / cargo test / go test ./... git checkout "$START_BRANCH" git branch -D "$PR_BRANCH" git status --short # 空であることを確認
git status に差分が出る)場合は,git checkout -- . で破棄してからブランチを戻すgh pr merge <番号> --merge --delete-branch # Git 規約どおりマージコミット git checkout main && git pull origin main # ローカル main を追従(開始時のブランチが main でない場合は戻す)
--delete-branch が「既に削除済み」で失敗しても無視してよい(Dependabot 側の設定でブランチが自動削除されることがある)PR コメントで Dependabot を操作できる.本スキルが使ってよいのは次の 2 つだけ.
gh pr comment <番号> --body "@dependabot rebase" # base に追従させる(競合・BEHIND のとき) gh pr comment <番号> --body "@dependabot recreate" # PR を作り直させる(一時的なビルド失敗・壊れたブランチのとき)
@dependabot ignore this major version / @dependabot ignore this dependency / @dependabot close は人間が判断して投稿する(本スキルは推奨として提示するだけ)報告に回す PR(major・0.x マイナー・unknown)は,人間が「そのままマージ」「/implement で追従」「見送り」を選べるだけの材料を揃える.
gh api repos/<upstream-owner>/<upstream-repo>/releases や CHANGELOG を参照する(取れなければ「リリースノート未確認」と明記する)/implement で追従が必要(修正箇所の一覧)」@dependabot ignore this major version を人間が投稿)」github-actions のメジャー更新は workflow の入力・出力の変更点を確認する(CI が通っていれば「マージ可」でよい)報告に回した PR には,通常モードで次の書式のコメントを 1 回だけ投稿する(先頭の HTML コメントは二重投稿防止のマーカー.削除しない).
<!-- deps-update -->
## /deps-update による分析
- **判定**: 自動マージ対象外({メジャー更新 / 0.x マイナー更新 / CI 赤 / 検証不能})
- **更新**: `{pkg}` {A} → {B}({本番依存 / 開発依存},{security / version})
- **検証**: {CI 緑 / ローカル検証緑 / ビルドのみ / 未検証}
- **破壊的変更**: {抜き出した要点,無ければ「記載なし」}
- **影響箇所**: {ファイル:行 の一覧,無ければ「該当 API の利用なし」}
- **推奨**: {そのままマージ可 / `/implement` で追従後にマージ / 見送り(`@dependabot ignore this major version`)}
いずれも .claude/ 直下のローカル運用状態(.gitignore 対象).1 行 1 エントリ.
.claude/deps-update-merged.md:
- [merged] #<番号> | <pkg> <A>→<B>(グループは件数) | <security / version> | <patch / minor> | <検証: CI / ローカル / ビルドのみ> | <推奨する動作確認(無ければ -)> | <日付>.claude/deps-update-report.md:
- [major] #<番号> | <pkg> <A>→<B> | <本番 / 開発> | <破壊的変更の要点> | <影響箇所> | <推奨> | <日付>- [ci-fail] #<番号> | <pkg> <A>→<B> | <失敗したチェック/コマンドと要約> | <推奨> | <日付>- [alert] <pkg>(<ecosystem>) | <重大度> | <GHSA> | <修正版 or 修正版なし> | <PR を作れなかった理由> | <推奨対応> | <日付>- [other] #<番号> | <内容(依存以外のファイル変更・unknown 規模 等)> | <推奨> | <日付>.claude/deps-update-skip.md(ユーザーが編集する):
- #<番号> または <pkg> | <理由> | <日付>