Node.js npm パッケージ管理の使い方

  • -

    シェア
  • ---

    LINEで送る
  • -

    はてなブックマーク
    ブックマーク
  • -

    pocket
  • -

    rss
他言語サイト
翻訳はみつかりませんでした
Node.js image

Node.jsのnpmはパッケージを管理するコマンドツールです。

パッケージはJavaScriptで用意されているいろいろな機能の拡張プログラムです。このパッケージを必要に応じてインストールすることで、効率的に目的の機能を実装したプログラムを構築することができます。

そのnpmコマンドの使い方をご紹介します。

JavaScriptのパッケージとは何か?

JavaScriptはいろいろな機能を追加することができます。それらの機能がパッケージという単位でGitHubなどで公開されています。そのパッケージを管理するツールがnpmです。

PHPのcomposer、Pythonのpip、Rubyのgemと同じようなものと考えればよいでしょう。

npmは、PHPのcomposerと中身も似ています。

  • サブコマンドの名称
  • 設定ファイルとロックファイル
  • グローバルインストールとプロジェクトインストール
  • インストールされたパッケージのディレクトリ構成
  • npmコマンド自身がパッケージ

など、同じような働きをします。composerを使ったことがある人は覚えやすいでしょう。また、npmを覚えれば、composerもすぐに使えるようになります。

プログラムパッケージ管理
JavaScript (Node.js)npm
PHPcomposer
Pythonpip
Rubygem

npmのコマンドを使って、パッケージの追加・アップデート・削除などの処理を行います。また最近では、タスクランナーのgulp, webpackなどの有名なツールも、npmを使って簡単にインストールすることができます。

PHPやpythonでは、パッケージ管理は必ず使うものですが、JavaScriptもパッケージ管理を使うことが必須になってきました。

npmは、OSS (Open Source Software)です。npmでインストールするパッケージもOSSです。OSSは無償で使えます。でもすべてがフリーウェアではないことに注意が必要です。
OSSにもライセンスがあります。ただ、

  • 『お金はいりません』
  • 『プログラムの改修を認めます』
  • 『プログラムの再配布を認めます』

などが許可されているだけです。(くわしいライセンスは、npmの設定ファイルに記述します。)
すべて『フリー』ではないことに注意しましょう。(何をしてもかまわないという考えはやめましょう。)

npmのインストール方法

npmには、Node.jsが必要です。Node.jsをインストールすると、標準パッケージとして一緒にインストールされます。

Node.js download image

ダウンロード | Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

https://nodejs.org

ダウンロードサイトには、Windows, Mac, Linux版が用意されています。自分の環境に合ったものをダウンロードしてインストールしましょう。

npmを利用したパッケージのインストール方法

インストール方法には、

  • OSにインストール(グローバルインストール)
  • 特定のプロジェクトだけにインストール(ローカルインストール, 指定ディレクトリに限定)

の2つの方法があります。

OSにインストール

OSにインストールする場合、複数のプロジェクトで同じパッケージを使うことができます。テストツール、タスクランナーなど、複数のプロジェクトで共通で使えるパッケージをインストールします。

npm install -g package_name

パッケージのインストールにはinstallコマンドを使います。これに-gを付けます。これでOSにインストールします。

OSにインストールする場合、npmのホームディレクトリは次の場所になります。

windowsC:\Users\{user_name}\AppData\Roaming\npm
mac, Linux確認中...

このホームディレクトリにpackage.jsonファイルとnode_modulesディレクトリが作成されます。

package.jsonは、npmで管理するパッケージ情報が書かれている設定ファイルです。
また、npmでインストールされたパッケージがnode_modulesディレクトリに追加されます。

プロジェクトにインストール

プロジェクトだけで(特定のディレクトリ配下だけで)使うパッケージをインストールします。

プロジェクトにインストールするには次の手順を行います。

Step1.  プロジェクトのホームディレクトリに移動

プロジェクトのホームディレクトリへ移動します。

Step2. npmの初期処理を実行

すでにプロジェクトにpackage.jsonがある場合は不要です。次のステップへ進んでください。

npm init --yes

を実行して、プロジェクトのnpmでパッケージ管理ができるようにします。

--yesフラグは、コマンドプロンプトで入力を求められるのが面倒なので、とりあえず、すべての設定をデフォルトで進めるものです。あとで設定ファイルで編集できます。

すると、プロジェクトのホームディレクトリにpackage.jsonファイルが生成されます。プロジェクトのホームディレクトリがnpmのホームディレクトリにもなります。

