第25話:Node.jsを利用したローカルアプリケーション

第5部 応用編

目次

マンガ

マンガ

マンガ

マンガ

マンガ台詞

【1Page】
アイコン先生:今回はWebページから離れて
    『node.js』を使ってみるぞ
アイコン遊:『node.js』?
アイコン先生:Webブラウザを使わずに JavaScriptを実行できる 環境だ
アイコン守:へー そういうのが あるんですね
アイコン先生:ああ 少し高度になるので
    ある程度初心者を脱してから 挑戦した方がよいかもしれない
    今回は細かな説明が多いので 文章の方をご覧下さい
【2Page】
アイコン先生:まずは『nodist』を使い 開発環境を構築する
        【nodist】
        https://github.com/
        marcelklehr/nodist/
        releases
    [Win+X]でメニューを出して
    「コマンド プロンプト」を選択後
        コマンド ウィンドウをここで開く
    以下のコマンドを実行して
    バージョン情報を表示して
    環境構築の確認をする
        nodist -v
        npm -v
        node -v
    次に『test.js』を作り
    『UTF-8』でプログラムを
    書く
        console.log("テスト出力");
【3Page】
アイコン先生:「Explorer」内で [Shift]を押しながら 右クリック
    メニューから 「コマンド ウィンドウを ここで開く」を選択

    以下のコマンドを実行する
        node test.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でまとめてダウンロード (右クリックから保存してください)