mcpField
C
check-npm

check-npm

github.com/grafanaセキュリティ2952.9k 回インストール1 日前に更新
リポジトリ

check-npm について

npm、yarn、pnpmのワークスペース設定を読み取り専用で監査するスキルです。ツールのバージョン、ライフサイクルスクリプト、依存プロトコル、リリース経過時間の方針を確認し、修正例とともに報告します。

主な機能

  1. 01パッケージマネージャーの判定
  2. 02ツールの最低バージョン確認
  3. 03ライフサイクルスクリプト設定の監査
  4. 04安全でない依存プロトコルの検出
  5. 05最低リリース経過時間の確認
  6. 06修正例付きの結果報告

活用シーン

  1. 01パッケージマネージャーのセキュリティ設定の確認
  2. 02ライフサイクルスクリプト制限の確認
  3. 03レジストリ外依存参照の特定
  4. 04インストール前のリリース経過時間方針の検証

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/grafana/skills --skill check-npm

インストール後、Claude Code で/check-npmを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
fix-snippets.md
managers.md
protocols.md

詳細

npm / yarn / pnpm サプライチェーン監査

ワークスペースのルートを読み取り専用で監査します。ファイルは変更しないでください。

0. パッケージマネージャーを検出する

test -f package.json || { echo "STOP: no package.json at workspace root"; exit 1; }
jq -r '.packageManager // "unset"' package.json
ls -1 yarn.lock package-lock.json pnpm-lock.yaml 2>/dev/null || true

package.json がない場合は停止します。優先順位:packageManager → ロックファイル → デフォルトの npm。

1. ツールのバージョン

npm --version    # required ≥ 11.15.0
yarn --version   # required ≥ 4.14.0
pnpm --version   # required ≥ 11.0.0

semver による比較を使用します。固定された packageManager がしきい値を満たしていることを確認します。

マネージャー最小バージョン
npm11.15.0
yarn4.14.0
pnpm11.0.0

2. ライフサイクルスクリプトの無効化

grep -E '^ignore-scripts=' .npmrc 2>/dev/null
grep -E 'enableScripts:' .yarnrc.yml 2>/dev/null
grep -E 'strictDepBuilds:|dangerouslyAllowAllBuilds:|allowBuilds:' pnpm-workspace.yaml 2>/dev/null
マネージャーPASSFAIL
npm.npmrc に ignore-scripts=true がある欠落または false
yarnenableScripts: false、またはキーが存在しないenableScripts: true
pnpm ≥ 11strictDepBuilds が未設定/true、dangerouslyAllowAllBuilds が未設定/false、かつ allowBuilds が未設定/[]strictDepBuilds: false、dangerouslyAllowAllBuilds: true、または allowBuilds が空でない
pnpm 10.npmrc の ignore-scripts=true または strictDepBuilds: trueどちらも該当しない

pnpm 11 以降は .npmrc および package.json#pnpm のスクリプト設定を無視します。pnpm 10/yarn の例外的なケース:references/managers.md。

3. 安全でない依存関係プロトコル

レジストリ:

grep -E '^allow-git=' .npmrc 2>/dev/null
grep -E 'approvedGitRepositories:' .yarnrc.yml 2>/dev/null
grep -E 'blockExoticSubdeps:' pnpm-workspace.yaml 2>/dev/null

ワークスペースの package.json ファイル(dependencies、devDependencies、optionalDependencies、peerDependencies)をスキャンします。references/protocols.md に従って、ワークスペースメンバーの検出(pnpm-workspace.yaml/ルートの workspaces/lerna/rush)を優先し、その後で該当するマニフェストのみをスキャンします。フォールバック(ワークスペース外のマニフェストも誤検出する可能性があります):

find . -name package.json -not -path '*/node_modules/*'

安全な値のみ: semver 範囲、workspace:、patch:、semver への npm: エイリアス。それ以外(Git URL、tarball、user/repo 形式、file:、link:、exec: など)はすべて path → name → value (protocol) として報告します。

マネージャーPASSFAIL
npmallow-git=none または root欠落または all
yarnapprovedGitRepositories: [] または grafana に限定したリスト、あるいはポリシーコメントとクリーンなスキャン結果がある場合は省略安全でない項目、または広範な許可リスト
pnpm ≥ 11blockExoticSubdeps が未設定/truefalse
pnpm 10.xblockExoticSubdeps: true未設定(デフォルトは false)または false

プロトコルの検出順序と yarn の設定詳細:references/protocols.md。

4. 最低リリース経過期間 ≥ 3 日

3 日 = 4320 分です。npm は日を使用し、yarn と pnpm は分を使用します。

grep -E '^min(imum)?-release-age=' .npmrc 2>/dev/null
grep -E 'npmMinimalAgeGate:' .yarnrc.yml 2>/dev/null
grep -E 'minimumReleaseAge:|minimumReleaseAgeStrict:' pnpm-workspace.yaml 2>/dev/null
マネージャーPASSFAIL
npmmin-release-age ≥ 3欠落
yarnnpmMinimalAgeGate ≥ 4320 分欠落または下回る
pnpm ≥ 11minimumReleaseAge ≥ 4320未設定(デフォルトは 1440)または下回る
pnpm 10minimum-release-age / minimumReleaseAge ≥ 4320欠落

pnpm 11 で minimumReleaseAgeStrict: false の場合は報告します。

5. レポート

#チェックステータス詳細
0パッケージマネージャー(npm / yarn / pnpm)バージョン:x.y.z(設定されている場合の固定バージョン:y.y.y)
1ツールのバージョン ≥ しきい値PASS / FAILactual と required の比較
2スクリプトの無効化PASS / FAIL設定行または「欠落」
3安全でない依存関係プロトコルPASS / FAILレジストリの状態 + 報告対象の項目
4最低リリース経過期間 ≥ 3 日PASS / FAIL設定 + 値

PASS/FAIL のみを使用し、絵文字は使用しないでください。

FAIL ごとに、貼り付けてすぐ使える修正方法を 1 つ示します。

# npm — .npmrc
ignore-scripts=true
allow-git=none
min-release-age=3
# pnpm 11 — pnpm-workspace.yaml
strictDepBuilds: true
dangerouslyAllowAllBuilds: false
allowBuilds: []
minimumReleaseAge: 4320
blockExoticSubdeps: true
# yarn — .yarnrc.yml
npmMinimalAgeGate: 4320

その他の修正方法(ツールのアップグレード、yarn の Git 許可リスト、pnpm 10):references/fix-snippets.md。

すべて PASS の場合は「すべてのチェックに合格しました。」と表示して停止します。

コメント