#0066（2024/03/08）npmコマンド

# よく使う npm コマンド一覧

npm は、Node.js のパッケージ管理やプロジェクト管理に不可欠なツールです。  
以下では、日常的に使われるその他の npm コマンドについて、その動作原理や使用場面を詳しく解説します。

---

### npm init
- **目的:**  
  プロジェクトの初期化時に、`package.json` を作成するためのコマンドです。
- **動作原理:**  
  対話形式で、プロジェクト名、バージョン、ライセンス、依存関係などの基本情報をユーザーに入力させ、`package.json` ファイルを生成します。
- **使用場面:**  
  新しいプロジェクトを開始するとき。

---

### npm install
- **目的:**  
  プロジェクトの依存パッケージをインストールします。
- **動作原理:**  
  `package.json` や `package-lock.json` に記載された依存関係に基づき、必要なパッケージをダウンロードし `node_modules` フォルダに配置します。  
  また、個別のパッケージ名を指定してインストールすることも可能です。
- **使用場面:**  
  依存関係の初期インストールや、新しいパッケージの追加時。

---

### npm update
- **目的:**  
  インストール済みパッケージを最新バージョンに更新します。
- **動作原理:**  
  現在のバージョン制約（`package.json` に記述）に従い、利用可能なアップデートを取得して、`node_modules` 内のパッケージを更新します。
- **使用場面:**  
  プロジェクトの依存関係を最新の状態に保ちたいとき。

---

### npm uninstall (または npm remove)
- **目的:**  
  不要になったパッケージをプロジェクトから削除します。
- **動作原理:**  
  指定したパッケージを `node_modules` から削除し、必要に応じて `package.json` からも依存関係のエントリを除去します。
- **使用場面:**  
  使用しなくなったライブラリやツールの整理時。

---

### npm run
- **目的:**  
  `package.json` の `"scripts"` セクションに記述されたカスタムスクリプトを実行します。
- **動作原理:**  
  スクリプト名を指定して実行することで、例えば、ビルド、テスト、開発サーバの起動などのタスクを自動化します。
- **使用場面:**  
  テスト実行、ビルド、サーバ起動などの定型タスクの実行時。

---

### npm ls
- **目的:**  
  現在のプロジェクトにインストールされているパッケージと、その依存関係のツリーを表示します。
- **動作原理:**  
  `node_modules` 内のパッケージ構造を再帰的に走査し、依存関係を視覚的にツリー形式で出力します。
- **使用場面:**  
  依存関係の確認、バージョンの衝突や循環依存の調査時。

---

### npm outdated
- **目的:**  
  アップデート可能なパッケージの一覧を表示します。
- **動作原理:**  
  現在インストールされているパッケージのバージョンと、npm レジストリ上の最新バージョンを比較し、差異をリストアップします。
- **使用場面:**  
  プロジェクトの依存関係を最新に保つため、更新が必要なパッケージを確認する際。

---

### npm ci
- **目的:**  
  `package-lock.json` に基づいてクリーンな状態で依存パッケージをインストールします。
- **動作原理:**  
  既存の `node_modules` を削除し、`package-lock.json` を厳密に再現する形で依存パッケージを一括インストールするため、ビルドの再現性が非常に高くなります。
- **使用場面:**  
  継続的インテグレーション（CI）環境や、クリーンなインストールが求められる場合。

---

### npm cache
- **目的:**  
  npm のキャッシュを管理します。例として、キャッシュのクリア（`npm cache clean --force`）などがあります。
- **動作原理:**  
  npm はパッケージのダウンロード時にキャッシュを利用して再利用性を高めています。  
  キャッシュの操作により、ディスク容量の管理やキャッシュが原因の不具合の解決が行えます。
- **使用場面:**  
  キャッシュ関連のエラー解決や、ディスクスペースの管理時。

---

### npm publish
- **目的:**  
  自作のパッケージを npm レジストリに公開します。
- **動作原理:**  
  `package.json` の情報に基づいて、パッケージを圧縮し、認証情報を用いて npm レジストリへアップロードします。
- **使用場面:**  
  自分が開発したライブラリやツールを共有したいとき。

---

### npm login / npm logout
- **目的:**  
  npm レジストリへの認証情報の登録や削除を行います。
- **動作原理:**  
  ユーザー名、パスワード、メールアドレスなどを入力し、認証トークンを取得または削除することで、公開やプライベートパッケージのインストール・管理を行えるようにします。
- **使用場面:**  
  パッケージの公開、プライベートパッケージのインストール時や、セキュリティ管理のため。


---

### npm view react-scripts version

- **目的:**  
  npm レジストリから `react-scripts` パッケージの情報を取得し、特にそのバージョン番号を表示します。

- **動作:**  
  - `npm view` コマンドは、指定したパッケージのメタデータ（バージョン、依存関係、リポジトリ情報など）を取得します。
  - `react-scripts version` とすることで、`react-scripts` の最新バージョンや指定されたバージョンを確認できます。

---

### npm install react@latest react-dom@latest

- **目的:**  
  最新版の `react` と `react-dom` を現在のプロジェクトにインストールします。

- **動作:**  
  - `npm install` コマンドは、パッケージをインストールするために使われます。
  - `@latest` を付けることで、npm レジストリ上の最新リリース版を明示的にインストールします。
  - これにより、プロジェクトの依存関係が最新の安定版に更新されます。

---

### npm audit fix --force

- **目的:**  
  プロジェクト内の依存パッケージに存在する既知のセキュリティ脆弱性を自動的に修正します。

- **動作:**  
  - `npm audit` は、依存関係の中に脆弱性がないかチェックします。
  - `fix` サブコマンドにより、自動的に脆弱性があるパッケージの更新を試みます。
  - `--force` オプションを付けると、互換性に関する警告を無視して、強制的にアップグレードを行います（場合によってはメジャーアップデートを含むため、注意が必要）。

---