パッケージのインストール
パッケージマネージャーの基本がわかったところで、実際にパッケージをインストールしてみましょう。
インストールに必要なもの
パッケージをインストールするには、プロジェクトにpackage.jsonファイルが必要です。package.jsonはプロジェクトのメタデータ(名前、バージョン、依存パッケージなど)を管理するファイルです。
まだpackage.jsonがない場合は、次のコマンドで作成できます。
shellnpm init -y
shellnpm init -y
-yオプションをつけると、すべての項目をデフォルト値で自動設定します。
package.jsonの詳細については、次のページを参照してください。
パッケージのインストール方法
基本のコマンド
パッケージをインストールするには、package.jsonが存在するディレクトリ(通常はプロジェクトのルートディレクトリ)でnpm installコマンドにパッケージ名を指定します。たとえば、バリデーションライブラリのzodをインストールするには、次のように実行します。
shellnpm install zod
shellnpm install zod
このコマンドを実行すると、次のことが自動的に行われます。
- パッケージレジストリ(npmjs.com)から
zodパッケージをダウンロードする - プロジェクトの
node_modulesディレクトリにファイルを配置する package.jsonのdependenciesにzodを追記するpackage-lock.jsonにインストールしたバージョンの詳細を記録する
開発用パッケージのインストール
テストツールやTypeScriptコンパイラなど、開発時にだけ必要なパッケージは-Dオプション(--save-devの省略形)をつけてインストールします。
shellnpm install -D typescript
shellnpm install -D typescript
-Dをつけるとpackage.jsonのdevDependenciesに記録されます。-Dなしの場合はdependenciesに記録されます。この2つの違いについて詳しくは、package.jsonのページを参照してください。
OSSのドキュメントなどでnpm install --save-devという表記を見かけることがあります。--save-devは-Dの省略前の正式名で、同じ意味です。
他のパッケージマネージャーでのコマンド
npm以外のパッケージマネージャーでも、同様の操作ができます。
| パッケージマネージャー | コマンド |
|---|---|
| npm | npm install zod |
| pnpm | pnpm add zod |
| Bun | bun add zod |
| Yarn | yarn add zod |
ローカルインストールとグローバルインストール
パッケージのインストールには、ローカルインストールとグローバルインストールの2種類があります。
ローカルインストールは、特定のプロジェクト内でのみパッケージを使えるようにするインストール方法です。npm installのデフォルトの動作で、プロジェクトのnode_modulesディレクトリにパッケージが配置されます。
shellnpm install zod
shellnpm install zod
グローバルインストールは、システム全体でパッケージを使えるようにするインストール方法です。-gオプションをつけます。コマンドラインツールとして使うパッケージ(typescriptのtscコマンドなど)をインストールする際に使うことがあります。
shellnpm install -g typescript
shellnpm install -g typescript
グローバルインストールは、プロジェクトごとのバージョン管理ができません。特別な理由がない限り、ローカルインストールを使うことをお勧めします。ローカルインストールしたコマンドラインツールは、次に説明するnpxコマンドで実行できます。
npxコマンド
npxは、npmに同梱されているコマンド実行ツールです。ローカルインストールしたパッケージのコマンドを直接実行できます。
たとえば、TypeScriptコンパイラをローカルインストールした場合、npxを使って実行します。
shellnpm install -D typescriptnpx tsc --version
shellnpm install -D typescriptnpx tsc --version
npxを使わない場合、./node_modules/.bin/tscのようにフルパスを指定する必要があります。npxはこの手間を省いてくれる便利なコマンドです。
また、npxはプロジェクトにインストールされていないパッケージを一時的にダウンロードして実行することもできます。プロジェクトの初期化コマンドなど、一度だけ実行したいツールに便利です。
shellnpx create-next-app my-app
shellnpx create-next-app my-app
他のパッケージマネージャーにも同様のコマンドがあります。
| パッケージマネージャー | コマンド |
|---|---|
| npm | npx tsc |
| pnpm | pnpm exec tsc |
| Bun | bunx tsc |
| Yarn | yarn tsc |
バージョン指定
パッケージをインストールするとき、特定のバージョンを指定できます。
shellnpm install zod@3.22.0
shellnpm install zod@3.22.0
@の後にバージョン番号を書くことで、そのバージョンをインストールします。バージョンを指定しない場合は、最新バージョンがインストールされます。
package.jsonには、バージョンの範囲を指定する記号が使われることがあります。
| 記号 | 意味 | 例 | 範囲 |
|---|---|---|---|
^ | マイナーバージョンまでのアップデートを許可 | ^3.22.0 | 3.22.0以上4.0.0未満 |
~ | パッチバージョンのアップデートのみ許可 | ~3.22.0 | 3.22.0以上3.23.0未満 |
* | すべてのバージョンを許可 | * | すべて |
npm installでパッケージをインストールすると、package.jsonに記録されるバージョンにはデフォルトで^(キャレット)が付きます。
セマンティックバージョニング
バージョン番号の付け方にはセマンティックバージョニング(Semantic Versioning、略してsemver)という業界標準のルールがあります。バージョン番号は「メジャー.マイナー.パッチ」の3つの数字で構成されます。
たとえば、バージョン3.22.4は次のように読みます。
- 3 ─ メジャーバージョン
- 22 ─ マイナーバージョン
- 4 ─ パッチバージョン
それぞれの数字が上がる条件は次のとおりです。
| バージョン | 上がる条件 | 例 |
|---|---|---|
| メジャー | 後方互換性のない変更(破壊的変更) | APIの削除や仕様変更 |
| マイナー | 後方互換性のある機能追加 | 新しい関数の追加 |
| パッチ | バグ修正 | 既存機能の不具合修正 |
このルールがあるおかげで、^3.22.0と指定すれば「メジャーバージョンが同じ範囲なら安全にアップデートできる」と判断できます。メジャーバージョンが変わるときだけ、破壊的変更がないか確認すればよいのです。
パッケージはどこからやってくるか? ─ パッケージレジストリ
npm installを実行すると、パッケージはパッケージレジストリからダウンロードされます。パッケージレジストリとは、パッケージを保管・配布するためのサービスです。
npmjs.com
npmjs.comは、npm公式のパッケージレジストリです。世界最大のJavaScriptパッケージレジストリで、200万以上のパッケージが公開されています。npm installコマンドは、デフォルトでこのレジストリからパッケージをダウンロードします。
パッケージを探すときは、npmjs.comのサイトでパッケージ名や機能を検索できます。パッケージの探し方について詳しくは、次のページを参照してください。
GitHub Packages
GitHub Packagesは、GitHubが提供するパッケージレジストリです。企業がプライベートなパッケージを社内に配布する用途で使われることが多いです。
その他のレジストリ
企業によっては、社内専用のプライベートレジストリを運用していることもあります。社内独自のパッケージを安全に配布するために使われます。
JavaScriptのパッケージレジストリには新しい動きもあります。jsr.ioは、Denoチームが開発しているパッケージレジストリです。TypeScriptをネイティブにサポートし、ESモジュール専用という特徴があります。まだ初期段階のサービスですが、TypeScript開発者にとって注目すべき動向です。
学びをシェアする
・npm installでパッケージを追加。-Dで開発用依存に記録
・ローカルインストールが基本。npxでCLIツールを実行可能
・semverは「メジャー.マイナー.パッチ」の3数字構成
・npmjs.comがデフォルトのパッケージレジストリ
『サバイバルTypeScript』より