当サイトはアフィリエイト広告を使用しています

npmを使う為の基礎知識とよく使う基本のコマンド一覧

使い始めの頃感じていた疑問や、よく使うコマンドを纏めてみました

WEB制作の学習やアプリ開発を進める中で、初めてnpmに触れる時、直感的にわかりづらいこととても多いと思います。

私がnpmに触れた時にいろいろ疑問に思ったことをまとめます。

パッケージの検索はどうやる?

npmjsでnpmで公開されているパッケージを検索することができます。

package.jsonって何?

npmパッケージの設定等を記述するJSON形式のファイルです。

パッケージを作成してnpmjsに公開するのであればしっかり設定する必要がありますが、WEB制作・アプリ開発等でライブラリを使用するだけであれば、とりあえずは次に紹介するキーの設定方法さえ押さえておけばOKです!

dependencies

制作物に含めるパッケージを記述します。

WEB制作の場合はほとんど利用することはないと思いますが、アプリ開発の場合、ライブラリとして使用するものを記述します。

記述するといっても、

> npm install パッケージ

とするだけで、該当プロジェクトのpackage.json

{
  ...
  "dependencies": {
    "パッケージ": "^1.0.0"  }
  ...
}

と自動で更新されます。

これにより、このプロジェクトが依存するパッケージを示すことになります。

devDependencies

制作物には含めないが、開発中に使用するパッケージを記述します。

WEB制作で使用するパッケージはほとんどここに記述することになります。

パッケージをインストールするとき、

> npm install --save-dev パッケージ

とすると、該当プロジェクトのpackage.jsonが次のように更新されます。

{
  ...
  "devDependencies": {
    "パッケージ": "^1.0.0"  }
  ...
}

peerDependencies

通常あまり気にすることはありませんが、プラグインモジュール等、他のパッケージありきで、プラグインとして使用される前提のようなパッケージにおいて、peerDependenciesに相方となるパッケージを指定します。

アプリ開発してる時、パッケージを探してたらたまーにこのキーワードに出くわします。

依存パッケージのバージョン?

インストールしてdependencies等に記述されたパッケージの値としてバージョンコードのような数字の羅列があります。

{
  "devDependencies": {
    "sass": "^1.64.1"    ...
  },
  ...
}

これはインストールされているパッケージのバージョンを示しているものではなく、パッケージを更新する際に受け入れることの出来るバージョン範囲を示しています。

この項目の説明の前にまずはバージョニングについてです。パッケージのバージョンは大体1.2.3のような数字で構成されていますが、これはそれぞれ、

メジャーバージョン.マイナーバージョン.パッチバージョン

という風になっています。

パッケージを開発する側は、アップデートの際に

  • 軽微なバグの修正等はパッチバージョンをインクリメント
  • 下位互換性のある新機能追加等はマイナーバージョンをインクリメント(パッチは0へ)
  • 下位互換性のないアップデートはメジャーバージョンをインクリメント(マイナー・パッチは0へ)

という風にバージョニングします。

対して、先のdependencies等のインストールしたパッケージに対する値にはバージョンコードの頭に^(キャレット)が付いています。

{
  "devDependencies": {
    "sass": "^1.64.1"    ...
  },
  ...
}

上の例ではメジャーバージョン1は固定で、マイナー・パッチのアップデートは許容する意味合いになります。

公開されているパッケージは日々細かなバグの修正や機能の追加などが行われており、後述するnpm updateなどで更新を反映することができます。

しかし、パッケージ更新で、下位互換性のない更新を受け入れてしまったりした場合、それまで使えていたコードやコマンドが使用不可になってしまう可能性があります。

このような事態を防ぐために受け入れる事の出来るバージョン範囲を設定しており、多くはメジャーバージョンのアップデートを除く全てのような指定となっています。

バージョン範囲を表す構文としては主に次のものがあります。

構文説明
^A.B.C一番左のゼロ以外のバージョンを固定し、変更を許可します
~A.B.Cマイナーバージョンの指定がある場合はパッチの更新を許可し、マイナーの指定がない場合はマイナーまでの更新を許可します。
A.B.XXx*を使用して、任意の数値を受け入れます
<A.B.C<<=>>==を使用してバージョンの範囲を指定します