package.json
{
  "name": "npm",
  "version": "1.0.0",
  "description": "This README would normally document whatever steps are necessary to get your application up and running.",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://***@bitbucket.org/***/***.git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "homepage": "https://bitbucket.org/***/***#readme"
}

デフォルトでは、nameは作業したディレクトリ名になります。また、Gitのローカルリポジトリ上で作業すると、repositoryとhomeに、Gitのリポジトリが自動で設定されるので便利です。

プロジェクトのホームディレクトリでnpmコマンドを実行すると、プロジェクト内だけでパッケージの追加などが行えます。

Step3. パッケージの追加

npmを使ってインストールします。下のコマンドを実行するだけです。

npm install pagekage_name

OSにインストールするコマンドから-gをはずしたものと同じです。

package.json と package-lock.json ファイルの違い

package.json, package-lock.jsonファイルは、パッケージの依存関係を記述した点では同じです。しかし、決定的に違うところがあります。

まず、package.jsonは設定ファイルです。直接編集してもかまいません。一方、package-lock.jsonは結果ファイルです。npmで、パッケージの依存関係に変更があるようなコマンドを実行すると、作成されます。直接編集してはいけません。

また、package.jsonはインストールしたパッケージが追記されます。しかし、そのパッケージがさらにどのパッケージに依存しているかは管理しません。

それに対し、package-lock.jsonは、依存するパッケージのさらに依存しているパッケージの情報まで、インストールしたパッケージのすべての情報が書き込まれます。

  • package.json: すべてのパッケージの依存関係の検査が未完了の状態のファイル
  • package-lock.json: パッケージの依存関係の検査が完了済みのファイル

とも言えます。

このようなことから、npm installを実行するとき、package-lock.jsonの有無で、パッケージのインストールのスピードが違います。

package-lock.jsonがない場合、package.jsonから、すべてのパッケージの依存関係の検査をして、package-lock.jsonを作成してから、パッケージのインストールが始まります。

package-lock.jsonファイルがあれば、依存関係の検査が完了した状態からパッケージのインストールが始まるので作業が早く終わります。

package-lock.jsonは、すべてのパッケージのバージョンが全く同じの、プロジェクトのコピー作成や、本番環境の構築などで使います。

npmのコマンド

npmのサブコマンドにはいろいろな操作があります。ここでは、代表的なものを紹介します。

init

npm init

npmによるパッケージ管理の初期化処理です。基本的には最初に1回だけ実行します。

npmのホームディレクトリにpackage.jsonファイルを作成します。package.jsonは、環境に追加されているパッケージとそのバージョン、また、開発環境用のパッケージなど、パッケージに関する設定があります。

package.jsonがある状態で実行すると、package.jsonの内容が上書きされてしまいます。

install

install [-g] package_name

パッケージをインストールします。node_modulesディレクトリにパッケージが追加されます。

alias(短縮形)
npm i [-g] package_name

また、package.jsonファイルのdependenciesにパッケージを追記し、package-lock.jsonを更新します。package-lock.jsonは、すべてのパッケージのインストール情報があります。

複数のパッケージをまとめてインストールすることもできます。

まとめてインストール
npm install pkg1 pkg2 ...

プロジェクトのコピー・復元

別プロジェクトで作成されたpackage.json(あればpackage-lock.jsonも)を配置して、パッケージ名を省略したコマンドを実行すると、プロジェクトのコピーがかんたんにできます。

プロジェクトのコピー
npm install

パッケージ依存のタイプ指定

package.jsonファイルのパッケージ依存関係(dependencies)のタイプを指定することもできます。

dependencies
npm install -P package_name
npm install --save-prod package_name

デフォルトです。未指定の場合、--save-prodを指定したものとして、package.jsonのdependenciesに追加されます。

--saveを指定するという情報がありますが、現在のupdateコマンドの公式ドキュメントでは、"--save"というフラグはありません。
いまは、未指定(デフォルト)でdependenciesに追加されるので、--saveを使う意味がありません。
devDpendencies
npm install -D package_name
npm install --save-dev package_name

開発環境に使うパッケージの場合に指定します。テストツールやタスクランナーなどのパッケージなどで使われます。

optionalDpendencies
npm install -O package_name
npm install --save-optional package_name

インストールできない場合、スキップするパッケージに指定します。特定のOSだけで使うパッケージなどで使います。(Mac専用のパッケージの場合、Windowsでインストールするときはスキップしてエラーにさせない)

