Node.js の Windows へのインストールと npm の使い方

今回は Node.js の Windows 環境におけるインストールと、 そのパッケージ管理ツールである npm の使い方についてです。

Node.js Logo     npm Logo

Node.js とは

JavaScript は、もともとブラウザー側で解釈して、実行するクライアントサイドの言語です。
Node.js を使うとローカル上で JavaScript を実行できるようになります。 これの何がいいかというと、 Node.js によりサーバーサイドの言語も JavaScript で書けるようになり、 サーバー、クライアントサイドともに同じ言語で開発できるようになります。
また、JavaScript の解析には Chrome の V8 エンジン を使っていて、動作速度はスクリプト言語の中では比較的、高速な方です。

なお、 Node.js は一時期、開発が停滞していて、業を煮やした人たちによって Io.js として分離していました。 しかし、今ではめでたく統合されています。

Node.js のインストール

まず、 Node.js のダウンロードページから Windows 用のインストーラー(node-vX.X.X-x86|x64.msi) をダウンロードします。 soft_nodejs_dl.png

ダウンロードしたインストーラーを実行すれば、 Node.js はインストールが開始されます。

基本的にデフォルトのままでも問題ありません。 変えるとしたら、インストール先ぐらいでしょう。

soft_nodejs_setup.png


インストールするものもカスタマイズできますが、全部いれておいた方がいいです。

soft_nodejs_setup_custom.png

Node.js の使い方

インストールが完了したら、動くか確認してみます。
Node.js の実行ファイルは node.exe です。

node.exe や次章の npm.exe はインストール時のカスタムで変更していなければ、 環境変数 PATH が通っているので、そのまま使えます。
また、 Node.js をインストールするとスタートメニューに [Node.js command prompt] ができるので、このコマンドプロンプト上で実行することもできます。
Node.js command prompt


とりあえず動くことを確認するには -v オプションでバージョンが表示します。
> node.exe -v
  v5.4.0
また、 -h でヘルプが表示されます。
> node.exe -h

スクリプトファイルの実行

node の基本的な使い方としては JavaScript ファイルを渡して実行します。

hello.js :
   console.log("Hello world!");
> node.exe hellol.js 
 Hello world!

対話モード (REPL)

node の後にスクリプトファイルを指定しないと対話モードで起動します。
> node
> console.log("Hello world!");
Hello world!
undefined
> .exit

デバッグモード

node の引数に debug を渡して、その後にスクリプトファイルを書くとデバッガーが起動します。

hello_debug.js :
console.log("Hello ");
debugger;
console.log("world!");
> node debug hello_debug.js 
debug>connecting to 127.0.0.1:5858 .< Debugger listening on port 5858
debug> . ok
debug>break in d:\home\programmers_notes\node\hello_debug.js:2  1 > 2 console.log("Hello ");  3 debugger;  4 console.log("world!");
  debug> next
debug> debug>< Hello 
debug>break in d:\home\programmers_notes\node\hello_debug.js:3  1   2 console.log("Hello ");> 3 debugger;  4 console.log("world!");  5 
  debug> cont
debug> debug>break in d:\home\programmers_notes\node\hello_debug.js:4  2 console.log("Hello ");  3 debugger;> 4 console.log("world!");  5   6 
  debug> quit

npm の使い方

Node.js には多くのパッケージが公開されており、 npm を使ってインストールなどの管理が出来ます。
npm は最初の引数をコマンドとして種々の操作を行います。取り得るオプションや引数はそのコマンドによって変わってきます。
> npm コマンド [オプション] [引数]

プロキシ環境での設定 (config)

npm では Web からパッケージを取得してインストールします。 そのため、ネットワークの接続にプロキシを使用している場合は サーバーを設定していないとエラーとなります。

プロキシサーバーを設定するには以下のコマンドを実行します。
> npm config -g set proxy プロキシサーバーのアドレス:ポート番号
> npm config -g set https-proxy プロキシサーバーのアドレス:ポート番号
> npm config -g set proxy http://foo.co.jp:8080
> npm config -g set https-proxy http://foo.co.jp:8080

