npm・npmを知る

npmってなに?——npm installは何をしている?

チュートリアルに突然出てくる「npm install」。npmはプログラム部品の宅配サービスです。installが何をしているのか、巨大なnode_modulesの正体、消していい理由まで一気に解説します。

Web制作の次の一歩に進むと、チュートリアルに突然npm installという呪文が出てきます。npmは「プログラム部品の宅配サービス」。この記事では、npmが何者で、npm installの瞬間に何が起きているのかを解きほぐします。

npm=部品を取り寄せる宅配サービス

世界中の開発者が、便利なプログラムをパッケージという部品の形で公開しています。日付をきれいに表示する部品、スライドショーを作る部品、サイトの土台まるごと(AstroやReact)——その数200万個以上。

npm(Node Package Manager)は、この部品をコマンド1つで取り寄せて管理する仕組みです。Node.jsをインストールすると、npmも一緒に付いてきます。

npm公式サイトのトップページ。大きな検索窓と「Build amazing things」の見出しが表示されている
部品倉庫の入り口、npm公式サイト。この検索窓から世界中のパッケージを探せます。

npm installがやっていること

プロジェクトのフォルダでnpm installを実行すると、次の3つが起こります。

  1. package.jsonを読む——「このプロジェクトに必要な部品リスト」が書いてあるファイル
  2. 部品をダウンロード——リストの部品と、その部品が必要とする部品(依存の依存)もまとめて取り寄せる
  3. node_modulesフォルダに並べる——取り寄せた部品の置き場所

たとえるなら、package.json買い物リストnpm install注文ボタンnode_modules届いた段ボールの山です。

npm install        # package.jsonのリストを全部取り寄せる
npm install astro  # astroという部品を追加で取り寄せる(リストにも追記される)
npmpackage.jsonの読み方買い物リストの中身——package.jsonの読み方はこちら

node_modulesはなぜあんなに巨大なの?

node_modulesを開くと、入れた覚えのないフォルダが何百と並んでいて驚きます。これは部品が部品を必要とする連鎖のせいです。あなたが頼んだのは1個でも、その部品が10個の部品に頼り、その10個がさらに——と芋づる式に増えていきます。

でも、こわがらなくて大丈夫。node_modulesの中身を自分で触ることはありません。段ボールの山は、開けずに置いておくものです。

よく見るnpmコマンド早見表

コマンド意味
npm installpackage.jsonの部品を全部取り寄せる
npm install <名前>部品を追加で入れる(リストにも追記)
npm uninstall <名前>部品を外す
npm run devpackage.jsonに書かれたdevという作業を実行(開発サーバー起動が定番)
npm -vnpm自体のバージョンを表示(動作確認に)
npx <名前>インストールせずに、その場だけそのパッケージを実行

チュートリアルでnpm run devと出てきたら、「このプロジェクトに用意されたdevという名前の作業を実行して」という意味です。中身はpackage.jsonのscripts欄に書いてあります。

表の最後のnpxは、部品を手元に残さずその場かぎりで試すコマンドです。「1回だけ使いたい」というときに便利で、npm iの打ちまちがいではありません。

便利さの裏の注意点もセットで

npmは「知らない誰かの部品を自分のPCに入れて動かす」仕組みでもあります。パッケージは審査を通った企業だけが置けるのではなく、世界中の誰でも公開できるのがnpmの自由さです。ほとんどの部品は善意で公開されていますが、まれに悪意ある部品がまぎれこむ事件も起きています。部品を入れるときの安全な習慣を、あわせて知っておきましょう。

npmnpmの怖い話——Shai-Hulud事件から学ぶ身の守り方実際に起きたShai-Hulud事件と、初心者ができる対策はこちら

このレッスンのまとめ

  1. npm=プログラム部品(パッケージ)の宅配サービス。Node.jsと一緒に付いてくる
  2. npm installpackage.jsonの買い物リストを読んで、node_modulesに部品を並べる操作
  3. node_modulesは触らない・消してOK・Gitに入れない——いつでもnpm installで復元できる

npm installの意味が分かれば、世の中のチュートリアルの最初の壁はもう越えています。

よくある質問

npmとは何ですか?
JavaScriptのパッケージ(世界中の開発者が作った、再利用できるプログラム部品)を、コマンド1つで取り寄せて管理できる仕組みです。Node.jsをインストールすると一緒に付いてきます。
npm installは何をしているのですか?
package.jsonに書かれた「必要な部品リスト」を読み、その部品(と、部品が必要とする部品)をインターネットからダウンロードして、node_modulesフォルダに並べています。
node_modulesフォルダは削除してもいいですか?
大丈夫です。package.jsonとpackage-lock.jsonが残っていれば、npm installを実行するだけで同じ内容を復元できます。だからnode_modulesはGitにも登録しません。
npmとnpxの違いは何ですか?
npmはパッケージを手元にインストールして使う道具、npxはインストールせずにその場だけ実行する道具です。「1回試したいだけ」のときはnpxが便利です。