update-deps について
依存パッケージを監査・更新し、サプライチェーンの整合性確認、安全な更新、保留内容の記録を行うスキルです。ロックファイルを変更する前に、各パッケージを検証する手順を示します。
主な機能
- 01bun outdated で古いパッケージを確認
- 02メンテナーと完全性を検証
- 03更新リスクを分類
- 04承認済みのバージョン更新を実行
- 05監査結果と保留事項を記録
活用シーン
- 01ロックファイル変更前の依存更新監査
- 02検証に失敗したパッケージの更新保留
- 03監査をまたいだ保留更新の追跡
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ backnotprop/ plannotator --skill update-depsインストール後、Claude Code で/update-depsを入力して読み込まれたか確認します。
詳細
依存関係の更新
古くなったパッケージを監査し、サプライチェーンの完全性を検証して、安全なものを更新し、レビューが必要なものは保留し、すべてを記録します。
このプロセスは、検出、完全性監査、実行の3つのフェーズで構成されています。完全性監査は最も重要なフェーズです。すべてのパッケージは、ロックファイルに反映する前にチェックします。
フェーズ1:検出
bun outdated を実行して、更新可能なパッケージの一覧をすべて取得します。
bun outdated
出力を解析して、構造化されたリストにまとめます。各パッケージについて、次の項目を記録します。
- パッケージ名
- 現在のバージョン
- 更新可能なバージョン
- 年齢制限の対象かどうか(出力内の
*で示されます。「The * indicates that version isn't true latest due to minimum release age」という脚注で確認できます) - ランタイム依存関係、開発依存関係、ピア依存関係のいずれか
年齢制限によって更新が完全にブロックされているパッケージ(最小 semver 範囲を解決できずに更新できなかった @pierre/diffs など)がないかも確認します。こうしたパッケージは別途フラグを付けます。bunfig.toml の minimumReleaseAgeExcludes が必要になる場合があります。
フェーズ2:完全性監査
これがプロセスの中核です。並列で完全性チェックを実行するため、パッケージごとに Sonnet サブエージェントを1つ起動します。ここでは、重い推論を必要としない独立した構造化検証タスクを実行するため、Sonnet を使用します。
各サブエージェントには、パッケージ名、現在のバージョン、更新先のバージョンを渡し、次のチェックを実行させます。
サブエージェントのプロンプトテンプレート
更新が必要なパッケージごとに、次のタスクを指定して Sonnet エージェントを起動します。
You are auditing the npm package "{package}" for a version bump from {current} to {target}.
Run these checks and report back with a JSON object:
1. **Maintainer verification**: Check if maintainers changed between versions.
npm view {package}@{current} maintainers --json
npm view {package}@{target} maintainers --json
Compare the two lists. Flag any additions or removals.
2. **Publish date and age**: Get the publish timestamp.
npm view {package} time --json
Extract the date for version {target}. Calculate days since publication.
Flag if younger than 7 days.
3. **Provenance**: Check if the package has registry signatures or attestations.
npm audit signatures (if not already run this session)
Note whether the package has provenance attestations.
4. **Tarball diff**: Show what actually changed in the published package.
npm diff --diff={package}@{current} --diff={package}@{target}
Summarize the changes:
- How many files changed
- Are changes limited to version bumps, deps, and rebuilt dist? Or are there meaningful source changes?
- Any new runtime dependencies added?
- Any suspicious patterns (obfuscated code, eval(), network calls in unexpected places)
5. **Release notes**: Try to find what changed.
Check the package's repository for release notes or changelog:
npm view {package}@{target} repository.url
gh release view v{target} --repo <owner/repo> (try with and without v prefix)
Summarize the changelog if found.
Report your findings as JSON:
{{
"package": "{package}",
"from": "{current}",
"to": "{target}",
"age_days": <number>,
"maintainers_changed": <boolean>,
"maintainers_added": [],
"maintainers_removed": [],
"provenance": <boolean>,
"new_runtime_deps": [],
"files_changed": <number>,
"has_source_changes": <boolean>,
"changelog_summary": "<brief summary>",
"suspicious_patterns": [],
"verdict": "safe" | "review" | "defer",
"verdict_reason": "<one sentence explanation>"
}}
Verdict guidelines:
- "safe": Same maintainers, no new runtime deps, changes match what changelog describes, no suspicious patterns
- "review": Minor concerns (e.g., new maintainer who is clearly from the same org, small new dep from known publisher)
- "defer": Maintainer changes from unknown accounts, new runtime deps with unclear purpose, suspicious code patterns, substantive API changes that need integration testing
結果の収集
サブエージェントの処理が完了したら、JSON レポートを収集します。サブエージェントが失敗した場合、またはタイムアウトした場合は、そのパッケージを理由「audit failed」で「defer」として記録します。
ティア分類
すべての結果を収集した後、パッケージをティアに分類します。これにより、ユーザーはリスクの概要をすぐに把握できます。
| ティア | 説明 | 一般的な対応 |
|---|---|---|
| ランタイム、高い影響範囲 | コードから直接呼び出すライブラリ(パーサー、差分エンジン、UI ライブラリ) | 出所を確認し、差分をレビューして、テストを実行する |
| SDK/API 依存関係 | サードパーティサービスの SDK(エージェント SDK、プラットフォーム連携) | API の変更について変更履歴を読み、連携をテストする |
| 開発専用 | 型定義、ビルドツール、テストフレームワーク | 配布物には含まれないため、自由に更新する |
| ビルドツールチェーン | Bun 自体、コンパイラー、バンドラー | 最も慎重に対応する。破損するとすべての出力に影響する |
フェーズ3:実行
安全なパッケージを更新する
判定結果が「safe」のパッケージはすべて、次のように更新します。
bun update pkg1@version1 pkg2@version2 ...
年齢制限の競合によって更新に失敗した場合(パッケージの最小 semver を解決できない場合)は、そのパッケージを bunfig.toml の minimumReleaseAgeExcludes に追加し、理由を記録します。
サプライチェーンのメモに記録する
監査結果の全体を ~/.supply-chain/notes/<YYYY-MM-DD>.json に書き込みます。
{
"date": "YYYY-MM-DD",
"project": "plannotator",
"bumped": [
{
"package": "...",
"from": "...",
"to": "...",
"age_days": 0,
"maintainers_changed": false,
"provenance": false,
"notes": "..."
}
],
"deferred": [
{
"package": "...",
"current": "...",
"available": "...",
"age_days": 0,
"maintainers_changed": false,
"reason": "...",
"review_by": "YYYY-MM-DD"
}
],
"excluded_from_age_gate": [
{
"package": "...",
"reason": "..."
}
]
}
保留中のパッケージについては、review_by を今日から7日後に設定します。
以前に保留したパッケージを確認する
~/.supply-chain/notes/ のすべてのファイルを読み、以前の監査で保留したパッケージのうち、現在のロックファイルでも同じバージョンのままのものを集めます。これらは、以前に保留され、まだ更新されていないパッケージです。
確認するには、以前に保留した各項目について、現在インストールされているバージョンが保留メモの current フィールドと一致するかを確認します。一致する場合、そのパッケージは引き続き保留中です。
フェーズ4:要約
ユーザーにわかりやすい概要を提示します。
更新済み
更新した各パッケージについて、バージョンの変更内容と、安全と判断した理由を一行で記載します。
保留中
保留した各パッケージについて、バージョンの変更内容と保留理由を記載します。
引き続き保留中(以前の監査から)
以前の監査セッションで保留され、まだ更新されていないパッケージを記載します。最初に保留した日付と理由も含めます。これは「先送りにしている項目」のセクションで、保留中のパッケージを忘れないようにするためのものです。
引き続き保留中のパッケージがない場合は、その旨を記載します。これは良い兆候です。
年齢制限の除外
minimumReleaseAgeExcludes に追加したパッケージがあれば、そのパッケージと理由を記載します。