プロキシを設定してもまだエラーが発生する場合には さらにレジストリーの参照先も変更する必要があります。
> npm config -g set registry http://registry.npmjs.org/
ここで指定している -g オプションは全ユーザーに対して設定するためのものです。 -g をつけていないと実行しているユーザーのみの設定となります。


設定した内容を確認する場合は set ではなく ls(list) を指定します。
> npm config ls
参考 :

プロジェクトの作成 (init)

Node.js のプロジェクトを作成する場合、 init のコマンドでプロジェクトの設定ファイル(package.json)ができます。
> npm init [-y]
-y (--yes) をつけるとすべてデフォルトの値を使って作成します。 つけていない場合は対話的に設定内容を入力することになります。

例えば、 sample フォルダーを作成し、そこで init -y を実行すると以下のファイルが作成されます。

package.json :
 {
   "name": "sample",
   "version": "1.0.0",
   "description": "",
   "main": "index.js",
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1"
   },
   "keywords": [],
   "author": "",
   "license": "ISC"
 }
各項目の詳しい説明については以下のサイトで記述されています。

パッケージのインストール (install)

パッケージのインストールは install(i) コマンドを使用します。
> npm install [-g] [パッケージ名]
パッケージ名でインストールするパッケージを指定します。 パッケージは最新版がインストールされますが パッケージ名@バージョン(foo@1.2.3) とするとバージョンを指定することができます。


-g (--global) はグローバルインストールのオプションです。
Gulp や JSHint のようにコマンドライン上で起動させるものはグローバルインストールにします。


通常のパッケージの場合は -g を付けません。この場合、カレントのプロジェクトnode_modules のフォルダーを作って、インストールされます。

また、 パッケージ名を省略するとカレントのプロジェクトで利用しているパッケージをまとめてインストールします。 こちらはダウンロードや Clone でプロジェクトを取得した際などに使います。

パッケージのアップデート(install, update)

パッケージのアップデートも install コマンドで行うことができます。
例えば npm 自体をアップデートするには以下のコマンドを実行します。
> npm install -g npm
また、 update を使うとまとめてアップデートができます。 install と同様に -g オプションをつけるとグローバルインストールしたパッケージ、つけない場合はプロジェクトローカルのパッケージが対象です。
> npm update
> npm -g update

パッケージの利用

パッケージをインストールすると require で呼び出して使うことができるようになります。

index.js :
var lodash = require('lodash');
 
var output = lodash.without([1, 2, 3], 1);
console.log(output);
> npm install lodash
> node index.js 
 [ 2, 3 ] 
ちなみに package.json の main でスクリプトファイルが指定されているパッケージの場合、 require で呼び出された際に、最初にそのファイルが実行されます。

依存パッケージの登録

パッケージ名の指定なしの npm install でインストールされるパッケージはそのプロジェクトが依存しているパッケージです。 依存パッケージは以下のコマンドでパッケージに登録(package.json に書き込み)できます。
> npm install パッケージ名 --save
> npm install パッケージ名 --save-dev
--save-dev の方は開発やテストでのみ使用するパッケージに対して使います。

スクリプトの実行 (start, test, ...)

package.json の "scripts" フィールドの starttest などの項目に処理を記述すると npm から実行できるようになります。
> npm start
> npm test


例えば、 package.json に以下の記述を加えると npm start で index.js が実行されます。
   "scripts": {
       "start": "node index.js"
   },
> npm start
 
 > sample@1.0.0 start c:\Users\...\sample
 > node index.js
 
 [ 2, 3 ] 

その他のコマンド

その他のよく使いそうなコマンドもいくつかあげておきます。
なお、 -g オプションは install の場合と同じで、対象がグローバルとなります。

