404 Not Found

404 Not Found


nginx

npm パッケージマネージャー

アリスは、Luxonの日付処理ライブラリとExpress HTTPフレームワークの追加、およびJestテストツールの設定が必要な新しいプロジェクトを引き受けたばかりだった。当初、彼女は公式ウェブサイトからJavaScriptファイルを1つずつダウンロードし、手動でプロジェクトにコピーしていたが、常にバージョン競合に悩まされ、アップグレード作業は悪夢のようなものだった。そんな時、同僚からnpmを紹介された。npmを使えば、たった1つのコマンドで依存関係をインストールでき、バージョンはpackage.jsonに記録され、lockファイルを介して正確なバージョンに固定される。それ以来、チームは「自分のマシンでは動く」という問題を二度と経験することはなくなった。

学習内容

1. npm init — プロジェクトの初期化

(1) 対話型初期化

npm init を実行すると、プロジェクト情報の入力が段階的に求められ、最終的に package.json が生成されます。

▶ 例:対話形式で package.json ファイルを作成する

BASH
mkdir my-project && cd my-project
npm init
TEXT
package name: (my-project)
version: (1.0.0)
description: A sample project
entry point: (index.js)
test command: jest
git repository:
keywords:
author: Alice
license: (ISC)

(2) 迅速な初期化

-y を使用すると、すべてのプロンプトをスキップして、デフォルトの package.json を生成できます。

▶ 例:プロンプトをスキップして素早く生成する

BASH
npm init -y
TEXT
Wrote to /home/alice/my-project/package.json

生成された package.json のデフォルトコンテンツ:

JSON
{
  "name": "my-project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "license": "ISC"
}

2. npm install / uninstall — 依存関係のインストールとアンインストール

(1) 依存関係をインストールする

npm install <package> からパッケージをダウンロードし、node_modules に書き出します。

▶ 例:本番環境用の依存関係のインストール

BASH
npm install express

(2) 開発用依存関係をインストールする

--save-dev(略称:-D)は、パッケージをdevDependenciesに記録するものであり、開発環境でのみ使用することを目的としています。

▶ 例:開発用依存関係のインストール

BASH
npm install jest --save-dev

(3) 依存関係をアンインストールする

npm uninstall node_modules 内のファイルと package.json 内のレコードを両方とも削除してください。

▶ 例:依存関係のアンインストール

BASH
npm uninstall express

(4) すべての依存関係をインストールする

他者のプロジェクトをクローンした後、npm install を実行して、package.json および package-lock.json を使用してすべての依存関係を復元してください。

▶ 例:依存関係の復元

BASH
npm install
コマンド 機能 入力項目
npm install <pkg> 本番環境用の依存関係をインストール 依存関係
npm install <pkg> --save-dev 開発用依存関係をインストール devDependencies
npm install <pkg> -g グローバルインストール package.json には書き込まない
npm uninstall <pkg> 依存関係をアンインストール 対応するフィールドを削除
npm install リストに従ってすべての依存関係を復元する

3. dependencies と devDependencies の違い

(1) 依存関係の分類

dependencies は本番環境に必要なパッケージを、devDependencies は開発段階でのみ使用されるパッケージをそれぞれ一覧表示しています。

▶ 例:package.json 内の「dependencies」セクション

JSON
{
  "dependencies": {
    "express": "^4.18.2",
    "luxon": "^3.4.4"
  },
  "devDependencies": {
    "jest": "^29.7.0",
    "eslint": "^8.56.0"
  }
}

(2) 本番環境へのインストール時に開発用依存関係をスキップする

--production を使用するか、NODE_ENV=production を設定して、devDependencies のインストールをスキップし、デプロイサイズを縮小してください。

▶ 例:本番環境へのインストール

BASH
npm install --production
比較項目 dependencies devDependencies
目的 本番運用に必須 開発・テスト用のみ
インストールコマンド npm install <pkg> npm install <pkg> -D
本番環境へのインストール 常にインストール --production の場合はスキップ
代表的なパッケージ express, luxon, axios jest, eslint, nodemon
導入要件 必須項目 任意項目

4. package-lock.json の目的

(1) 正確なバージョンを固定する

package-lock.json すべての環境においてインストール結果が一貫性を保つよう、各依存関係の正確なバージョンと整合性ハッシュを記録してください。

(2) インストール速度の向上

lock ファイルには依存関係の完全なツリーが含まれており、これにより npm はバージョンの解決をスキップして、パッケージを直接ダウンロードすることができます。

