Node.jsを使ってコマンドラインアプリを作る

Node.jsを使ったコマンドラインアプリ制作について意外とネット上に情報が落ちていない。
せっかくだし、Node.js製コマンドラインアプリ制作のキホンのキだけ書いておく。

最低限必要なモノ

最低限で良いなら以下だけでHelloWorldアプリみたいなのができる。

.
├── bin
│   └── app.js
└── package.json

package.jsonはnpm initで作ると良い。(細かい詳細はenter連打でOK)
binディレクトリとapp.jsは適当かつイイ感じに作る。

package.json

bin以外の項目は元から存在するので、binの項目だけ指定する。
helloコマンド打ったらbin/app.jsを実行しろ的なことを書いてるのだと思う。
まだこの時点では実行できない。

{
  "name": "hello",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "bin": {
    "hello": "bin/app.js"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "p1ch_jp",
  "license": "MIT"
}

bin/app.js

上の2行はオマジナイみたいなもの。 4行目はみんな大好きconsole.log。
今回はこんなけだけど、書き足せば色々できる。

#!/usr/bin/env node
'use strict';

console.log("Hello from Node.js Application.");  

コマンド化にする

このままでは、カレントディレクトリでnode ./bin/app.jsとかしないと実行できない。ダサい。普通にコマンドとして使いたい。

それには、カレントディレクトリでnpm install -gと実行する。
エラーが出なければたぶんhelloコマンドが入ってる。

ターミナルでhelloと打ってみる。

$ hello
Hello from Node.js Application.  

みたいになると思う。

なお、このままだと開発中は変更を加える度にnpm install -gしないといけない。面倒なので、開発時は./bin/app.jsとしておいて、ある程度区切りがついたらnpm install -gするとか、シンボリックリンク貼るとかなんかした方がスムーズに開発できると思う。

使えるコマンドラインアプリを作るために

helloアプリの作り方を書いてきたけど、まあ実用的じゃない。
もっと日常的に使えるようなアプリを作るには、色々な機能が必要だ。
早い話、便利なモジュール入れて基本的な機能を付けよう。

例えば以下の様なモジュールがある。

commander.js

ある程度しっかりしたコマンドラインアプリにはオプションとかが必要になる。
基本的なオプション(-h helpとか)を自動生成したり、簡単にカスタマイズできるモジュール。

$ npm install commander

blessed

コマンドラインに様々なインターフェイスをつけることができるらしい。
詳しくはgithubのREADME見るのが早いと思う。

blessed - GitHub

$ npm install blessed

実はまだ使ったことが無くて、使ってみたいなあと思っているモジュールなので詳しいことは分からない。

あとがき

最近ノーマルMacBookに乗り換えたので、アプリをたくさん起ち上げないようにしてる。
Photoshopみたいな重いアプリは起ち上げないとしても、細かいアプリをたくさん起ち上げてると結構重くなる。
なので、細かいことは常に立ち上がってるiTermかChromeで済ませたい感がある。 てなわけで、コマンドラインアプリが増えて欲しいし、無いものは作っていきたい。