コマンドの書式 別名 説明
npm -h
npm コマンド -h
npm help 用語(コマンド)
ヘルプの表示。
help コマンドの場合はブラウザーで説明のページを開く。
npm uninstall [-g] パッケージ名 remove, rm, r, un, unlink パッケージのアンインストール
npm ls [-g]
npm ls [-g] パッケージ名
list, la, ll インストールしたパッケージのリストの表示。
パッケージ名を指定するとそのパッケージの情報だけ表示。(バージョンを確認したい場合など)
npm view パッケージ名 info, show, v パッケージの詳細情報の表示



スポンサーサイト



 

Node.js API - 標準モジュール

Node.js を使うと PC 上で JavaScript を実行できるようになります。 ただ、 JavaScript はもともとクライアントサイドの言語のため、 ファイルを直接操作するなどの API はありません。
そこで Node.js はプログラムとして動作させるために必要な各種 API をモジュールとして用意しています。 その標準モジュールに関する記事を書いてみました。

標準モジュールと API

Node.js の API を提供するモジュールは Node.js とともに標準でインストールされています。 それらの多くも使用する場合には require によるロードは必要ですが、 npm でのインストールを行うことなく、そのまま使うことができます。 ちょうど C, C++ の標準ライブラリーのような感じです。 ただ、 Node.js はサーバーサイドのアプリケーションを主な対象としているため、 HTTP などの通信に必要なモジュールも多く用意されています。

標準モジュール

Node.js のドキュメントで説明されているモジュールをリストにまとめました。 これらのうち、気になったモジュールについては少しずつ解説記事も書いていこうかなと考えています。
モジュール require 概要 解説
Events events イベント処理
Node.js の API の多くがこれを使った非同期イベント駆動で構築されている。
link
Stream - (stream) ストリームのインターフェース [ベースクラスを使う場合には require]
標準出力、 HTTP リクエストなど様々なオブジェクトがこのインターフェースで実装されている。
 
Console - デバッグ用などでのコンソール出力 [console : グローバルオブジェクト]
ブラウザーでの console に相当するオブジェクト
 
Process - カレントプロセスの情報、操作 [process : グローバルオブジェクト]
コマンド引数や環境変数などの情報や exit による終了など プログラムとして動作するために必要な基本的な機能群
1 2 3
Child Processes child_process 外部プログラムの実行など子プロセスの実行、管理  
Cluster cluster サーバーポートの複数プロセスでの共有  
Readline readline 対話型インターフェースのプログラムでよく使われている readline ライブラリーにあたる機能  
Utilities util 他のモジュールからも呼ばれるような汎用関数群  
URL url URL の文字列解析 link
Query Strings querystring クエリー文字列(URL 中の ? 以降)
Path path ファイルパスの文字列処理 link
File System fs ファイルの I/O、ファイル情報の取得、ファイル・ディレクトリー操作 など  
Buffer - バイナリーデータ用ストリームオブジェクト [Buffer : グローバルなコンストラクター]
ES6 では Uint8Array があるが、Node.js 的にはこちらがいいらしい。
 
String Decoder string_decoder Buffer のデコーダー  
DNS dns DNS による ドメイン名、 IP アドレス の解決
DNS サーバーに直接問い合わせ、OS の機能 の 2 通りの方法が使える。
 
Punycode punycode Punycode (ドメイン名で使われる文字符号化方式) のエンコード、デコード  
Net net ソケット(TCP/IP)通信
HTTP などよりも低レベル(下位層)の通信機能
 
HTTP http HTTP サーバー、クライアント  
HTTPS https HTTPS(TLS/SSL を使った HTTP)用  
TLS/SSL tls TLS/SSL (暗号化した通信)  
Crypto crypto OpenSSL などをラップした暗号化機能  
ZLIB zlib GZip, Inflate でのデータ圧縮、解凍
最近の http サーバーでは gz で圧縮されたまま送って、ブラウザーで解凍することが多い
 