例として次のようになります。

  • ^1.2.31.2.3から2.0.0未満まで
  • ^0.1.20.1.2から0.2.0未満まで
  • ~1.2.31.2.3から1.3.0未満まで
  • ~1.21.2.3から1.3.0未満まで
  • ~11.0.0から2.0.0未満まで
  • 1.2.x1.2.0から1.3.0未満まで
  • 1.x1.0.0から2.0.0未満まで
  • <1.2.31.2.3未満
  • >=1.2.31.2.3以上

package-lock.jsonって何?

package.jsonに記述されているものは依存するパッケージと、受け入れ可能なバージョンでしたか、こちらのファイルに記述されているものは、実際にインストールされている全てのパッケージのバージョンが記載されています。

通常は直接編集することはありません。

プロジェクトのルートでnpm installすると、package.jsonの受け入れ可能なバージョンに従い最新のものをインストールしますが、npm ciとすると、一旦node_modulesフォルダを削除してから、package-lock.jsonのバージョン情報に基づきインストールをします。

これはGitクローンするなどした後で、インストールされいてるパッケージを完全再現する際に便利です。

node_modulesって何?

インストールしたパッケージが入っているフォルダです。

通常は直接編集することはありません。

npm コマンド

npmコマンドは色々ありますが、特によく使うものについてピックアップします。

初期化

initで対話形式でpackage.jsonを作成します。

> npm init

対話が面倒くさい時は-yesまたは-yオプションで全てデフォルト設定でpackage.jsonを作成できます。

> npm init -yes
> npm init -y

パッケージのインストール

package.jsonに記述されているdependenciesdevDependencies等に記載されている依存関係をローカルインストールしたい場合はinstallを実行します。省略形としてiでもOK。

但し、このインストールを実行すると、package.jsonの受け入れ可能なバージョンの最新版をインストールしするので、package-lock.jsonが更新されてしまうことがあります。(基本的にはそこまで問題にはならないはずです)

> npm install
> npm i

package-lock.jsonを元にローカルインストールしたい場合はciを実行します。

> npm ci

パッケージを指定してローカルインストールしたい場合はinstall パッケージ名とする。これを実行すると、自動的にpackage.jsondependenciesに記載されます。また、該当のパッケージが依存するパッケージもインストールされます。

> npm install パッケージ名

package.jsondevDependenciesに記載してローカルインストールしたい場合は--save-devオプションを追加します。省略形として-DでもOK。

WEB制作で使用するパッケージは、開発時に使うものがほとんどなので、大体このオプションを付けてインストールすることになります。

> npm install --save-dev パッケージ名
> npm install -D パッケージ名

グローバルインストールしたい場合は--globalオプションを追加する。省略形として-gでもOK。

> npm install --global パッケージ名
> npm install -g パッケージ名

パッケージのアンインストール

ローカルインストールされたパッケージを削除したいときはuninstallを実行します。その他、unremover等でもOK。

> npm uninstall パッケージ名
> npm un パッケージ名
> npm remove パッケージ名
> npm r パッケージ名

パッケージの削除を実行すると、package.jsondependenciesや、devDependenciesの記述や、package-lock.jsonの記述も削除されます。もしpackage.json等から削除したくない場合は--no-saveオプションを追加します。

> npm uninstall --no-save パッケージ名

グローバルインストールされたパッケージを削除したい場合は--globalオプションを追加します。

> npm uninstall --global パッケージ名

インストールされているパッケージ一覧

プロジェクトにローカルインストールされているパッケージを確認したい場合はlsを実行します。

> npm ls

次のような感じでコンソールに出力されます。

env@1.0.0 C:\Users\katsu\Desktop\env
+-- autoprefixer@10.4.15
+-- browser-sync@2.29.3
+-- chokidar-cli@3.0.0
+-- htmlhint@1.1.4
+-- imagemin-giflossy@5.1.10
+-- imagemin-gifsicle@7.0.0
+-- imagemin-jpegtran@7.0.0
+-- imagemin-keep-folder@5.3.2
+-- imagemin-pngquant@9.0.2
+-- imagemin-svgo@10.0.1
+-- imagemin-webp@8.0.0
+-- postcss-cli@10.1.0
+-- postcss@8.4.29
+-- pug-cli@1.0.0-alpha6 (git+ssh://git@github.com/pugjs/pug-cli.git#0eb8d37c5a38cb297cf09361631b93312e0dfa21)
+-- rimraf@5.0.1
`-- sass@1.64.1

インストールされているパッケージ依存しているパッケージを全て確認したい場合は--allオプションを追加します。

> npm ls --all

次のように出力されます。インストールしているパッケージによってはかなり長くなります。

env@1.0.0 C:\Users\katsu\Desktop\env
+-- autoprefixer@10.4.15
| +-- browserslist@4.21.10
| | +-- caniuse-lite@1.0.30001525 deduped
| | +-- electron-to-chromium@1.4.508
| | +-- node-releases@2.0.13
| | `-- update-browserslist-db@1.0.11
| |   +-- browserslist@4.21.10 deduped
| |   +-- escalade@3.1.1 deduped
| |   `-- picocolors@1.0.0 deduped
| +-- caniuse-lite@1.0.30001525
| +-- fraction.js@4.3.5
| +-- normalize-range@0.1.2
| +-- picocolors@1.0.0
| +-- postcss-value-parser@4.2.0
| `-- postcss@8.4.29 deduped
.
.
.

ls パッケージ名とすろと、指定したパッケージに依存するパッケージ一覧が出力されます。

> npm ls chokidar
env@1.0.0 C:\Users\katsu\Desktop\env
+-- browser-sync@2.29.3
| `-- chokidar@3.5.3
+-- chokidar-cli@3.0.0
| `-- chokidar@3.5.3 deduped
+-- postcss-cli@10.1.0
| `-- chokidar@3.5.3 deduped
`-- sass@1.64.1
  `-- chokidar@3.5.3 deduped

グローバルインストールされているパッケージを確認したい場合は--globalオプションを追加します。

> npm ls --global

インストールされているパッケージの最新版の確認

ローカルにインストールされたパッケージの更新の必要があるか調べたいときは、outdatedを実行します。

> npm outdated

次のようにコンソールに出力されます。

Package  Current  Wanted  Latest  Location           Depended by
sass      1.64.1  1.67.0  1.67.0  node_modules/sass  env

Currentが現在インストールされているバージョン、Wantedpackage.jsonで指定された受け入れ可能な最新バージョン、Latestが公開されている最新バージョンになります。

グローバルにインストールされたパッケージの更新の必要があるか調べたいときは、--globalオプションを追加します。

> npm outdated --global

インストールされているパッケージの更新

公開されているパッケージは日々細かなバグの修正や機能の追加などが行われています。インストールされているパッケージを更新し、それらを反映することができます。

ローカルインストールされているパッケージを全て更新したい場合はupdateを実行します。省略形としてupupgradeでもOK。

更新されるバージョンは先述のpackage.jsonに記載されている受け入れ可能なバージョン情報に従います。

> npm update
> npm up
> npm upgrade

ローカルインストールされているパッケージを単体で指定して更新したい場合はパッケージ名を指定します。

> npm update パッケージ名

グローバルにインストールされたパッケージを更新したい時は、--glolbalオプションを追加します

> npm update --global パッケージ名

パッケージが全て最新版に更新されるていると、outdatedを実行しても何も出力されません。

脆弱性の確認

インストールされているパッケージに脆弱性がないか調べたいときはauditを実行します。

> npm audit

問題が見つかると次のようにコンソールに出力されます。lowからcriticalに行くほど重大度が大きくなります。

...
39 vulnerabilities (1 low, 13 moderate, 19 high, 6 critical)

To address issues that do not require attention, run:
  npm audit fix

To address all issues possible (including breaking changes), run:
  npm audit fix --force

Some issues need review, and may require choosing
a different dependency.

詳細は省略しますが、要は問題が見つからない状態であればOKです。

問題を修正するにはaudit fixを実行すると、互換性のある更新を行ってくれます。

> npm audit fix

まとめ

コマンドについては、一度環境構築してしまうとあまり使う機会が多くないのでどうしても忘れがちです。

忘れてしまったときはまた見に来てください(笑)