---
name: deps
description: リポジトリの依存関係（NuGet / npm・pnpm・yarn / Cargo / Python / Go / Flutter / GitHub Actions / Docker など）を現在のworktreeで安全に最新化し、`.github/dependabot.yml` / `.yaml` の設定を点検・修正し、lock file・互換修正・検証を整える。Dependabot PRは通常実行で点検し、取り込みが明示された場合だけ順にmergeする。Use when the user invokes /deps, asks to update dependencies or packages, wants the Dependabot configuration checked or fixed, asks to inspect or merge Dependabot pull requests, or wants dependency maintenance completed before a release. Performs security, patch, minor, and major updates by default (major can be limited with --no-major), without performing the release itself or creating a branch by default.
---

# 依存更新とDependabot設定・PR取り込みを完了する

依存更新をリリースや一般的なコード改善から分離し、現在のworktreeへ更新差分と検証結果を残す。あわせてDependabotが「検出した全ecosystemを、正しいdirectoryとscheduleで見張っている状態」を保つ。この目的はecosystemに依存しないので、**まず対象リポジトリのecosystemを検出し、そのecosystemの同等手順へ読み替えて実行する**。

## 権限とモード

`/deps` は、依存関係に限定した次のローカル操作を許可する。

- 依存manifest、lock file、依存更新に必要な互換コード・テスト・文書の変更。API変更が複数の呼び出し元、adapter、mock、fixtureへ波及する場合は、既存挙動を保つために必要な全箇所を対象にする
- `.github/dependabot.yml` / `.yaml` の点検と、[適合基準](references/dependabot-config.md)に基づく不適合項目の修正・新規作成
- 開いているDependabot PRの読み取り点検と `mergeable / superseded / held / pending` の分類

通常実行では、現在checkoutされているbranchとworktreeをそのまま使い、変更は未stage・未commitで残す。新しいbranch・worktree・cloneの作成、branch切替、stage、commit、push、PR作成は行わない。代わりに、未コミット変更を保持した現在内容へ依存差分だけを重ね、ローカル検証まで完了する。重なるfileでも変更箇所を安全に分離できれば続行し、自動で分離できないbatchだけを具体的な競合箇所とともに `held` として、他のbatchを進める。branchを作るか、PRにするかという一般的な選択のためには作業を止めない。

Git・GitHubへの書き込みは、現在の依頼にその操作が含まれる場合だけ行う。

- 「commitして」は現在branchで依存変更だけをstageして日本語commitを作る。「commitしてpush」はそのcommitを現在branchの設定済みupstreamへ通常pushする。
- branch作成・branch切替・PR作成は、それぞれが明示された場合だけ行う。PR作成が明示された場合は、そのPRに必要な専用branchの作成を含む。
- Dependabot PRのmergeまたはmerge queue投入は、「取り込んで」「mergeして」または `--dependabot-only` が指定された場合だけ行う。通常の `/deps` では分類までに留める。
- 明示されたpushがbranch protectionや未許可のdeployなどで安全に完了できない場合は、検証済みのローカル変更を現在worktreeへ残して正確なblockerを報告する。代替branchやPRを自動作成せず、routineなGit経路の選択質問はしない。

既定の適用範囲は **security / patch / minor / major のすべて**である。majorを「危険そう」「破壊的変更がありそう」という一般論だけで候補報告に留めず、`--no-major` が指定された場合を除いて対象versionへの更新を実際に試す。引数、型、名前空間、初期化、非同期・resource lifetimeなどのAPI変更は、影響する呼び出し元と検証資産をすべて新契約へ移行し、既存挙動を保ったまま検証成功まで完了する。呼び出し箇所や変更fileが多いことだけを理由に `needs-followup` へ送らない。

language/runtime/target framework世代の変更、製品の公開契約・挙動の再設計、外部資格情報・環境変更など、本skillの権限外の変更が不可欠なbatchは、今回batchで加えたmanifest・lock file・互換修正だけを開始前状態へ戻し、現在版、目標版、失敗したcommand、残作業を差分ではなく `needs-followup` の診断として記録する。戻すときも既存差分と先に成功したbatchを保持し、reset、checkout、stashは使わない。今回差分を安全に逆適用できない場合は、そのbatchと同じmanifest / lock fileを使う後続batchを `held` にし、fileが重ならないecosystemやpackage managerのbatchだけを続ける。

release、製品version更新、language/runtime/target framework世代の変更、package source・registry・資格情報変更、PR close、admin bypass、force pushは含まない。Dependabot設定のうち更新を止める・運用方針を変える変更（`ignore` の増減、entry削除、`target-branch` 変更、`schedule.interval` の方針変更、repository設定のトグル）も含まない。これらが必要になった場合は実施せず、必要性と影響を報告する。PR closeは `--close-superseded` が明示指定された場合に限り、`superseded` 判定PRのcloseだけを許可する（既定では含まない）。

- `--dry-run`: 棚卸しと実行計画だけ。
- `--manual-only`: 検出した全ecosystemの手動依存更新だけ。
- `--nuget-only`: 旧互換flag。実行ゲートへ入る前に `--manual-only --ecosystem=nuget` へ正規化する。`--ecosystem=nuget` 以外のecosystemまたは他の `only` 系との併用は矛盾として終了する。
- `--dependabot-only`: 既存Dependabot PRの取り込みだけ。
- `--config-only`: Dependabot設定の点検と修正だけ。
- `--no-config`: Dependabot設定は点検して報告だけ行い、file修正はしない。
- `--security-only`: 脆弱性対応だけ。
- `--no-major`: major更新を候補報告に留める（既定はmajorも実行する）。
- `--major-only`: major更新だけを対象にする。
- `--ecosystem=<名前>`: 対象ecosystemを明示指定する（例 `--ecosystem=npm`）。指定がなければ検出結果の全ecosystemを対象にする。
- `--close-superseded`: `superseded` 判定したDependabot PRを、既定branchが実際に同等以上のversionを含むことを確認したうえでcloseする（既定はcloseせず放置）。

### モードの実行ゲート

`--nuget-only` を先に前述の組へ正規化してから、次の表を§3〜§5の入口条件として使い、対象外の節を実行しない。`--manual-only` / `--dependabot-only` / `--config-only` / `--security-only` / `--major-only` は同時に1つだけ指定できる。複数指定、`--major-only --no-major`、`--config-only --no-config` のような矛盾は書き込み前に報告して終了する。

| mode | §3 Dependabot設定 | §4 手動更新 | §5 Dependabot PR |
|---|---|---|---|
| 通常 | 点検して権限内の不適合を修正 | security / patch / minor / major | 全PRを分類。mergeは自然言語で明示された場合だけ |
| `--manual-only` | skip | security / patch / minor / major | skip |
| `--dependabot-only` | skip | skip | 既存PRだけを点検し、flag自体をmerge許可として順次取り込む |
| `--config-only` | 点検して権限内の不適合を修正 | skip | skip |
| `--security-only` | skip | vulnerableと、その解消に必要な直接依存だけ | security PRだけを分類。mergeは自然言語で明示された場合だけ |
| `--major-only` | skip | majorだけ | major PRだけを分類。mergeは自然言語で明示された場合だけ |

`--no-config` は通常modeの§3を報告だけへ落とし、`--no-major` は通常modeまたは `--manual-only` のmajorを試行せず候補報告へ落とす。`--ecosystem=<名前>` は選択された全節の対象をそのecosystemへ限定する。`--dry-run` は選択された§2〜§5を読み取りと計画だけで最後まで実行し、修正・更新・Git/GitHub操作を行わず、全結果を示してから終了する。

## 1. preflight