▶ 例:ロックファイルのコードスニペット

JSON
{
  "node_modules/luxon": {
    "version": "3.4.4",
    "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
    "integrity": "sha512-zaBViHBuQffgP8h...',
    "requires": {}
  }
}
プロパティ 機能
バージョン 正確なバージョン番号
解決済み パッケージのダウンロードリンク
整合性 SHA-512 ハッシュ、整合性チェック
必要条件 このパッケージのサブ依存関係の一覧

5. セマンティック・バージョニング (SemVer)

(1) バージョン番号の形式

SemVerの形式はMAJOR.MINOR.PATCHであり、各構成要素にはそれぞれ特定の意味があります。

(2) バージョン範囲記号

package.json 内の記号を使用して、許容されるバージョンの範囲を指定してください。

記号 意味 ^1.2.3 許容範囲 ~1.2.3 許容範囲
^ マイナーバージョンに対応 >=1.2.3 <2.0.0
~ 互換性パッチのバージョン >=1.2.3 <1.3.0
>= 以上 >=1.2.3
> より大きい >1.2.3
x ワイルドカード 1.2.x>=1.2.0 <1.3.0

▶ 例:さまざまな範囲における実際の結果

JSON
{
  "express": "^4.18.2",
  "lodash": "~4.17.21",
  "axios": ">=1.6.0",
  "debug": "4.3.x"
}

(3) バージョンの更新に関する規則


6. グローバルインストールとローカルインストール

(1) ローカルインストール

デフォルトでは、このパッケージは node_modules プロジェクトにインストールされます。プロジェクトごとに異なるバージョンを使用することができます。

(2) グローバルインストール

-g フラグを追加すると、パッケージがシステムのグローバルディレクトリにインストールされ、コマンドラインツールが提供されます。

▶ 例:コマンドラインツールをグローバルにインストールする

BASH
npm install -g nodemon

(3) グローバルインストールをいつ使用するか

コマンドラインからのアクセスが必要なツール(nodemon や pm2 など)のみをインストールしてください。プロジェクトの依存関係は、常にローカルにインストールする必要があります。

比較 ローカルインストール グローバルインストール (-g)
設置場所 プロジェクト node_modules システムのグローバルディレクトリ
package.json 依存関係を含める 含めない
バージョンの分離 プロジェクト間で独立 同一バージョンをグローバルで共有
ユースケース プロジェクトの実行時依存関係 CLI ツール
アンロードコマンド npm uninstall <pkg> npm uninstall -g <pkg>
代表的なパッケージ express, lodash nodemon, pm2, typescript

7. npm スクリプト

(1) 組み込みスクリプト

start および test は、npm start / npm test を使用して直接実行できる、npm の組み込みスクリプトです。

(2) カスタムスクリプト

その他のスクリプトは、npm run <name> を使用して実行する必要があります。

▶ 例:一般的なスクリプトの設定

JSON
{
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js",
    "test": "jest --coverage",
    "lint": "eslint src/"
  }
}
BASH
npm start
npm run dev
npm test
npm run lint

(3) スクリプト間のフック

pre<script> および post<script> は、対象スクリプトの実行前と実行後に自動的に実行されます。

▶ 例:pre フックの使用方法

JSON
{
  "scripts": {
    "prebuild": "npm run lint",
    "build": "node build.js",
    "postbuild": "echo Build complete"
  }
}

npm run build を実行すると、prebuild → build → postbuild が順次実行されます。

スクリプト コマンド 説明
開始 npm start アプリを起動
テスト npm test テストを実行
dev npm run dev 開発モード(カスタム)
リンター npm run lint コードチェック(カスタム)

8. npx コマンド

(1) リモートパッケージを一時的に実行する

npx インストールされていないパッケージを直接実行できるため、システム全体への影響を防ぐことができます。

▶ 例:create-react-appを一時的に使用する場合

BASH
npx create-react-app my-app

(2) ローカルにインストールされたシステムでコマンドを実行する

npx はまずローカルで node_modules/.bin があるか確認し、次にグローバルで確認し、最後にリモートからダウンロードします。

▶ 例:ローカルツールの実行

BASH
npx jest

(3) 特定のバージョンを実行する

▶ 例:パッケージの特定のバージョンを使用する場合

BASH
npx express-generator@4 --view=ejs my-site

9. .npmrc の設定

(1) 設定ファイルの階層構造

.npmrc 優先順位の高い順に、プロジェクトレベル、ユーザーレベル、グローバルレベルの3つのレベルに対応しています。

