npmとは
npmは、JavaScript開発の世界で基本的なツールであり、Node.jsパッケージマネージャーの略称です。最初はNode.jsライブラリの管理のために設計されましたが、JavaScriptプロジェクトを管理するための事実上の標準として進化しました。
npmは、パッケージのインストール、バージョン管理、依存関係の管理を支援するコマンドラインユーティリティとして機能し、JavaScriptパッケージが格納され共有されるリポジトリとしてオンラインデータベースとしても機能します。
npmを使用することで、コードの共有や再利用のプロセスが簡素化されます。再利用可能なコンポーネントを使用してプロジェクトをブロックのように組み立てることができ、これにより開発プロセスが大幅に加速し、生産性が向上します。
npmのインストール
npmはNode.jsと一緒に配布されているため、Node.jsをダウンロードしてインストールすると、自動的にコンピュータにnpmがインストールされます。
npmの動作
npmを使用してパッケージをインストールすると、レジストリと通信してデータベース内のパッケージを検索し、取得し、プロジェクトに保存します。これらのパッケージは、現在のプロジェクトの依存関係やその他のメタデータを追跡するためのマニフェストであるpackage.json
ファイルに保存されます。
node_modules
ディレクトリは、npmがプロジェクトの依存関係をインストールする場所です。npm install
を実行すると、このディレクトリが存在しない場合は自動的に作成され、パッケージがそこにインストールされます。
npm install [パッケージ名]
を実行すると、npmはnpmレジストリに接続し、パッケージを取得し、node_modules
フォルダに配置します。
一般的なnpmコマンド
npmには、パッケージ管理を支援する様々なコマンドが用意されています。この章では、日々の開発で使用するもっとも一般的で便利なコマンドのうちいくつかを説明します。
-
npm init
このコマンドは、プロジェクトディレクトリに新しいpackage.json
ファイルを作成するために使用されます。プロジェクト名、バージョン、説明などの情報を入力するように求められます。デフォルト値を使用して素早くpackage.json
ファイルを生成したい場合は、-y
または--yes
フラグを使用できます。(例:npm init -y
) -
npm install
(またはnpm i
)
これはおそらくもっとも頻繁に使用されるnpmコマンドです。パッケージをプロジェクトにインストールするために使用されます。パッケージ名をnpm install <パッケージ名>
のように指定できます。パッケージ名を指定せずにnpm install
を実行すると、package.json
ファイルにリストされた全ての依存関係がインストールされます。 -
npm uninstall
このコマンドは、プロジェクトからパッケージを削除します。また、package.json
とpackage-lock.json
ファイルを更新します。(使用法:npm uninstall <パッケージ名>
) -
npm update
このコマンドは、package.json
ファイルで定義されたセマンティックバージョニング範囲に従って、パッケージを最新バージョンに更新します。特定のパッケージを更新する場合は、パッケージ名を指定できます。(npm update <パッケージ名>
) -
npm list
このコマンドは、プロジェクトの依存関係ツリーを表示し、全てのインストールされたパッケージとそのバージョンを表示します。特定のパッケージの依存関係を表示するには、npm list <パッケージ名>
を使用します。 -
npm run
このコマンドは、package.json
ファイルで定義されたスクリプトを実行するために使用されます。例えば、package.json
ファイルに"test" という名前のスクリプトがある場合、npm run test
で実行できます。 -
npm publish
自分でパッケージを作成し、共有したい場合は、npm publish
を使用してパッケージをnpmレジストリに公開できます。 -
npm version
このコマンドは、セマンティックバージョニングルールに従ってパッケージのバージョンを更新するのに役立ちます。npm version patch
を使用してパッチバージョンを増やし、マイナーバージョンの場合はnpm version minor
、メジャーバージョンの場合はnpm version major
を使用できます。
package.json および package-lock.json
この章では、npmベースのプロジェクトで重要な2つのファイル、package.json
およびpackage-lock.json
について説明します。これらのファイルは、プロジェクトを定義し、その依存関係を管理するために重要な役割を果たします。
package.json
package.json
ファイルは、プロジェクトに関するメタデータを含むマニフェストファイルです。これはアプリケーションのロードマップであり、プロジェクト名、バージョン、説明、著者、ライセンスなどの情報が含まれます。また、プロジェクトの依存関係もリストされており、誰でも単一のnpm install
コマンドで必要な全てのパッケージをインストールできます。
以下は、package.json
ファイルの簡略化された例です。
{
"name": "my-awesome-project",
"version": "1.0.0",
"description": "This is my awesome project",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Your Name",
"license": "ISC",
"dependencies": {
"express": "^4.17.1"
}
}
この例では、scripts
セクションでnpm run
コマンドで実行できるタスクを定義しています。dependencies
セクションでは、プロジェクトが実行するために必要な全てのパッケージがリストされています。この場合、プロジェクトには1つの依存関係、express
パッケージがあります。
package-lock.json
package-lock.json
ファイルは、npmがnode_modules
ツリーまたはpackage.json
ファイルを変更する操作の場合に自動的に生成されます。生成された正確なツリーを記述し、その後のインストールが中間の依存関係の更新に関係なく同一のツリーを生成できるようにします。
package-lock.json
ファイルは、プロジェクトの依存関係が全ての環境で同じままであることを確認するために重要です。全てのプロジェクトの依存関係とその正確なバージョン、その依存関係のバージョンなどがリストされています。
package.json
ファイルは手動で編集できますが、package-lock.json
ファイルを直接編集してはいけません。npmによって常に生成および更新する必要があります。