パッケージ管理の対象外
npm install --no-save package_name

パッケージをインストールしますが、パッケージ管理をしないものに指定します。package.jsonファイルのdependenciesに追加されません。(ほとんど使う機会はありません。)

 

上記のオプションのどれかを使ってpackage.jsonに依存関係を保存する場合、2つの追加のオプションフラグがあります。

dpendenciesのバージョンを固定
npm install -E package_name
npm install --save-exact package_name

package.jsonファイルのdependensiesのバージョンは、キャレット(^)がついています。このフラグを指定した場合、バージョン番号だけ(x.x.x)がpackage.jsonファイルに記載されます。

(バージョン番号についてはupdateで説明します。)

これで、package.jsonファイルを編集しない限り、updateコマンドで更新してもアップデートされません。

bundleDependencies
npm install -B package_name
npm install --save-bundle package_name

自作や改良パッケージなど、npmに登録されていないパッケージをインストールするときに指定します。

update

npm update [-g] package_name

package.jsonのdependenciesに書かれた内容にしたがって、パッケージをアップデート/ダウングレードします。そして、package-lock.jsonファイルを更新します。

-gをつけた場合は、グローバルにインストールしたパッケージを更新します。(ローカルパッケージは更新されません。)

alias(短縮形)
npm up [-g] package_name
npm upgrade [-g] package_name

また、package-lock.jsonを更新します。package-lock.jsonには、パッケージのインストール情報が書き込まれます。

パッケージを省略した場合は、package.jsonに書かれたすべてのパッケージについて更新します。

インストールされたすべてのパッケージを更新
npm update

複数パッケージをまとめて更新することができます。

まとめて更新
npm update pkg1 pkg2 ...

パッケージのバージョンを変更するなど、package.jsonファイルを直接編集したときにも使います。

開発時には頻繁に使いますが、運用時で利用する場面は、アプリケーションのバージョンアップ作業以外ないでしょう。

パッケージのバージョン番号の見方

パッケージのバージョン番号は、

1.1.2

のように、3つの番号をカンマ(.)で区切って表現します。この番号はそれぞれ、

(メジャー番号).(マイナー番号).(パッチ番号 or ビルド番号 or リビジョン)

になっていて、

メジャー番号: 大きく仕様が変わる、ユーザエクスペリエンス(ユーザの使い方)が変わるとき
マイナー番号: 機能追加・削除、バグフィックスなどの小さい変更の時
パッチ・ビルド・リビジョン番号: 自動発番されたり、使い方の幅は広い。バグフィックスで使われることもある。

の意味があります。

マイナーアップデート

updateコマンドでは、package.jsonファイルの内容によって更新されるバージョンが異なります。

package.json
"dependencies": {
    "node-sass": "^4.10.0"
}

先頭にキャレット(^)ついている場合は、メジャー番号は固定で、マイナー番号・ビルド番号の最新の状態に更新します。ここでは、4.10.0 < 5.0.0のなかで最新のバージョンに更新します。

ビルドアップデート

package.json
"dependencies": {
    "node-sass": "~4.10.0"
}

先頭にチルダ(~)ついている場合は、メジャー番号とマイナー番号は固定で、ビルド番号の最新の状態に更新します。ここでは、4.10.0 < 4.11.0のなかで最新のバージョンに更新されます。

完全一致のアップデート

package.json
"dependencies": {
    "node-sass": "4.10.0"
}

バージョン番号だけの場合は、完全一致したバージョンに更新します。パッケージのダウングレードや、アップデートせずにバージョンを固定するときに使います。

npmの標準機能では、最新版にアップデートする機能はありません。別のパッケージをインストールする必要があります。くわしい方法はあとで説明します。

outdated

npm outdated [package_name]

インストールされているパッケージの更新状態を確認します。

  • Current: 現在のバージョン
  • Wanted: updateコマンドで更新できる範囲内の最新バージョン
  • Latest: パッケージの最新バージョン

Wantedは、package.jsonで指定したバージョンにチルダ(~)や、キャレット(^)があるときの範囲での最新のバージョンです。(package.jsonファイルはそのままで、updateコマンドで更新できます。)

パッケージ名を省略した場合、すべてのパッケージについて確認します。

このコマンドは、パッケージのアップデート情報を確認しているだけで、package.jsonファイルを最新のバージョンに更新しません。
最新のバージョンに更新するには、自分でpackage.jsonファイルを編集して、updateコマンドを実行する必要があります。
alias(短縮形)はありません

uninstall

npm uninstall [-g] package_name