UDP/Datagram dgram UDP (データグラムを送受信するプロトコル)通信
TCP と違いデータの完全性が保証されないので、途中でデータが抜け落ちても問題が少ない音声や画像のストリーム配信などに使われる。
 
OS os OS 関連情報の取得
どの OS かというだけなら process.platform で可能。
 
V8 v8 V8 エンジン関連  
VM vm JavaScript コードの実行
JavaScript 標準の eval() より細かく制御できる。
 
(※) "Domain" は非推奨(Deprecated)、"TTY" は直接使う必要はないので、省略。

機能

Node.js のドキュメントには出ていますが、モジュールというとちょっと違うかなという機能はこちらにまとめました。
機能 概要 解説
REPL 対話モード  
Debugger デバッグモード  
Modules モジュール管理システム  
Globals Node.js で利用できるグローバルオブジェクト群  
Errors エラー処理  
Assertion Testing アサーション(表明) 機能  
Timers タイマー機能 link
C/C++ Addons Node.js で C/C++ ライブラリーを使用するための仕組み  



 

Node.js API (process) - コマンドライン引数の取得

Node.js を使うと JavaScript を PC 上で動作できるようになります。 プログラムとして動作させる場合、コマンドライン引数を使いたくなることがあります。
今回は Node.js でコマンドライン引数を取得する方法の紹介です。

コマンドライン引数

コマンドライン引数は process.argv の配列に格納されています。
process は 標準モジュールの 一つである Process モジュールが提供する グローバルオブジェクトで、プログラムのどこからでも使えます。


process_arg.js :
for (let cnt in process.argv) {
    console.log('%d : %s', cnt, process.argv[cnt]);
}
$ node --no-deprecation process_arg.js foo bar
0 : c:\Program Files\nodejs\node.exe
1 : d:\home\programmers_notes\node\process_arg\process_arg.js
2 : foo
3 : bar
process.argv では 先頭に node のパス、 2 番めにスクリプトファイルのパスが格納され、 引数はそれ以降です。 process.argv は node プログラム自体に渡される引数は入っていません。
あまり必要になることはありませんが、 もしそれらの引数が必要な場合は process.execArgv に格納されています。 また、 node やスクリプトファイルのパスは process.argv 以外から取得することもできます。

メソッド(オブジェクト) 対象
process.argv スクリプトの引数の配列
process.execArgv node の引数の配列
process.execPath node のパス
__dirname スクリプトファイルのディレクトリーのパス
__filename スクリプトファイルのパス

console.log('process.execArgv = ', process.execArgv);
console.log('process.execPath = ', process.execPath);
console.log('__dirname        = ', __dirname);
console.log('__filename       = ', __filename);
process.execArgv =  [ '--no-deprecation' ]
process.execPath =  c:\Program Files\nodejs\node.exe
__dirname        =  d:\home\programmers_notes\node\process_arg
__filename       =  d:\home\programmers_notes\node\process_arg\process_arg.js

npm からの起動

npm の scriptsstart などにコマンドを書くことによって、 npm から起動することができます。 package.json :
{
  "name": "process_arg",
  "version": "1.0.0",
  "main": "process_arg.js",
  "scripts": {
    "start": "node process_arg.js"
  },
  "license": "ISC"
}
npm から起動した場合、引数は npm の引数となります。 スクリプトに引数を渡したい場合は "--" 以降に記述します。
$ npm start -- foo bar

> process_arg@1.0.0 start d:\home\programmers_notes\node\process_arg
> node process_arg.js "foo" "bar"

0 : C:\Program Files\nodejs\node.exe
1 : d:\home\programmers_notes\node\process_arg\process_arg.js
2 : foo
3 : bar

process.execArgv =  []
process.execPath =  C:\Program Files\nodejs\node.exe
__dirname        =  d:\home\programmers_notes\node\process_arg
__filename       =  d:\home\programmers_notes\node\process_arg\process_arg.js


 
このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
31位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
5位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

08月 | 2023年09月 | 10月
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。