▶ 例:プロジェクトレベルの .npmrc ファイルでミラーソースを設定する

INI
registry=https://registry.npmmirror.com

(2) 一般的な設定オプション

設定オプション 機能 値の例
レジストリ ダウンロード元を指定 https://registry.npmmirror.com
保存プレフィックス デフォルトのバージョンプレフィックス ^ または ~
プレフィックス グローバルインストールパス /usr/local
キャッシュ キャッシュディレクトリ ~/.npm

▶ 例:コマンドを使用した設定

BASH
npm config set registry https://registry.npmmirror.com
npm config get registry
npm config list

10. 「npm install」の実行プロセス

100%
flowchart TD
    A[npm install] --> B{Does it exist? package-lock.json?}
    B -- Yes --> C[Read lock The exact version in the document]
    B -- No --> D[Analysis package.json Version range in]
    D --> E[Search registry Get the latest compatible version]
    E --> F[Generate a dependency tree]
    C --> G[Download the package to the cache]
    F --> G
    G --> H[Write node_modules Table of Contents]
    H --> I[Update package-lock.json]
    I --> J[Installation Complete]

11. 包括的な例:プロジェクトの依存関係を一から設定する

以下の例では、アリスがプロジェクトをゼロから作成し、依存関係をインストールし、スクリプトを設定し、開発サーバーを起動するまでの全プロセスを示しています。

BASH
mkdir alice-server && cd alice-server
npm init -y
BASH
npm install express luxon
npm install jest nodemon --save-dev

package.json インストール後:

JSON
{
  "name": "alice-server",
  "version": "1.0.0",
  "description": "Alice's date-aware HTTP server",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js",
    "test": "jest"
  },
  "dependencies": {
    "express": "^4.18.2",
    "luxon": "^3.4.4"
  },
  "devDependencies": {
    "jest": "^29.7.0",
    "nodemon": "^3.0.2"
  },
  "license": "ISC"
}

エントリファイル index.js を作成します:

JAVASCRIPT
const express = require('express');
const { DateTime } = require('luxon');

const app = express();
const PORT = 3000;

app.get('/', (req, res) => {
  const now = DateTime.now().toISO();
  res.json({ message: 'Server is running', timestamp: now });
});

app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}`);
});

開発サーバーを起動します:

BASH
npm run dev
TEXT
[nodemon] starting node index.js
Server listening on port 3000

❓ よくある質問

Q package-lock.json を Git にコミットすべきですか?
A はい。これにより、正確なバージョンと整合性ハッシュが固定され、チーム全体および CI 環境において、インストール結果の一貫性が確保されます。
Q node_modules を Git にコミットすべきですか?
A いいえ。ファイルサイズが非常に大きいため、npm install を使って復元可能です。したがって、.gitignore に追加すべきです。
Q ^1.2.3 と ~1.2.3 の違いは何ですか?
A ^ はマイナーバージョンの更新(>=1.2.3 <2.0.0)を許可しますが、~ はパッチバージョンの更新のみ(>=1.2.3 <1.3.0)を許可します。
Q npxnpm exec の違いは何ですか?
A npm exec は npm v7 以降で提供されている同等のコマンドです。機能的には同じですが、npx の方が短く、下位互換性があります。
Q インストール済みのパッケージのバージョンを確認するにはどうすればよいですか?
A npm list を使用してローカルの依存関係ツリーを表示し、npm outdated を使用して更新可能なパッケージを確認してください。
Q npm install が EACCES 権限エラーで失敗した場合はどうすればよいですか?
A npm install の使用は避けてください。npm config set prefix を使用して、グローバルディレクトリをユーザーが書き込み可能なパスに設定することをお勧めします。
Q 「dependencies」にリストされているパッケージは、本番環境にインストールされますか?
A はい。npm install オプションでは、デフォルトで「dependencies」がインストールされます。「devDependencies」をスキップするには、--production オプションを使用する必要があります。

📖 まとめ


📝 練習問題

  1. npm init -y を実行してプロジェクトを作成し、package.json 内の名前、説明、スクリプトを手動で編集します。
  2. expressluxon を依存関係としてインストールし、jest を devDependency としてインストールした後、package.json の変更を確認してください。
  3. npm listnpm outdated をそれぞれ使用して、依存関係のステータスを確認します。
  4. .npmrc ファイルを作成し、レジストリを https://registry.npmmirror.com に設定してから、再インストールして確認してください。
  5. 「Hello from npm scripts」と出力するカスタムスクリプト hello を作成し、npm run hello を使用して実行してください。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%