1. 適用指示、Git root、現在・既定branch、remote、status、既存検証を確認する。push・PR作成・mergeが明示された場合だけbranch protectionとmerge方式も確認する。
2. 権限節の方法で未コミット変更を保持し、現在worktreeの現在内容を基準にする。依存更新と重なる箇所を先に特定して安全に編集できるbatchから進める。
3. 選択modeが§3を含む場合だけ `.github/dependabot.yml` / `.yaml` から[実効設定file](references/dependabot-config.md#実効設定fileを選ぶ)を確定し（どちらも無い場合は「未設定」と記録）、§5を含む場合だけ開いているDependabot PRを読み取る。対象ecosystem・directoryは全modeで確定し、実行する節同士に重複がある通常modeでは重複範囲も把握する。

## 2. ecosystemを検出する

[ecosystem対応表](references/ecosystems.md)と、そこから参照する現在の公式対応一覧を読み、リポジトリ内のmanifestとlock fileを実際に検索して対象を確定する。

1. `rg --files` などでmanifest fileを列挙し、存在するecosystemだけを対象にする。対応表に行が無くても公式一覧が対応するmanifestを無視せず、公式手順でmanagerとDependabot識別子を確定する。想定したfileが無い場合は「該当なし」と記録し、そのecosystem固有手順を飛ばす。
2. monorepoでは複数ecosystemやworkspaceが同居しうる。すべて列挙し、workspace rootと各packageの関係を把握する。
3. package managerは、lock file、`packageManager` field、Volta設定、CI workflow、リポジトリ既存文書の順で判定し、**既存のlock file形式を変えない**（例: `pnpm-lock.yaml` があれば pnpm を使い、npm へ移行しない）。
4. 検出したecosystemごとに、対応する詳細手順があれば読む。
   - .NET/NuGet → [NuGet手順](references/nuget.md)
   - Node.js（npm / pnpm / yarn / bun）→ [Node手順](references/node.md)
   - それ以外 → [ecosystem対応表](references/ecosystems.md)の該当行のコマンド体系に従う。
5. 詳細手順が無いecosystemにも適用する次の共通契約を、本skillの依存更新における正本とする。
   - 直接依存だけを更新対象にし、推移的依存は脆弱性解消などの根拠がある場合に限って扱う。
   - manifestを先に更新し、package manager標準の解決処理でlock fileを再生成する。lock fileを手編集しない。
   - 再生成後に「lock file固定モード」で再現性を確認する（対応表の *frozen* 列）。
   - version range、workspace protocol、overrides/resolutions、optional・dev区分、private設定を維持する。

## 3. Dependabot設定を点検して修正する

この節は通常modeと `--config-only` だけで実行する。[Dependabot設定の点検と修正](references/dependabot-config.md)を読み、検出ecosystemの結果と実効設定fileを突き合わせる。通常modeでは設定を先に直し、後段のPR点検が正しいecosystemとdirectoryを対象にできる状態へそろえる。`--no-config` のときは判定結果の報告までに留める。

1. 適合基準の各項目を「適合 / 不適合 / 該当なし / 未確認 / 明示待ち」で判定する。option名や既定値へ確信が持てない項目は公式referenceを取得して確認し、確認できないものは「未確認」として推測で書き換えない。
2. 不適合項目を最小差分で直す。fileが無いrepositoryでは、検出ecosystemとdirectoryだけを含む設定を新規作成する。
3. 修正後にYAMLとして解析できることと、`package-ecosystem` × directory が実在manifestと対応することを確認する。
4. 更新を止める・運用方針を変える変更（`ignore` の増減、entry削除、`target-branch` 変更、interval方針の変更、repository設定のトグル）は実施せず、理由と影響を報告して指示を待つ。
5. 設定修正は依存更新と区別できる差分として現在worktreeへ残す。commitが明示された場合は依存更新とは別のcommitにする。pushまたはPR統合まで明示され、設定が既定branchへ入った場合だけDependabot PR一覧を再取得し、新設entryのPRは次回scheduleで出るため当該実行では `pending`（設定反映待ち）として扱う。

## 4. 依存を更新する

この節は通常mode、`--manual-only`、`--security-only`、`--major-only` だけで実行する。最初にモード表で対象集合を確定し、以下の全手順をその集合だけへ適用する。`--security-only` はvulnerableとその解消に必要な直接依存だけ、`--major-only` はmajorだけを対象にし、`--dependabot-only` と `--config-only` では節全体を飛ばす。

1. 対象集合の判定に必要な outdated、vulnerable、deprecated（対応表の各列）だけを棚卸しし、security、patch/minor、major、置換判断へ分類する。棚卸しコマンドが無いecosystemは、manifestと公式registryの最新安定版を突き合わせて分類する。
2. prereleaseは既存方針または明示指定がある場合だけ採用する。通常modeと `--manual-only` では直接依存の最新安定版を対象にし、majorはpackage familyごとに分ける。
3. モードfilter後の対象を小さなbatchで更新する。通常modeと `--manual-only` は security、patch/minor、majorの順、`--security-only` と `--major-only` は該当分類だけを処理する。各batchの開始前に現在のstatus・関連diff・触る予定のmanifest / lock file / 互換修正pathを記録し、今回batchの差分を先行差分から区別できる状態にする。解決できないbatchは今回差分だけを開始前状態へ戻して `needs-followup` の診断を残す。戻せたことを確認できた場合だけ後続batchへ進み、戻せない場合は同じmanifest / lock fileを使う後続batchを `held` にする。通常modeと `--manual-only` では `--no-major` 指定時を除き、対象majorを飛ばして完了扱いにしない。
4. majorはpackage family単位の個別batchで、次の順に実施する。1つが失敗しても、開始前状態への復元を確認でき、差分が重ならない他のmajor batchは続行する。
   1. 現在版と目標版の間のbreaking changeを、公式release note・migration guide・CHANGELOGの一次資料で確認する（取得できない場合は「未確認」と記録し、検証結果で可否を判断する）。
   2. manifestを目標版へ上げてlock fileを再生成し、build・test・lint・型検査を実行する。
   3. 失敗は更新packageのAPI変更に起因する箇所を特定し、次の契約で解消する。
      - compiler、型検査、lint、testのerrorを入口に、変更されたsymbolの全参照をlanguage serverまたは検索で列挙する。production codeだけでなく、test、adapter、mock、fixture、sample、build・code generation設定も実際の参照に応じて対象にする。
      - 引数の追加・削除・並び替え、型・戻り値・namespace・symbol名の変更、builder・初期化方法、async・resource lifetime契約の変更を、公式migration guideと新APIの契約へ合わせる。既存の公開挙動を保てる互換移行はfile数にかかわらず本skillの範囲内として完了させる。
      - build・test・lint・型検査を再実行し、更新packageに起因する失敗がなくなるまで、影響箇所の列挙、修正、検証を反復する。manifestとlock fileを更新しただけ、または一部の呼び出し元だけを直した状態を `verified` にしない。
      - 完了にlanguage/runtime/target framework世代の変更、製品の公開契約・挙動の再設計、外部資格情報・環境変更が不可欠な場合だけ、今回batchの差分を開始前状態へ戻し、必要な追加作業と失敗した検証を `needs-followup` として記録する。
   4. 各batchはpackage family単位で差分を区別して保持する。検証成功は `verified` として差分を残し、未解決の失敗は差分を戻して `needs-followup` の診断だけを残す。commitが明示された場合も、`verified` のbatchだけをpackage family単位でcommitする。
5. version集中管理の仕組み（NuGet CPM、pnpm catalog、workspace共通version、Gradle version catalog 等）がある場合はその正本を更新し、個別manifestへversionを重複追加しない。
6. lock fileは§2の共通契約に従って再生成・固定検証する。
7. restore/install、build、test、lint、型検査など既存の検証をbatchごとに行う。必要な互換修正は更新packageの利用箇所と、その契約を検証するtest・mock・fixtureへ限定し、すべて成功するまで修正と検証を反復する。

`verified` の各batchだけを現在worktreeへ未stageで残し、他の既存差分が保持されていることを確認する。検証失敗は作業全体のhold条件にせず、開始前状態へ戻したうえで `needs-followup` の診断として残す。commit・push・PR作成が明示された場合だけ、その依頼範囲を現在branchから実行し、`verified` の差分だけを対象にする。保護branchへのpushが拒否された場合も依存用branchやPRへ自動で切り替えず、検証済み差分を保持してblockerを報告する。

## 5. Dependabot PRを取り込む

この節は通常mode、`--dependabot-only`、`--security-only`、`--major-only` だけで実行する。[Dependabot手順](references/dependabot.md)を読む。通常modeでは全PR、`--security-only` ではsecurity PR、`--major-only` ではmajor PRだけを点検・分類する。`--dependabot-only` 以外は自然言語で取り込みが明示された場合だけmergeし、`--manual-only` と `--config-only` では節全体を飛ばす。手動batchが既定branchへ入る操作まで明示された場合は、反映後にPR一覧を再取得し、古いsnapshotを使わない。

各PRについてauthor、base、head SHA、ecosystem、更新種別、diff、mergeability、required checks、approvalを確認する。依存manifest、lock file、workflow action参照以外の予期しない変更を含むPRは保留する。

1. security、patch/minor、majorの順に点検する。majorのPRも更新種別がmajorであることだけを理由に `held` にしない。diffとrelease noteを確認し、checksが通り互換性が確認できたPRを `mergeable` とする。mergeが明示された実行では、そのPRをmergeする。
2. 手動batchで同じversion以上になったPR、empty diff、既定branchへ含まれたPRは `superseded` とする。既定ではmergeもcloseもしない。`--close-superseded` 指定時のみ、既定branchの現在manifestで同等以上のversionを再確認したうえでcloseする。
3. checks成功、approval充足、競合なし、head SHA一致を満たすPRだけを、リポジトリ既定の方式で1件ずつmergeまたはqueue投入する。
4. 1件ごとに既定branchと残りPRを再取得する。前のmergeで変化したPRを連続処理しない。
5. pending checksは有限時間だけ待ち、未完なら `pending` として残す。failed checks、競合、majorの未解決互換性は、リモートPRをmergeしないという意味だけで `held` とし、admin bypassやskipで通さない。可能なら同じ更新を現在worktreeで試し、解決できなければ今回の試行差分だけを開始前状態へ戻して `needs-followup` の診断を残し、差分が重ならない他の作業を続ける。
6. 自分が扱ったecosystemのPR失敗を手動batchで安全に解消できる場合はbot branchへcommitせず、現在worktreeへ最小修正を適用して検証する。他ecosystemやコード本体の修正が必要なPRは別スコープとして保留する。

## 6. 最終検証と報告

現在worktreeの更新後内容で、選択modeが対象にした各ecosystemのinstall/restore、frozen検証、build、testと、outdated・vulnerable・deprecatedの再棚卸しを行う。通常実行では検証のためにcheckoutやpullを行わない。push・PR・mergeまで明示されて実行した場合だけ、対象remote commitのrequired checksと既定branchの反映状態を読み取りで確認する。

次のうち、選択modeで実施・判定した項目だけを簡潔に報告する。

- 検出したecosystemとpackage manager、該当なしと判断したもの
- Dependabot設定の判定結果（適合 / 修正した項目と差分 / 未確認 / 明示指示待ちの提案）
- packageごとの旧版、新版、update種別、互換修正
- lock fileと検証結果
- 現在branch、未stageで残した依存差分、明示依頼があった場合だけcommit・push・PR
- Dependabot PRの `mergeable / merged / queued / superseded / held / pending`
- major更新の `verified / needs-followup`（package family、旧版→目標版、breaking change、移行した全呼び出し元・test・mock・fixture、検証command、失敗時の残作業）
- `--no-major` 指定で試行しなかったmajor（現在版と目標版を添える）
- 残る脆弱性、deprecated packageと理由

releaseと製品versionは変更しない。すべて `verified` なら安定した依存状態を `/vava` へ引き渡し、`needs-followup` があれば失敗診断と残作業を明示してリリース可能とは扱わない。
