第25話:Node.jsを利用したローカルアプリケーション
目次
マンガ
マンガ台詞
説明
この章では、『Node.jsを利用したローカルアプリケーション』について学びます。
『Node.js』とは何かから話を始めて、その利用方法について簡単な解説を行ないます。
『Node.js』とは?
『Node.js』は、元々Google ChromeのJavaScript実行エンジンを利用して、サーバー上のプログラムをJavaScriptで書くために作られました。
それまでは、Webページ内のプログラムはJavaScriptで、サーバー上のプログラムは他のプログラミング言語で開発を行なっていました。それが、『Node.js』登場後は、Webページ内のプログラムも、サーバー上のプログラムもJavaScriptで開発可能になりました。
『Node.js』は、Webブラウザ用のJavaScriptに加えて、各種モジュールと呼ばれる部品を読み込むことで、ファイル操作や通信などの各種処理を行なうことができます。
この『Node.js』は、ローカルアプリケーションの開発にも使えます。ここでは、ウィンドウを伴わないコンソールアプリケーションの開発に『Node.js』を使います。
開発環境の構築
『Node.js』の開発環境を作るには、Windowsではバージョン管理ソフト『nodist』を利用すると便利です(Macでは『nodebrew』を使うとよいようです)。こうしたソフトを利用せずに開発環境を構築すると、かなり大変です。『nodist』を利用すると自動で各種設定や環境構築を行なってくれます。
『nodist』は、以下のURLで公開されています。
実際に使用する際は、以下のリリースページから、最新版の『NodistSetup』(NodistSetup-vX.X.X.exe)をダウンロードして、『Node.js』環境をインストールするとよいです。
インストールが終了したら、コマンド プロンプトを起動して、環境が整っていることを確認します。コマンド プロンプトは、以下の方法で開けます。
【方法1】 1. [Win+X]でメニューを出して「コマンド プロンプト」を選択。
【方法2】 1. [Win+R]で「ファイル名を指定して実行」ダイアログを出す。 2. 「cmd」と入力して[Enter]キーを押す。
コマンドプロンプトに、以下の3つのコマンドを入力して、Enterキーを押して下さい。それぞれ、『nodist』『npm』『node』のバージョンが表示されます。
『npm』は、『node package manager』の略です。『Node.js』用の各種ライブラリをインストールするのに利用します。
nodist -v npm -v node -v
それぞれのバージョンが表示されれば、開発環境の構築は成功です。
プログラムの実行
それでは、『Node.js』を利用してJavaScriptのプログラムを実行してみましょう。『Node.js』用のプログラムは、『UTF-8』で書く必要があります。
ファイルを直接実行
まず、以下の中身の『test.js』を作ります。『UTF-8』で書くことを忘れないでください。
【test.js】
console.log("テスト出力");
そして、以下の方法でコマンド プロンプトを起動します。操作は、作成したファイルのあるフォルダで行ないます。
【方法3】 1. 「Explorer」内で[Shift]を押しながら右クリックして、コンテキストメニューを開く。 2. コンテキストメニューから「コマンド ウィンドウをここで開く」を選択。
【方法4】 1. 「Explorer」のアドレス欄に「cmd」と入力して[Enter]キーを押す。
コマンド プロンプトが開いたら、その中で以下のように入力します。『Node.js』で『test.js』を実行するという命令です。同じコマンド プロンプトに結果が表示されます。
node test.js
【結果】
テスト出力
これが、最も簡単なファイルの実行方法です。
『package.json』の作成
次は『Node.js』らしい実行方法です。『package.json』という、アプリケーションの情報をまとめたファイルを作り、このファイル経由でプログラムを実行します。
『Node.js』では、ディレクトリ(フォルダ)単位でアプリを作ります。ここではアプリ用のものとして、『test』というディレクトリを作成します。
ディレクトリを作成したら、『Explorer』で『test』ディレクトリを開きます。そして、そのディレクトリでコマンド プロンプトを開きます(方法3、4を参照)。開いたコマンド プロンプトで、以下のコマンドを実行します。
npm init -y
上記のコマンドを実行すると、『test』ディレクトリの中に『package.json』が作成されます。このファイルに、作成するアプリの各種情報が自動で記載されています。コマンド中の『-y』は、「デフォルトの設定」という意味です。作成されるアプリ名は、ディレクトリ名になります。
以下、作成した『package.json』の中身です。
{ "name": "test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }
『"main": "index.js"』という部分が、実行するJavaScriptのファイル名です。『test』ディレクトリ内に、『index.js』を作成します。そして、中身を以下のようにします。『UTF-8』で書くことを忘れないでください。
console.log("テスト出力");
そして、先ほど開いたコマンド プロンプトで、以下のコマンドを実行します。同じコマンド プロンプトに結果が表示されます。
node .
【結果】
テスト出力
『Node.js』では、このようにしてアプリケーションを作っていきます。
バッチファイルの作成
毎回、コマンド プロンプトを開くのは面倒です。『test』内に、以下の『run.bat』というバッチファイルを作っておくと、簡単に実行できて便利です。
【run.bat】
node . pause
『pause』を削除するか、『:: ~』で無効にすると、ウィンドウがすぐに閉じるようになります。
node . :: pause
『モジュール』
『Node.js』は、『モジュール』という部品を利用して、プログラムの機能を追加できます。『モジュール』には、以下のような種類があります。
- 『Node.js』に初めから含まれているもの。
- 『npm』を利用してネット越しにインストールするもの。
- 自作したもの(単なる外部ファイル)。
これらの『モジュール』は『require』という関数を利用して、プログラム中に読み込むことができます。以下、『Node.js』に初めから含まれている『File System モジュール』を読み込んだところです。
const fs = require('fs');
『const』というのは、あとで中身を書き換えない『定数』として変数を定義するという宣言です。上記では、『require』を利用して、定数『fs』に『File System モジュール』を読み込んでいます。間違ってあとで上書きしてしまわないように定数にしておいた方が安全です。
「『Node.js』に初めから含まれている」「『npm』を利用してネット越しにインストールするもの」は、上記のようにしてモジュールを読み込めます。
『npm』を利用したインストール
『npm』を利用して『モジュール』をインストールする方法を示します。
インストールするディレクトリでコマンド プロンプトを開きます。そして、『npm install モジュール名 --save』とコマンドを入力して[Enter]キーを押して実行します。
コマンドを実行すると、『node_modules』というディレクトリが作られ、その中に関連ファイルがダウンロードされて展開されます。『npm WARN』が出ることもありますが、『WARN』は警告なので気にしなくてもよいです。
いくつかの『npm』の『モジュール』とインストールコマンドを紹介しておきます。
npm install fs-extra --save
npm install klaw-sync --save
npm install encoding-japanese --save
自作『モジュール』
プログラムが長くなってくると、ファイルを分割したくなります。その際は、『モジュール』単位でプログラムを分割します。
【myMod.js】
// モジュール用オブジェクト var mod = {}; // モジュールの読み込み var execSync = require('child_process').execSync; // 命令を追加 mod.openUrl = function(url) { execSync('start ' + url); }; // エクスポート module.exports = mod;
『モジュール』内では、『module.exports』内に格納したオブジェクトが、外部から参照できます。
ここでは、『require('child_process').execSync』で、『child_process』の『execSync』メソッドを取り出して変数に格納しています。この『execSync』メソッドは、アプリケーションやコマンドを実行するための命令です。そして『start』コマンドを使ってURLを開いています。
自作した『モジュール』は、以下のように相対パスで読み込めます。この場合『./』が必須なので抜かさないでください。使う際は、以下のように使います。
// モジュールの読み込み const myMod = require('./myMod.js'); // URLを開く myMod.openUrl('https://crocro.com/');
『引数』
『process.argv』に、引数などの情報が入っています。
コード | 入っている情報 |
---|---|
process.argv[0] | 『Node.js』のパス |
process.argv[1] | 実行されたファイル(自身)のパス |
process.argv[2] process.argv[3] : |
引数1 引数2 : |
先ほど、実行用のバッチファイルを作成しました。そのバッチファイルを改良して、バッチファイルにドロップしたファイルの情報を表示するプログラムを作ってみましょう。以下のファイル構造とします。
●fileInf ┣index.js ┣package.json ┗run.bat
【run.bat】
node . %* pause
『%*』の部分で、ドロップされたファイルなどの引数を、『Node.js』の引数として引き渡しています。実行の際には、この『run.bat』に、複数のファイルをドロップしてみてください。
【package.json】
{ "name": "fileInf", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }
【index.js】
'use strict' // モジュールの読み込み const fs = require('fs'); // 引数の情報出力 for (var i = 0; i < process.argv.length; i ++) { if (i == 0) { console.log('Node.js のパス:', process.argv[i]); } else if (i == 1) { console.log('自身 のパス:', process.argv[i]); } else { console.log('引数:', process.argv[i]); var stat = fs.statSync(process.argv[i]); console.log('ファイルサイズ', stat.size); } console.log(''); } console.log('引数の数:', process.argv.length - 2);
『'use strict'』というのは、『厳格モード』でJavaScriptを実行するという命令です。自由度は減りますが、エラーが起きにくいプログラムを書くことができます。
ここでは、『Node.js』に初めから含まれている『File Systemモジュール』を使います。『const fs = require('fs');』として、定数『fs』を通して使うようにしまうs。
『process.argv』は配列になっていますので、この値を処理していきます。配列の要素2以降は、ドロップしたファイルなどの情報が入っています。『var stat = fs.statSync(process.argv[i]);』で、ファイル情報を得て、『stat.size』でファイルサイズを得ています。
以下、実行した結果の一例を表示します。『index.js』と『package.json』を、『run.bat』にドロップしています。
【結果】
Node.js のパス: C:\nodist\Nodist\v\nodev6.7.0\node.exe 自身 のパス: D:\fileInf 引数: D:\fileInf\package.json ファイルサイズ 221 引数: D:\fileInf\index.js ファイルサイズ 551 引数の数: 2
サンプルの入手
以下は、今回出てきたサンプルです。
ZIPでまとめてダウンロード (右クリックから保存してください)