メインコンテンツまでスキップ

パッケージマネージャー

パッケージを手動で管理するのは大変です。たとえば、あるパッケージをプロジェクトに導入しようとしたとき、次のような作業が必要になります。

  • パッケージのファイルをダウンロードする
  • そのパッケージが依存する別のパッケージもダウンロードする
  • バージョンの整合性を確認する
  • アップデートがあれば手動で更新する

パッケージが数個ならまだしも、実際のプロジェクトでは数十から数百のパッケージを使うことも珍しくありません。これを手作業で管理するのは現実的ではありません。

この面倒な作業を自動化してくれるのがパッケージマネージャーです。パッケージマネージャーを使えば、コマンドひとつでパッケージのインストール、更新、削除ができます。

npm

npmは、Node.jsに同梱されているデフォルトのパッケージマネージャーです。Node.jsをインストールすれば、すぐに使えます。

shell
npm install zod
shell
npm install zod

npmはもっとも広く使われているパッケージマネージャーです。名前から「Node Package Manager」の略だと思われがちですが、公式には何かの略称ではないとされています。フロントエンド開発でも広く使われており、ブラウザ向けのReactやVueといったパッケージも、npmでインストールするのが一般的です。

本書では、npmを基本のパッケージマネージャーとして説明します。

npm以外のパッケージマネージャー

npmのほかにも、いくつかのパッケージマネージャーがあります。それぞれに特徴がありますが、基本的な使い方は似ています。

pnpm

pnpmは、ディスク効率の良さが特徴のパッケージマネージャーです。

npmでは、プロジェクトごとにパッケージのファイルがコピーされます。同じパッケージを10個のプロジェクトで使えば、10個分のディスク容量を消費します。pnpmは同じパッケージファイルをシステム内の1箇所に保存し、各プロジェクトからリンクする仕組みを使います。これにより、ディスク使用量を大幅に削減できます。

また、pnpmは依存関係の管理が厳密です。npmではpackage.jsonに書いていないパッケージでもimportできてしまう問題(ファントム依存)がありますが、pnpmではこれをデフォルトで防止します。詳しくはnode_modulesのホイスティングとファントム依存で説明しています。

shell
pnpm add zod
shell
pnpm add zod

Bun

Bunは、パッケージのインストールが非常に高速なことが特徴です。JavaScriptのランタイム(実行環境)、バンドラー(複数のファイルをまとめるツール)、テストランナーなどの機能もひとつのツールに統合されたオールインワンのツールキットです。Node.jsとの互換性も高く、多くのnpmパッケージをそのまま利用できます。

また、Bunはディスク効率にも優れています。macOSではclonefile、Linuxではハードリンクを使い、同じパッケージファイルをプロジェクト間で共有することで、ディスク使用量を削減します。

shell
bun add zod
shell
bun add zod

Yarn

Yarnは、Meta(旧Facebook)が開発したパッケージマネージャーです。npmの速度や安定性の課題を解決するために作られました。現在のYarn(v2以降、Berry)ではPlug'n'Play(PnP)という仕組みがデフォルトで有効になっており、node_modulesディレクトリを作らずにパッケージを管理します。ただし、PnPに対応していないパッケージもあるため、設定で従来のnode_modules方式に切り替えて使うプロジェクトも多くあります。

shell
yarn add zod
shell
yarn add zod

比較表

各パッケージマネージャーの特徴を簡単にまとめます。

特徴npmpnpmBunYarn
インストール速度標準速い非常に速い速い
ディスク効率低い(コピー)高い(リンク)高い(リンク)中〜高(PnP)
ファントム依存の防止なしデフォルトON設定で可能設定で可能
Node.js同梱ありなしなしなし

速度やディスク効率に違いはありますが、どのパッケージマネージャーもnpmjs.comの同じパッケージをインストールできます。基本的な使い方は共通しています。

本書でのパッケージマネージャーの扱い

本書では基本的にnpmのコマンドで説明しますが、必要に応じて他のパッケージマネージャーのコマンドも併記します。どのパッケージマネージャーを選んでも、パッケージ管理の基本的な考え方は同じです。

コラム: パッケージマネージャーの選び方

初めてTypeScript/JavaScript開発をはじめる方は、まずnpmを使うのが無難です。Node.jsに同梱されているため追加のインストールが不要で、情報量ももっとも多いためです。

npmがもっとも広く使われていますが、pnpmもここ数年でシェアを伸ばしています。チームやプロジェクトによってはpnpmやBunを採用しているケースもあるので、参加するプロジェクトに合わせて選ぶとよいでしょう。

チーム開発では、パッケージマネージャーを統一することが重要です。メンバーごとに異なるパッケージマネージャーを使うと、ロックファイルの競合が発生し、依存関係の不整合が起きる原因になります。チームで1つのパッケージマネージャーに揃えましょう。

コラム: corepack

Node.jsには、pnpmやYarnのバージョンを自動管理するcorepackというツールが実験的に同梱されていました。package.jsonpackageManagerフィールドに基づいて、適切なバージョンのパッケージマネージャーを自動でダウンロード・使用する仕組みです。しかし、corepackは一度も安定版(stable)にならないまま、Node.js v25(2025年10月リリース)で同梱が終了しました。

現在、pnpmやYarnを使うにはそれぞれ個別にインストールします。pnpmはv10以降、package.jsonpackageManagerフィールドを読み取ってバージョンを自動管理する機能を備えています。

学びをシェアする

・パッケージマネージャーはインストール・更新・削除を自動化するツール
・npmはNode.js同梱でもっとも広く使われている
・pnpmはディスク効率と厳密な依存管理、Bunは高速さが特徴
・どれも同じパッケージを利用でき、チーム内では統一が重要

『サバイバルTypeScript』より

この内容をXにポストする