
サプライチェーン攻撃に対してパッケージマネージャーの設定を強化します。
```text
_ _
| | ___ _ __ ___ __ _ _ _ __ _ _ __ | |
/
|/ _ \ '_ \/ __|/ _ | | | |/ | '__/ _ |
| (| | __/ |) _ \ (| | || | (| | | | (| |
_,_|_| ./|/_, |_,|_,|| _,|
|| |___/
Guard your dependencies against supply chain attacks. **Single static binary, zero Rust crate dependencies.**
作者 **[[arnica](https://arnica.io?utm_source=depsguard&utm_medium=referral&utm_campaign=community)]**
## Table of contents
- [概要](#overview)
- [インストール](#install)
- [使い方](#usage)
- [チェックされる内容](#what-gets-checked)
- [設定ファイルの場所](#config-file-locations)
- [緊急セキュリティ修正](#urgent-security-fix)
- [バックアップと復元](#backups-and-restore)
- [仕組み](#how-it-works)
- [トラブルシューティング](#troubleshooting)
- [ヘルプとフィードバック](#help--feedback)
- [ガイド](#guides)
- [関連項目](#see-also)
- [ライセンス](#license)
## 概要
DepsGuardは、お使いのマシン上の**npm**、**pnpm**、**yarn**、**bun**、**uv**、**pip**、**poetry**、**aube**を検出し、それらの設定ファイルを読み取り、推奨されるサプライチェーン設定と比較して、**修正を対話的に適用**できます。また、リポジトリ内の**Renovate**および**Dependabot**の設定もスキャンします。パッケージのインストールは一切実行しません。承認した設定ファイルのみを編集し、変更前には常に**バックアップ**を作成します。
### 主な機能
- 対話型TUI:スキャン、レビュー、修正の切り替え、適用
- 読み取り専用レポート用の`scan`サブコマンド
- バックアップを選択してファイルをロールバックするための`restore`サブコマンド
- クロスプラットフォーム:Linux、macOS、Windows
- サードパーティのRustクレートを同梱しない(標準ライブラリ+端末用の少量のプラットフォームFFI)
### 技術スタック
| 分野 | 詳細 |
|------|---------|
| 言語 | Rust(MSRV **1.74**、`Cargo.toml`を参照) |
| CLI / TUI | `src/main.rs`, `src/ui.rs`, `src/term.rs` |
| 設定ロジック | `src/manager.rs`, `src/fix.rs` |
| Webサイト | `docs/` 配下の静的サイト(バイナリとは別) |
## インストール
### プリビルトバイナリ
各[GitHub Release](https://github.com/arnica/depsguard/releases)には、次のアーカイブが含まれています:
- Linux: `x86_64` (glibc), `x86_64` (musl), `aarch64` (glibc)
- macOS: IntelおよびApple Silicon
- Windows: `x86_64` ZIP(`depsguard.exe`を含む)
お使いのプラットフォームのアーカイブをダウンロードし、解凍して、`PATH`にバイナリを配置してください。
リリースページで各アセットの隣にある対応する`.sha256`ファイルを使用して整合性を検証してください。
### プラットフォーム別のインストール
#### Linux(APTによるDebian/Ubuntu)```bash
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://depsguard.com/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/depsguard.gpg
echo "deb [arch=amd64,arm64 signed-by=/etc/apt/keyrings/depsguard.gpg] https://depsguard.com/apt stable main" | sudo tee /etc/apt/sources.list.d/depsguard.list >/dev/null
sudo apt update
sudo apt install depsguard
brew install depsguard
DepsGuard は [homebrew-core](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/d/depsguard.rb) に含まれているため、カスタム tap は不要です。
> **以前の `arnica/depsguard` tap から移行しますか?** コア formula に一度切り替えてください:
>
> ```bash
> brew uninstall depsguard
> brew untap arnica/depsguard
> brew update
> brew install depsguard
> ```
#### Windows```powershell
# WinGet
winget install Arnica.DepsGuard
# Scoop
scoop bucket add depsguard https://github.com/arnica/depsguard
scoop install depsguard
または、PowerShellを使用して手動でダウンロードします:```powershell $zip = "$env:TEMP\depsguard.zip" Invoke-WebRequest -Uri "https://github.com/arnica/depsguard/releases/latest/download/depsguard-x86_64-pc-windows-msvc.zip" -OutFile $zip Expand-Archive -LiteralPath $zip -DestinationPath "$env:TEMP\depsguard" -Force Copy-Item "$env:TEMP\depsguard\depsguard.exe" "$HOME\AppData\Local\Microsoft\WindowsApps\depsguard.exe" -Force depsguard.exe --help
### crates.io```bash
cargo install depsguard
Rust ツールチェーンと cargo が必要です。
組織が Homebrew、Scoop、または WinGet 経由で DepsGuard を配布している場合は、それぞれの手順に従ってください。これらのチャンネルのセットアップや自動化(Homebrew core の PR、バケット、WinGet の PR、CI シークレット)はメンテナー向けドキュメントです。AGENTS.mdの Release & distribution を参照してください。
インストールに使用したチャンネルを使用してください。
インストール済みのバージョンはいつでも depsguard --version で確認でき、最新バージョンはリリースページで確認できます。
git clone https://github.com/arnica/depsguard.git cd depsguard cargo build --release
バイナリは `target/release/depsguard` (Windows では `.exe`) です。Rust **1.74+** が必要です。
## 使い方```bash
depsguard # interactive: scan, choose fixes, apply
depsguard scan # report only; no writes (exits 1 if action is needed)
depsguard --no-search # skip recursive file search, check local configs only
depsguard restore # restore from a previous backup
depsguard --help # CLI help
depsguard を実行して対話型 TUI を起動します。システムをスキャンして結果のテーブルを表示します。いずれかのキーを押すと修正セレクタへ進みます。リポジトリレベルの設定の検出は、カレントディレクトリから下方向に検索します。読み取り専用レポートには depsguard scan を使用するか、再帰的なファイル検索をスキップしてユーザーレベルの設定のみを確認するには depsguard --no-search を使用します。
注: 一部の設定には最低バージョンが必要です。バージョンが古すぎる場合は次のように表示されます:
ℹ min-release-age – requires npm ≥ 11.10 (have 10.2.0)。npm install -g npm@latestでアップグレードして再実行してください。
↑ ↓ でリストを移動し(ページ送りは ^u ^d)、Space で修正のオン/オフを切り替えます。ファイル単位で一括選択するクイックフィルターキー: a すべて、n .npmrc、u uv.toml など – 1回押すと選択、もう1回で選択解除、3回目でフィルターをクリアします。 を押すと現在選択中の修正のみ表示されます。ユーザーレベルの設定ファイルは、標準の場所(ツールがサポートする場合は XDG ベースのパスを含む)から読み取られます。リポジトリレベルの設定は、カレントディレクトリから下方向に検索して見つけます。既知の大きなディレクトリ(node_modules、.git、target、Library、.cache など)はスキップされるため、スキャンは高速に保たれます。リポジトリレベルの .npmrc、.yarnrc.yml、pnpm-workspace.yaml、Renovate 設定、Dependabot 設定はすべて検索対象です。pnpm の設定は ~/.npmrc(pnpm <= 10 のみ; pnpm >= 11 は .npmrc から認証・レジストリ設定のみを読み取ります)、pnpm グローバル設定ファイル(pnpm <= 10 では rc、pnpm >= 11 では config.yaml)、または pnpm-workspace.yaml に配置できます。DepsGuard はこれら3つの場所をそれぞれ独立してチェックします。pip、uv、poetry については、DepsGuard は有効なユーザーレベルの設定を1つに解決し、そのファイルだけを報告します。シャドーされたファイルを個別に警告するのではありません。pip と poetry は、設定ファイルを優先順位に従ってマージします(クールダウンを設定している最も優先順位の高いファイルが優先されるか、どれも設定していない場合は推奨の場所が使われます)。uv は両方をマージするのではなく、単一のユーザーファイル( が設定されている場合は 、それ以外の場合は )を読み取ります。bun の場合、ユーザーレベルの設定ファイルが複数存在するとき(たとえば XDG パスとホームディレクトリパスの両方など)、DepsGuard は存在する各ファイルを個別にスキャンします。aube は npm/pnpm と同じ を読み取り((分単位))、検出されたリポジトリレベルの ファイルでもチェックされます。pip と poetry はユーザーレベルの設定( / )でスキャンされます。
パッチ適用済みバージョンがクールダウン期間より新しい場合は、限定的な例外を追加して修正をインストールし、その後で例外を削除します。
グローバルなクールダウンを緩めるよりも、パッケージ固有の例外を優先してください。そうすることで、他のすべての依存関係に対して遅延を維持できます。
クールダウンをバイパスする前に:
ファイルを変更する前に、DepsGuard は ~/.depsguard/backups/ にバックアップを書き込みます。
depsguard restore を実行すると、バックアップの一覧表示と1つの復元ができます。
src/ main.rs CLI args, run loop term.rs Raw mode + input (Unix termios / Windows console FFI) manager.rs Detection, scanning, recommendations fix.rs Read/write .npmrc, TOML, YAML; backup/restore ui.rs Banner, tables, selector
- **サードパーティクレートなし**: セキュリティ関連の小さなツールとしては意図的です。この方針を変更する場合は `AGENTS.md` を参照してください。
- **色**は ANSI シーケンスを使用します。Windows の最新ターミナル (例: Windows Terminal) でサポートされています。
## トラブルシューティング
| 症状 | 試すこと |
|---------|-------------|
| `depsguard: command not found` | インストールディレクトリが `PATH` に含まれているか確認し、バイナリへのフルパスを使用してください。 |
| 設定ファイル書き込み時の権限エラー | DepsGuard はユーザープロファイル内のファイルのみを編集します。管理者が所有するファイルでない限り、昇格せずに通常ユーザーとして実行してください。 |
| Windows でキーが機能しない | **Windows Terminal** または他の VT 対応ターミナルを使用してください。レガシーな `cmd.exe` では一部のキーが機能しない可能性があります。 |
| pnpm workspaces が見つからない | `pnpm-workspace.yaml` がホームディレクトリツリー内にあることを確認してください。非常に特殊なレイアウトでは検出されない場合があります。 |
| `cargo install` が失敗する | [rustup](https://rustup.rs/) で Rust をインストールし、Rust **≥ 1.74** を使用してください。 |
## ヘルプとフィードバック
- [バグを報告するか機能をリクエストする](https://github.com/arnica/depsguard/issues)
- [セキュリティ脆弱性を報告する](https://github.com/arnica/depsguard/security/advisories/new) ([`SECURITY.md`](https://github.com/arnica/depsguard/blob/HEAD/SECURITY.md) を参照)
- コントリビューター向けの開発ワークフローは [`AGENTS.md`](https://github.com/arnica/depsguard/blob/HEAD/AGENTS.md) にあります。
## ガイド
[depsguard.com](https://depsguard.com) の詳細ガイドでは、各ハードニング設定と、それらが防御するサプライチェーン攻撃について説明しています。
- [npm サプライチェーン攻撃から保護する方法](https://depsguard.com/guide/) (完全版ハードニングガイド)
- [依存関係のクールダウン (最小リリース期間)](https://depsguard.com/cooldown/)
- [ignore-scripts でインストールスクリプトをブロックする](https://depsguard.com/ignore-scripts/)
- [信頼できない推移的依存関係をブロックする (block-exotic-subdeps)](https://depsguard.com/block-exotic-subdeps/)
- [未レビューのビルドスクリプトで失敗させる (strict-dep-builds)](https://depsguard.com/strict-dep-builds/)
- [プロビナンスのダウングレードをブロックする (trust-policy)](https://depsguard.com/trust-policy/)
- インシデントレポート: [axios](https://depsguard.com/axios-npm-attack/) · [Shai-Hulud](https://depsguard.com/shai-hulud/) · [TanStack](https://depsguard.com/tanstack-npm-attack/)
## 関連情報
- [**Dependency Cooldowns** (`cooldowns.dev`)](https://cooldowns.dev/): リファレンスガイドと、**最小リリース期間のクールダウン**に特化したシェルヘルパー (`cooldowns.sh`) です。DepsGuard を補完します: クールダウンの軸ではより広いエコシステム (pip、uv、npm、pnpm、Yarn、Bun、Deno、Cargo) をカバーし、DepsGuard は npm/pnpm/yarn/bun/aube/uv/pip/poetry に加えて Renovate/Dependabot をカバーし、さらに他のハードニング設定 (`ignore-scripts`、`block-exotic-subdeps`、`trust-policy`、`strict-dep-builds`) をインタラクティブな TUI、差分プレビュー、バックアップ/リストアとともに追加します。
## ライセンス
MIT
---
**リンク:** [リポジトリ](https://github.com/arnica/depsguard) · [ドキュメントサイト](https://depsguard.com)
| チャンネル | Linux | macOS | Windows | インストールコマンド |
|---|
| APT(カスタムリポジトリ) | はい | いいえ | いいえ | sudo apt install depsguard(上記のリポジトリ設定後) |
| crates.io | はい | はい | はい | cargo install depsguard |
| Homebrew(homebrew-core) | はい | はい | いいえ | brew install depsguard |
| Scoop(カスタムバケット) | いいえ | いいえ | はい | scoop bucket add depsguard https://github.com/arnica/depsguard ; scoop install depsguard |
| WinGet | いいえ | いいえ | はい | winget install Arnica.DepsGuard |
| チャンネル | アップグレードコマンド |
|---|
| Homebrew | brew update && brew upgrade depsguard |
| APT(カスタムリポジトリ) | sudo apt update && sudo apt install --only-upgrade depsguard |
| crates.io | cargo install --force depsguard(最新リリースを再インストール) |
| Scoop | scoop update && scoop update depsguard |
| WinGet | winget upgrade Arnica.DepsGuard |
fd を押すと、実際に適用する前に変更内容の差分を確認できます。Enter を押すと選択した修正を適用します。ファイルが書き込まれる前に、タイムスタンプ付きのバックアップが作成されます。depsguard restore を実行して、バックアップ一覧からロールバックできます。q または Esc で終了します。| マネージャー | 設定ファイル | 設定 | 対象値 | 理由 |
|---|
| npm | ~/.npmrc | min-release-age | 7(日) | 新しいリリースを遅延させる(npm >= 11.10 が必要) |
| npm/pnpm | ~/.npmrc | ignore-scripts | true | インストールスクリプトのリスクを軽減(npm は .npmrc でこの設定を尊重; pnpm >= 11 は .npmrc ではなく pnpm-workspace.yaml / グローバル config.yaml から読み取る) |
| pnpm | ~/.npmrc | minimum-release-age | 10080(分) | 新バージョンを7日間遅延(pnpm 10.16–10.x のみ; pnpm >= 11 は .npmrc を無視; pnpm-workspace.yaml を使用) |
| pnpm | グローバル rc(pnpm <= 10) | minimum-release-age | 10080(分) | 新バージョンを7日間遅延(pnpm >= 10.16 が必要) |
| pnpm | グローバル rc(pnpm <= 10) | block-exotic-subdeps | true | 信頼できない推移的依存関係をブロック(pnpm >= 10.26 が必要) |
| pnpm | グローバル rc(pnpm <= 10) | trust-policy | no-downgrade | provenance のダウングレードをブロック(pnpm >= 10.21 が必要) |
| pnpm | グローバル rc(pnpm <= 10) | strict-dep-builds | true | 未レビューのビルドスクリプトで失敗させる(pnpm >= 10.3 が必要) |
| pnpm | グローバル rc(pnpm <= 10) | ignore-scripts | true | 悪意のあるインストールスクリプトをブロック |
| pnpm | グローバル config.yaml(pnpm >= 11) | minimumReleaseAge | 10080(分) | 新バージョンを7日間遅延 |
| pnpm | グローバル config.yaml(pnpm >= 11) | blockExoticSubdeps | true | 信頼できない推移的依存関係をブロック |
| pnpm | グローバル config.yaml(pnpm >= 11) | trustPolicy | no-downgrade | provenance のダウングレードをブロック |
| pnpm | グローバル config.yaml(pnpm >= 11) | strictDepBuilds | true | 未レビューのビルドスクリプトで失敗させる |
| pnpm | グローバル config.yaml(pnpm >= 11) | ignoreScripts | true | 悪意のあるインストールスクリプトをブロック |
| yarn | .yarnrc.yml | npmMinimalAgeGate | 7d | 新バージョンを7日間遅延(yarn >= 4.10 が必要) |
| pnpm | pnpm-workspace.yaml | minimumReleaseAge | 10080(分) | 新バージョンを7日間遅延(pnpm >= 10.16 が必要) |
| pnpm | pnpm-workspace.yaml | strictDepBuilds | true | 未レビューのビルドスクリプトで失敗させる(pnpm >= 10.3 が必要) |
| pnpm | pnpm-workspace.yaml | trustPolicy | no-downgrade | provenance のダウングレードをブロック(pnpm >= 10.21 が必要) |
| pnpm | pnpm-workspace.yaml | blockExoticSubdeps | true | 信頼できない推移的依存関係をブロック(pnpm >= 10.26 が必要) |
| pnpm | pnpm-workspace.yaml | ignoreScripts | true | 悪意のあるインストールスクリプトをブロック(pnpm >= 10.16 が必要) |
| bun | ~/.bunfig.toml | install.minimumReleaseAge | 604800(秒) | 約7日間の遅延(bun >= 1.3 が必要) |
| aube | ~/.npmrc | minimumReleaseAge | 10080(分) | 新バージョンを7日間遅延 |
| uv | uv.toml | exclude-newer | 7 days | 新しい公開を遅延(uv >= 0.9.17 が必要) |
| pip | pip.conf([install]) | uploaded-prior-to | P7D(7日) | 新しい公開を遅延(pip >= 26.1 が必要) |
| poetry | config.toml([solver]) | min-release-age | 7(日) | 新しい公開を遅延(poetry >= 2.4 が必要) |
| renovate | renovate.json など | minimumReleaseAge | 7 days | 依存関係更新の PR を7日間遅延 |
| dependabot | .github/dependabot.yml | cooldown.default-days | 7 | 依存関係更新の PR を7日間遅延 |
| マネージャー | Linux | macOS | Windows |
|---|
| npm/pnpm/aube | ~/.npmrc | ~/.npmrc | %USERPROFILE%\.npmrc |
| pnpm グローバル(pnpm <= 10) | $XDG_CONFIG_HOME/pnpm/rc または ~/.config/pnpm/rc | $XDG_CONFIG_HOME/pnpm/rc または ~/Library/Preferences/pnpm/rc | %LOCALAPPDATA%\pnpm\config\rc |
| pnpm グローバル(pnpm >= 11) | $XDG_CONFIG_HOME/pnpm/config.yaml または ~/.config/pnpm/config.yaml | $XDG_CONFIG_HOME/pnpm/config.yaml または ~/Library/Preferences/pnpm/config.yaml | %LOCALAPPDATA%\pnpm\config\config.yaml |
| yarn | ~/.yarnrc.yml | ~/.yarnrc.yml | %USERPROFILE%\.yarnrc.yml |
| pnpm | pnpm-workspace.yaml | pnpm-workspace.yaml | pnpm-workspace.yaml |
| bun | $XDG_CONFIG_HOME/.bunfig.toml または ~/.bunfig.toml | $XDG_CONFIG_HOME/.bunfig.toml または ~/.bunfig.toml | %USERPROFILE%\.bunfig.toml |
| uv | $XDG_CONFIG_HOME/uv/uv.toml または ~/.config/uv/uv.toml | $XDG_CONFIG_HOME/uv/uv.toml または ~/.config/uv/uv.toml | %APPDATA%\uv\uv.toml |
| pip | $XDG_CONFIG_HOME/pip/pip.conf または ~/.config/pip/pip.conf | ~/Library/Application Support/pip/pip.conf または ~/.config/pip/pip.conf(XDG_CONFIG_HOME が設定されている場合は $XDG_CONFIG_HOME/pip/pip.conf) | %APPDATA%\pip\pip.ini |
| poetry | $XDG_CONFIG_HOME/pypoetry/config.toml または ~/.config/pypoetry/config.toml | $XDG_CONFIG_HOME/pypoetry/config.toml(設定されている場合)または ~/Library/Application Support/pypoetry/config.toml | %APPDATA%\pypoetry\config.toml |
| renovate | renovate.json、.renovaterc、.github/renovate.json など | (同じ) | (同じ) |
| dependabot | .github/dependabot.yml | (同じ) | (同じ) |
XDG_CONFIG_HOME$XDG_CONFIG_HOME/uv/uv.toml~/.config/uv/uv.toml~/.npmrcminimumReleaseAge.npmrcpip.confpypoetry/config.toml| マネージャー | クールダウンの回避方法 |
|---|
| npm | npm install <pkg>@<ver> --min-release-age=0 |
| pnpm | pnpm-workspace.yaml の minimumReleaseAgeExclude にエントリを追加し、pnpm add <pkg>@<ver> を実行してから、そのエントリを削除します。パッケージ名による除外は pnpm 10.16+ で機能します。特定バージョンの固定(<pkg>@<ver>)には、さらに pnpm 10.19+ が必要です。pnpm には minimumReleaseAge 用の文書化された CLI オーバーライドはありません。 |
| yarn | .yarnrc.yml の npmPreapprovedPackages に <pkg>(またはグロブ)を追加するか、1コマンドで YARN_NPM_MINIMAL_AGE_GATE=0s yarn up <pkg>@<ver> を実行します。npmPreapprovedPackages は、年齢ゲートだけでなく、Yarn のすべてのパッケージゲートからマッチを除外します。 |
| bun | リポジトリレベルの bunfig.toml またはユーザーレベルの ~/.bunfig.toml の install.minimumReleaseAgeExcludes に <pkg> を追加するか、bun add <pkg>@<ver> --minimum-release-age 0 を実行します。 |
| aube | .npmrc の minimumReleaseAgeExclude に <pkg> を追加するか、単一インストールでは AUBE_MINIMUM_RELEASE_AGE=0(または npm_config_minimum_release_age=0)を設定します。 |
| uv | uv.toml または pyproject.toml の exclude-newer-package に "<pkg>" = false を追加し、uv add <pkg>==<ver> を実行してから、そのエントリを削除します。exclude-newer-package は、グローバルな exclude-newer 基準日に対するパッケージ単位の個別オーバーライドです。uv の CLI は --exclude-newer-package PACKAGE=DATE を受け入れますが、PACKAGE=false は受け入れません。 |
| pip | 1回のインストールでは pip install <pkg>==<ver> --uploaded-prior-to=P0D を実行します。P0D はそのコマンドのみクールダウンを無効にします。pip には設定でのパッケージ単位の除外はありません。 |
| poetry | poetry.toml/config.toml の solver.min-release-age-exclude(カンマ区切り)に <pkg> を追加し、poetry add <pkg>@<ver> を実行してから、そのエントリを削除します。solver.min-release-age-exclude-source は、代わりに指定したインデックスからのすべてのパッケージを除外します。 |
| Renovate | セキュリティ更新はすでに minimumReleaseAge をバイパスします。バージョン更新の場合は、matchPackageNames: ["<pkg>"] と minimumReleaseAge: null を指定した packageRules エントリを追加します。 |
| Dependabot | セキュリティ更新はすでに cooldown をバイパスします。バージョン更新の場合は、cooldown.exclude に <pkg> を追加します。 |