こんにちは、フロントエンドエンジニアのゆーたです。
普段は環境構築でしか使っていない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に触れる機会が少ないので、いつもと違う使い方を試してみると楽しめますね。みなさんも試しに遊んでみてください。
ではでは。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。