情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

NPMを使用する(1)基本概念

2016/09/28

NPMとは

NPMとはNode.jsのためのパッケージマネージャです。

NPMは主にパッケージを管理するためのツールであるNPMクライアントとパッケージを公開するためのNPMレジストリから成ります。

NPMクライアントはNode.jsのインストーラに同梱されており、Node.jsをインストールする際に併せてインストールされます。

正しくインストールされている場合、コマンドプロンプトでnpmコマンドを実行すれば起動することができます。

パッケージとは

Node.jsにおいてパッケージとは1つのアプリケーションかライブラリを組成するものです。

パッケージのコードやデータは全て1つのフォルダに格納され、フォルダにpackage.jsonという名称のJSONファイルを配置することによってフォルダがパッケージであることを示します。

また、パッケージは別の0個以上のパッケージに依存することができます。

package.jsonにはパッケージの名称やパッケージが依存する別の0個以上のパッケージなど、パッケージに関する情報を記述します。

パブリックパッケージとプライベートパッケージ

NPMレジストリに登録したパッケージは基本的には公開されます。このような、公開されるパッケージのことをパブリックパッケージと言います。

一方で、NPMレジストリに登録したパッケージが公開されないようにすることもできます。このような、公開されないパッケージをプライベートパッケージと言います。

ただし、NPMレジストリへのプライベートパッケージの登録は有料となっていますので注意してください。

パブリックパッケージの登録は無料です。

ローカルパッケージとグローバルパッケージ

ローカルに作成又はインストールされたパッケージをローカルパッケージと言い、グローバルにインストールされたパッケージをグローバルパッケージと言います。

グローバルパッケージはどのフォルダからでも利用することができます。

しかし、グローバルパッケージはpackage.json内に依存パッケージとして記述されることはなく(つまり、package.jsonにおける依存パッケージとはローカルな依存パッケージです)、パッケージがグローバルパッケージに依存する場合、その依存は暗黙的な依存となってしまいます。

そのため、グローバルパッケージは極力利用するべきではありません

パッケージのバージョン

パッケージにはバージョンを付与しなければなりません。パッケージにバージョンを付与する場合には下のようにするべきです。

  • バージョンは3つの0以上の整数を.で連結したものとします。たとえば、1.0.33.10.5などです。
  • 1番目の整数はメジャーバージョンとし、後方互換性のない修正や機能追加を行った場合に1増加させます。
  • 2番目の整数はマイナーバージョンとし、後方互換性のある機能追加を行った場合に1増加させます。
  • 3番目の整数はパッチバージョンとし、後方互換性のある修正を行った場合に1増加させます。

これにより、メジャーバージョンが同じ場合には後方互換性を保ったままでバージョンアップすることができることが分かります。

なお、パッケージを最初に公開する際にはバージョンを1.0.0とするべきです。

バージョンの表記

パッケージの様々なバージョンを表記する際には下のような表記を用います。ただし、下のバージョン表記を用いてバージョンを指定する場合にはバージョン表記を"で囲む必要があります

  • >・・・>の後にバージョンを指定することでそのバージョンより新しいバージョンを表します。たとえば、>2.0.02.0.0より新しいバージョンを表します。
  • >=・・・>=の後にバージョンを指定することでそのバージョン以降のバージョンを表します。たとえば、>=2.0.02.0.0以降のバージョンを表します。
  • <・・・<の後にバージョンを指定することでそのバージョンより古いバージョンを表します。たとえば、<2.0.02.0.0より古いバージョンを表します。
  • <=・・・<=の後にバージョンを指定することでそのバージョン以前のバージョンを表します。たとえば、<=2.0.02.0.0以前のバージョンを表します。
  • ~・・・~の後にバージョンを指定することで最新のパッチバージョン(メジャーバージョンとマイナーバージョンが同じものの中でパッチバージョンが最大のもの)を表します。たとえば、~2.0.0はメジャーバージョンが2であり、マイナーバージョンが0であるバージョンの中でパッチバージョンが最大のものを表します。
  • ^・・・^の後にバージョンを指定することで最新のマイナーバージョン(メジャーバージョンが同じものの中でマイナーバージョンとパッチバージョンが最大のもの)を表します。たとえば、^2.0.0はメジャーバージョンが2であるバージョンの中でマイナーバージョンとパッチバージョンが最大のものを表します。
  • x・・・バージョンのパッチバージョンの部分をxとすることで最新のパッチバージョンを表し、マイナーバージョンの部分をxとすることで最新のマイナーバージョンを表します。たとえば、2.0.x~2.0.0と同じであり、2.x.02.x.5などは^2.0.0と同じです。
  • *・・・*は全てのバージョンを表します。
  • `・・・2つのバージョン表記を空白で繋ぐことで2つのバージョン表記の論理積を表します。たとえば、>=2.0.0 <3.0.02.0.0以降の3.0.0`より古いバージョンを表します。
  • -・・・2つのバージョン表記を-で繋ぐことで2つのバージョン表記の範囲を表します。たとえば、2.0.0 - 3.0.0>= 2.0.0 <=3.0.0と同じです。
  • ||・・・2つのバージョン表記を||で繋ぐことで2つのバージョン表記の論理和を表します。たとえば、<2.0.0 || >=3.0.02.0.0より古いか3.0.0以降のバージョンを表します。

NPMクライアントのバージョン

NPMクライアントのバージョンを確認するにはnpm -vコマンドを実行します。

C:\work\node>npm -v
3.8.9

NPMクライアントの更新

NPMクライアントを更新するにはnpm install npm -gコマンドを実行します。

C:\work\node>npm -v
3.8.9

C:\work\node>npm install npm -g
C:\Users\pizyumi\AppData\Roaming\npm\npm -> C:\Users\pizyumi\AppData\Roaming\npm\node_modules\npm\bin\npm-cli.js
C:\Users\pizyumi\AppData\Roaming\npm
+-- abbrev@1.0.9
+-- aproba@1.0.4
+-- fstream@1.0.10
+-- glob@7.0.5
| +-- fs.realpath@1.0.0
| +-- minimatch@3.0.2
| | `-- brace-expansion@1.1.5
| |   +-- balanced-match@0.4.1
| |   `-- concat-map@0.0.1
| `-- path-is-absolute@1.0.0
+-- has-unicode@2.0.1
+-- node-gyp@3.4.0
| +-- minimatch@3.0.2
| | `-- brace-expansion@1.1.5
| |   +-- balanced-match@0.4.1
| |   `-- concat-map@0.0.1
| `-- path-array@1.0.1
|   `-- array-index@1.0.0
|     +-- debug@2.2.0
|     | `-- ms@0.7.1
|     `-- es6-symbol@3.1.0
|       +-- d@0.1.1
|       `-- es5-ext@0.10.12
|         `-- es6-iterator@2.0.0
+-- npm@3.10.6
| +-- ansi-regex@2.0.0
| +-- ansicolors@0.3.2
| +-- ansistyles@0.1.3
| +-- archy@1.0.0
| +-- asap@2.0.4
| +-- chownr@1.0.1
| +-- cmd-shim@2.0.2
| +-- columnify@1.5.4
| | `-- wcwidth@1.0.0
| |   `-- defaults@1.0.3
| |     `-- clone@1.0.2
| +-- config-chain@1.1.10
| | `-- proto-list@1.2.4
| +-- debuglog@1.0.1
| +-- dezalgo@1.0.3
| +-- editor@1.0.0
| +-- fs-vacuum@1.2.9
| +-- fs-write-stream-atomic@1.0.8
| +-- fstream-npm@1.1.0
| | `-- fstream-ignore@1.0.5
| |   `-- minimatch@3.0.0
| |     `-- brace-expansion@1.1.4
| |       +-- balanced-match@0.4.1
| |       `-- concat-map@0.0.1
| +-- graceful-fs@4.1.4
| +-- hosted-git-info@2.1.5
| +-- iferr@0.1.5
| +-- imurmurhash@0.1.4
| +-- inflight@1.0.5
| +-- inherits@2.0.1
| +-- ini@1.3.4
| +-- init-package-json@1.9.4
| | +-- glob@6.0.4
| | | +-- minimatch@3.0.0
| | | | `-- brace-expansion@1.1.4
| | | |   +-- balanced-match@0.4.1
| | | |   `-- concat-map@0.0.1
| | | `-- path-is-absolute@1.0.0
| | `-- promzard@0.3.0
| +-- lockfile@1.0.1
| +-- lodash._baseindexof@3.1.0
| +-- lodash._baseuniq@4.6.0
| | +-- lodash._createset@4.0.3
| | `-- lodash._root@3.0.1
| +-- lodash._bindcallback@3.0.1
| +-- lodash._cacheindexof@3.0.2
| +-- lodash._createcache@3.1.2
| +-- lodash._getnative@3.9.1
| +-- lodash.clonedeep@4.3.2
| | `-- lodash._baseclone@4.5.3
| +-- lodash.restparam@3.6.1
| +-- lodash.union@4.4.0
| | +-- lodash._baseflatten@4.2.1
| | `-- lodash.rest@4.0.3
| +-- lodash.uniq@4.3.0
| +-- lodash.without@4.2.0
| | +-- lodash._basedifference@4.5.0
| | | `-- lodash._root@3.0.1
| | `-- lodash.rest@4.0.3
| +-- mkdirp@0.5.1
| | `-- minimist@0.0.8
| +-- nopt@3.0.6
| +-- normalize-git-url@3.0.2
| +-- normalize-package-data@2.3.5
| | `-- is-builtin-module@1.0.0
| |   `-- builtin-modules@1.1.1
| +-- npm-cache-filename@1.0.2
| +-- npm-install-checks@3.0.0
| +-- npm-registry-client@7.1.2
| | +-- concat-stream@1.5.1
| | | +-- readable-stream@2.0.6
| | | | +-- core-util-is@1.0.2
| | | | +-- isarray@1.0.0
| | | | +-- process-nextick-args@1.0.7
| | | | +-- string_decoder@0.10.31
| | | | `-- util-deprecate@1.0.2
| | | `-- typedarray@0.0.6
| | `-- retry@0.8.0
| +-- npmlog@3.1.2
| | +-- are-we-there-yet@1.1.2
| | | `-- delegates@1.0.0
| | +-- console-control-strings@1.1.0
| | +-- gauge@2.6.0
| | | +-- has-color@0.1.7
| | | +-- object-assign@4.1.0
| | | +-- signal-exit@3.0.0
| | | +-- string-width@1.0.1
| | | | +-- code-point-at@1.0.0
| | | | | `-- number-is-nan@1.0.0
| | | | `-- is-fullwidth-code-point@1.0.0
| | | |   `-- number-is-nan@1.0.0
| | | `-- wide-align@1.1.0
| | `-- set-blocking@2.0.0
| +-- once@1.3.3
| +-- opener@1.4.1
| +-- osenv@0.1.3
| | +-- os-homedir@1.0.1
| | `-- os-tmpdir@1.0.1
| +-- path-is-inside@1.0.1
| +-- read@1.0.7
| | `-- mute-stream@0.0.5
| +-- read-cmd-shim@1.0.1
| +-- read-installed@4.0.3
| | `-- util-extend@1.0.3
| +-- read-package-json@2.0.4
| | +-- glob@6.0.4
| | | +-- minimatch@3.0.0
| | | | `-- brace-expansion@1.1.3
| | | |   +-- balanced-match@0.3.0
| | | |   `-- concat-map@0.0.1
| | | `-- path-is-absolute@1.0.0
| | `-- json-parse-helpfulerror@1.0.3
| |   `-- jju@1.3.0
| +-- readdir-scoped-modules@1.0.2
| +-- realize-package-specifier@3.0.3
| +-- request@2.72.0
| | +-- aws-sign2@0.6.0
| | +-- aws4@1.3.2
| | | `-- lru-cache@4.0.1
| | |   +-- pseudomap@1.0.2
| | |   `-- yallist@2.0.0
| | +-- bl@1.1.2
| | | `-- readable-stream@2.0.6
| | |   +-- core-util-is@1.0.2
| | |   +-- isarray@1.0.0
| | |   +-- process-nextick-args@1.0.6
| | |   +-- string_decoder@0.10.31
| | |   `-- util-deprecate@1.0.2
| | +-- caseless@0.11.0
| | +-- combined-stream@1.0.5
| | | `-- delayed-stream@1.0.0
| | +-- extend@3.0.0
| | +-- forever-agent@0.6.1
| | +-- form-data@1.0.0-rc4
| | | `-- async@1.5.2
| | +-- har-validator@2.0.6
| | | +-- chalk@1.1.3
| | | | +-- ansi-styles@2.2.1
| | | | +-- escape-string-regexp@1.0.5
| | | | +-- has-ansi@2.0.0
| | | | `-- supports-color@2.0.0
| | | +-- commander@2.9.0
| | | | `-- graceful-readlink@1.0.1
| | | +-- is-my-json-valid@2.13.1
| | | | +-- generate-function@2.0.0
| | | | +-- generate-object-property@1.2.0
| | | | | `-- is-property@1.0.2
| | | | +-- jsonpointer@2.0.0
| | | | `-- xtend@4.0.1
| | | `-- pinkie-promise@2.0.1
| | |   `-- pinkie@2.0.4
| | +-- hawk@3.1.3
| | | +-- boom@2.10.1
| | | +-- cryptiles@2.0.5
| | | +-- hoek@2.16.3
| | | `-- sntp@1.0.9
| | +-- http-signature@1.1.1
| | | +-- assert-plus@0.2.0
| | | +-- jsprim@1.2.2
| | | | +-- extsprintf@1.0.2
| | | | +-- json-schema@0.2.2
| | | | `-- verror@1.3.6
| | | `-- sshpk@1.7.4
| | |   +-- asn1@0.2.3
| | |   +-- dashdash@1.13.0
| | |   | `-- assert-plus@1.0.0
| | |   +-- ecc-jsbn@0.1.1
| | |   +-- jodid25519@1.0.2
| | |   +-- jsbn@0.1.0
| | |   `-- tweetnacl@0.14.3
| | +-- is-typedarray@1.0.0
| | +-- isstream@0.1.2
| | +-- json-stringify-safe@5.0.1
| | +-- mime-types@2.1.10
| | | `-- mime-db@1.22.0
| | +-- node-uuid@1.4.7
| | +-- oauth-sign@0.8.1
| | +-- qs@6.1.0
| | +-- stringstream@0.0.5
| | +-- tough-cookie@2.2.2
| | `-- tunnel-agent@0.4.2
| +-- retry@0.9.0
| +-- semver@5.1.0
| +-- sha@2.0.1
| +-- slide@1.1.6
| +-- sorted-object@2.0.0
| +-- strip-ansi@3.0.1
| +-- tar@2.2.1
| | `-- block-stream@0.0.8
| +-- text-table@0.2.0
| +-- uid-number@0.0.6
| +-- umask@1.1.0
| +-- unique-filename@1.1.0
| | `-- unique-slug@2.0.0
| +-- unpipe@1.0.0
| +-- validate-npm-package-license@3.0.1
| | +-- spdx-correct@1.0.2
| | | `-- spdx-license-ids@1.2.0
| | `-- spdx-expression-parse@1.0.2
| |   +-- spdx-exceptions@1.0.4
| |   `-- spdx-license-ids@1.2.0
| +-- validate-npm-package-name@2.2.2
| | `-- builtins@0.0.7
| `-- write-file-atomic@1.1.4
+-- npm-package-arg@4.2.0
+-- npm-user-validate@0.1.5
+-- read-package-tree@5.1.5
+-- readable-stream@2.1.4
| +-- buffer-shims@1.0.0
| +-- core-util-is@1.0.2
| +-- isarray@1.0.0
| +-- process-nextick-args@1.0.7
| +-- string_decoder@0.10.31
| `-- util-deprecate@1.0.2
+-- rimraf@2.5.3
+-- which@1.2.10
| `-- isexe@1.1.2
`-- wrappy@1.0.2


C:\work\node>npm -v
3.10.6

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js, npm