WEB

【簡単に楽しめる!】Node.jsで独自コマンドを作って遊ぶ方法

【簡単に楽しめる!】Node.jsで独自コマンドを作って遊ぶ方法

こんにちは、フロントエンドエンジニアのゆーたです。
普段は環境構築でしか使っていないNode.jsで、オリジナルのコマンドを作ってみました。今回はその方法をご紹介したいと思います。簡単に楽しめるので、ぜひ試してみてください。

今回の環境

まずは今回の環境から紹介します。

環境
  • Node.js v4.2.0
  • npm v2.14.7

Node.jsは少し前にメジャーアップデートして5以上のバージョンが出ていますが、4もまだまだサポートされているので、今回は4を使っていきます。5でも問題ありません。

作り方

適当なフォルダ名をつけて中にindex.jsを作り、npm initします。

app
├── index.js
└── package.json

index.js

まず、下記の2行を先頭に記述します。

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

1行目では、nodeのインタプリタを実行する記述をします。
2行目は、ES2015(ES6)で記述したいので、‘use strict’;を追加します。ES2015(ES6)で記述しない場合、2行目は必要ありませんが、とりあえず書いておきましょう。

package.json

デフォルトのpackage.jsonにbinを追加しました。今回の場合は、getnameとコマンドを打つとindex.jsが呼ばれます。

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

グローバルにインストール

npm install -gでグローバルにインストールすることで、コマンドが使えるようになります。

appの実装

いまのままだと何も表示されないので、getnameをすると名前がランダムでターミナルに表示されるようにしたいと思います。配列操作が便利なのでlodashを使います。

npm install lodash –save

#!/usr/bin/env node
'use strict';
const _  = require('lodash');
const NAMES = {
    'man' : ['Liam','Noah','Mason','Jackson','Lucas'],
    'woman': ['Emma','Olivia','Emily','Charlotte','Amelia']
};
const option = process.argv[2] || '';
let names;

if(NAMES[option]){
    names = NAMES[option];
}else{
      let list = [];
      _.each(NAMES,(val) => {
        list.push(val);
    });
    names = _.flatten(list,true);
}

console.log(names[Math.floor( Math.random() * (names.length))]);

8行目のprocess.argv[2]でコマンドから引数を受け取ることができます。
今回は引数を使ってmanを受け取ると男性の名前、womanを受け取ると女性の名前がランダムで表示されるようにし、デフォルトでは性別関係なくランダムで名前が表示されます。

記入したら再度、npm install -gでもう一度インストールします。

以下が実行例になります。

$ getname man
Mason
$ getname woman
Charlotte
$ getname
Olivia

最後はアンインストール

グローバルをむやみに汚染することは、一般的に好ましくありません。遊び終わったらアンインストールしましょう。package.jsonのnameに書かれたものが対象になります。

今回はappだったので、appをアンインストールすれば完了です。
sudo npm uninstall -g app

まとめ

フロントエンドの仕事では環境構築以外でNode.jsに触れる機会が少ないので、いつもと違う使い方を試してみると楽しめますね。みなさんも試しに遊んでみてください。

ではでは。

この記事を書いた人

ゆーた
ゆーた フロントエンドエンジニア 2015年入社
フロントエンドのゆうたです。
愛知県で働いていましたが、Web業界に転職を機に上京してきました。

釣りが好きですが最近行けてません。川村光大郎さんの釣り方が好きです。