インストールしたパッケージを削除します。

alias(短縮形)
npm remove [-g] package_name
npm rm [-g] package_name
npm r [-g] package_name
npm un [-g] package_name
npm unlink [-g] package_name

このままでは、package.jsonのdependenciesからは削除されません。フラグを指定する必要があります。

dependencies
npm uninstall -S package_name
npm uninstall --save package_name

package.jsonのdependenciesからもパッケージを削除します。

devDpendencies
npm uninstall -D package_name
npm uninstall --save-dev package_name

package.jsonのdevDependenciesからもパッケージを削除します。install時に、--save-devを指定したものが対象になります。

optionalDpendencies
npm uninstall -O package_name
npm uninstall --save-optional package_name

package.jsonのoptionalDependenciesからもパッケージを削除します。install時に、--save-optionalを指定したものが対象になります。

ls

npm ls package_name

インストールされているパッケージリストを表示します。表示される内容は、依存関係を階層化したものです。

パッケージ名を省略した場合、すべてのパッケージリストを表示します。パッケージ名を指定した場合は、そのパッケージの依存関係を表示します。

alias(短縮形)
npm list package_name
npm la package_name
npm ll package_name
公式ドキュメントには書いていませんが、-gを使って、グローバルインストールしたリストを見ることができます。

search

npm search search_terms ...

search_terms: 検索ワード

インストールしたいパッケージを検索します。検索ワードを複数指定できます。

alias(短縮形)
npm s search_terms
npm se search_terms
npm find search_terms

root

npm root [-g]

npmパッケージのインストールディレクトリ(node_modules)のパスを表示します。

bin

npm bin [-g]

npmコマンドの実行ファイルのパスを表示します。プロジェクトにインストールした場合は、node_modules/.binになります。

グローバルインストールの場合は、OSによって異なります。

windowsC:\Users\{user_name}\AppData\Roaming\npm
mac, Linuxusr/local/bin
windowsの場合、ログインユーザのフォルダが表示されますが、AppData\Roaming\npmにはnpmコマンドはありません。
本当のインストール先ディレクトリは、デフォルトではc:\ProgramFiles\npmになります。(パスのリダイレクトが行われている)
ただし、パッケージのグローバルインストール先は、...\Roaming\npm\node_modulesになります。

help

npm help terms ...

terms: 検索ワード

ヘルプを表示します。ワードが未指定の場合、サブコマンドのリストが表示されます。

パッケージを最新版にアップデートするには

一般的に、アプリケーションのアップデートは、最新版に更新することになります。でも、updateコマンドでは、

  • outdateでlatest(最新版)のバージョンを確認する
  • package.jsonファイルのdependenciesのバージョンを変更する
  • updateコマンドを実行する

の作業が必要です。

アップデートするバージョンを細かくコントロールするには便利ですが、いつもの『アップデート』だと思っていると不都合に感じます。

そこで、最新版にアップデートを行うには、npm-check-updatesパッケージを使います。

インストール
npm install -g npm-check-updates

プロジェクトに入れる必要はないので、-gをつけます。

すると、ncuというコマンドが使えるようになるので、

package.jsonファイルの更新
ncu -u

を実行して、latestがあるすべてのパッケージの、package.jsonのバージョンを更新します。そして、

パッケージ更新
npm update

を実行すれば、すべてのパッケージが最新版に更新されます。

ncu -uでは、『^』『~』の範囲内のlatestは更新されません(もともとupdateコマンドで更新できるため)。
package.jsonのすべてのパッケージを最新版に書き換えるには、

all update
ncu -a

を使います。

まとめ

npmの使い方はこれだけではありません。テストの実行、タスクランナーの操作など、大事な要素はたくさんあります。今回は、パッケージ管理の部分での最低限の使い方だけをご紹介しました。

そのほかの詳しい使い方は追々追記していく予定です。(別記事になると思います。)

 

最近Webカテゴリでよく読まれている記事です。
post-cta-image
blog image

ドメイン取得の意味が分からない人へ。王道の方法を紹介します。

ドメインの登録業者を選ぶのに悩む必要はないです。サイトを簡単に早く公開するには全くいらないことで、むしろ邪魔です。『お名前.com』というサービスは必ず耳にします。そのお名前.comのメリットとデメリットと一緒に、ドメインの意味が分からない人が一番失敗しないドメインの取得方法を紹介します。

tadtadya.com

_

SNSでも記事を配信しています。
コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

この記事を気に入ったらぜひシェアも!!