Back

すべての開発者が知っておくべき必須npmコマンド

すべての開発者が知っておくべき必須npmコマンド

おそらく、あなたは毎日何気なく npm installnpm run dev を使っているでしょう。しかし、npm CLIにはもっと深いツールキットがあり、実際に時間を節約できます — 壊れた依存関係ツリーのデバッグ、脆弱性の監査、ワンオフスクリプトの実行など、様々な場面で役立ちます。このガイドでは、すべての開発者の日常業務に必要な必須npmコマンドと最新のワークフローパターンを紹介します。

重要なポイント

  • npm installnpm uninstallnpm outdated は日常的な依存関係管理の中核を成します。
  • npm lsnpm explainnpm query を使用して依存関係ツリーを検査およびデバッグします。
  • npm auditnpm sbomnpm diff は、セキュリティとサプライチェーンの透明性のための実用的なツールを提供します。
  • package.jsonoverrides フィールドを使用すると、上流の修正を待たずに推移的依存関係を固定できます。
  • -- を使用してスクリプトにフラグを渡すことや、npm exec でワンオフバイナリを実行することで、一般的なワークフローを効率化できます。

依存関係のインストールと管理

npm依存関係管理の主力は npm install です。引数なしで実行すると、ローカルの node_modulespackage-lock.json と同期します。パッケージ名を追加して新しいものをインストールします:

npm install react            # runtime dependency
npm install vite --save-dev  # dev-only dependency

パッケージを安全に削除し、同時に package.json をクリーンアップするには:

npm uninstall lodash

プロジェクト全体で古くなっているものを確認するには:

npm outdated

これにより、現在、wanted、最新バージョンの明確な表が表示されます — 何をいつ更新するかを決定する前に便利です。

スクリプトの実行とフラグの渡し方

引数なしで npm run を実行すると、package.json で定義されているすべてのスクリプトがリスト表示されます。不慣れなプロジェクトに飛び込むときに便利です。

基礎となるスクリプトにフラグを渡す必要がある場合は、-- を使用して区切ります:

npm run build -- --watch --mode=development

-- の後のすべてがスクリプトに直接転送されるため、package.json を触らずに動作を調整できます。

依存関係ツリーの検査

依存関係の問題をデバッグするために開発者が知っておくべき2つのコマンドは、npm lsnpm explain(別名 npm why)です。

npm ls は完全な依存関係ツリーをレンダリングします。パッケージ名を渡してフィルタリングします:

npm ls ms

npm explain は、特定のパッケージがインストールされている理由 — どの直接依存関係がそれを引き込んだかを教えてくれます:

npm explain ms@0.7.1

より高度なフィルタリングには、npm query を使用してCSSセレクタースタイルのDSLを使用して依存関係を検索できます。例えば、postinstall スクリプトを定義しているすべてのパッケージを見つける(便利なセキュリティチェック):

npm query ":attr(scripts, [postinstall])"

インストールせずにパッケージを実行する

npm exec は、プロジェクトのローカル依存関係を使用してパッケージバイナリを実行するか、まだインストールされていない場合は一時的にパッケージをダウンロードします。最新のnpmバージョンでは、npx コマンドは内部的に npm exec に委譲されます。

npm exec -- create-react-app my-app

これはプロジェクトのローカル node_modules を最優先するため、グローバルインストールに頼るよりも予測可能な動作になります。

セキュリティに焦点を当てたnpmコマンド

npm audit は、既知の脆弱性データベースに対して依存関係ツリーをスキャンし、重要度順にランク付けされたレポートを出力します:

npm audit
npm audit fix          # 安全な更新を自動修正
npm audit fix --force  # 破壊的な修正を適用(後で徹底的にテスト)

サプライチェーンの透明性のために、npm sbom はソフトウェア部品表(Software Bill of Materials)を生成します — プロジェクトの依存関係の完全なインベントリを機械可読形式で:

npm sbom > sbom.json

この出力は、Snykなどのセキュリティツールに直接フィードして、より深い脆弱性スキャンを行うことができます。

アップグレード前に2つのパッケージバージョン間で実際に何が変更されたかを比較するには:

npm diff --diff=ms@2.1.2 --diff=ms@2.1.3

出力は git diff を模倣しており、プロジェクトに取り込む前に予期しない変更を簡単に見つけることができます。

推移的依存関係の固定

直接制御していない推移的依存関係に脆弱性がある場合、package.jsonoverrides フィールドを使用して特定のバージョンを強制します:

"overrides": {
  "node-ipc": "9.2.1"
}

overrides はnpm v8.3以降でサポートされていることに注意してください。Yarnを使用している場合、同等の機能は resolutions です。このアプローチは、上流のメンテナーを待たずに安全な依存関係ツリーを維持する最も実用的な方法の1つです。

まとめ

ほとんどの開発者は、npmができることの表面をなぞっているだけです。ここで紹介したコマンド — npm explainnpm query から npm sbomoverrides まで — は、基本的な使用法と真に効率的なワークフローの間のギャップを埋めます。現在の課題に合ったものから始めて、そこから構築していきましょう。

よくある質問

npm execは、npm v7で導入された組み込みコマンドで、パッケージバイナリを実行します。最新のnpmバージョンでは、npxは内部的にこれに委譲されます。主な違いは、npm execがローカルのnode_modulesを最初にチェックするため、より予測可能な動作を提供することです。ほとんどの日常的なタスクでは、両者は互換性がありますが、npm execが今後推奨されるアプローチです。

npm audit fixを実行して、安全でsemver互換の更新を自動的に適用します。修正にメジャーバージョンのバンプが必要な場合は、npm audit fix --forceを使用しますが、破壊的な変更が導入される可能性があるため、後でアプリケーションを徹底的にテストしてください。直接制御できない推移的依存関係の問題については、package.jsonのoverridesフィールドを使用してパッチ適用されたバージョンを固定します。

推移的依存関係に脆弱性やバグが存在し、それを引き込む直接依存関係がまだ修正をリリースしていない場合にoverridesを使用します。これにより、npmがそのネストされたパッケージの特定のバージョンを解決するように強制します。この機能にはnpm v8.3以降が必要です。バージョンを強制すると互換性の問題が発生する可能性があるため、オーバーライドを適用した後は必ずテストしてください。

npm explainの後にパッケージ名とバージョンを続けて実行します。例: npm explain ms@0.7.1。これにより、パッケージがインストールされた原因となった依存関係の完全なチェーンが出力されます。省略形のnpm whyも使用できます。依存関係ツリー全体のより広い視野を得るには、オプションのパッケージ名フィルターを指定してnpm lsを使用します。

Gain control over your UX

See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay