npm でコマンドラインツール開発事始め
node.js で Gmail API を叩きたい (https://github.com/takayukioda/cmail)
軌跡その2
Gmail をコマンドラインで確認できるツールを作りたい.
開発言語は興味あるけど中々手が出せてなかった node.js で作りたい.
そんなわけで node.js の簡単な使い方を勉強
node.js のインストール
node.js のインストール方法は色々ある
などなど.
自分はバージョンが頻繁に変わるらしいという事で nvm をインストールして,そこから最新版をインストールした.
プロジェクトの作成
Node でプロジェクト情報を package.json に書くのだけども npm init
コマンドを打つ事で対話的にプロジェクトの情報を入力できて,その情報を元に package.json を生成してくれる.
聞かれる内容は次の通り
- name
- プロジェクトの名称
- デフォルトでは今いるディレクトリの名前
- version
- プロジェクトのバージョン
- デフォルトでは
1.0.0
- description
- プロジェクトの概要
- entry point
- モジュールの公開を行っているメインとなる js ソース
- デフォルトでは index.js
- test command
- テスト用のコマンド
- git repository
- 公開されている Git のリポジトリ
- keywords
- キーワード (npm の検索等で使われるのかな?)
- author
- 開発者
- license
- 開発物のライセンス
- デフォルトでは ISC
設定の修正
また今回作るのはコマンドラインツールなので package.json に若干の修正が必要になる.
-
main
プロパティの削除- このプロパティは他の js でロードされる場合に必要であって,コマンドラインツールでは別の設定が必要
-
preferGlobal
プロパティの追加- 値は
true
-
--global
オプションを使ってインストールする事を推奨するオプション
- 値は
-
bin
プロパティの追加-
{ コマンド名: メインjsファイル }
で指定 -
main
プロパティの代わりにこちらが必要になる
-
ちなみに自分が参考にしたサイトはこちら: Writing Command Line Tool with Node
これだけでコマンドラインツールのベース完成
プロジェクトの設定をした後に npm link
コマンドを実行するとシンボリックリンクが作成されて,一々インストールしなくてもコマンドが使えるようになる.
例えば上で紹介した bin
プロパティが以下のような感じだったとすると
{
"bin": {
"toolname": "index.js"
}
}
npm link
をした後に
$ toolname
ってしただけでもうコマンドになってる.
想像以上に簡単に設定できて若干腰を抜かしてたりしてなかったり.
以下が1分で作ったシンプルなコマンドラインツール.
da0shi@qiita [~/tmp/samplebox]$ cat package.json
{
"name": "samplebox",
"version": "1.0.0",
"description": "",
"bin": {
"samplebox": "main.js"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
da0shi@qiita [~/tmp/samplebox]$ cat main.js
#!/usr/bin/env node
'use strict';
console.log(process.argv);
console.log(process.env.HOME);
da0shi@qiita [~/tmp/samplebox]$ npm link
/Users/da0shi/.nvm/versions/node/v0.12.2/bin/samplebox -> /Users/da0shi/.nvm/versions/node/v0.12.2/lib/node_modules/samplebox/main.js
/Users/da0shi/.nvm/versions/node/v0.12.2/lib/node_modules/samplebox -> /Users/da0shi/tmp/samplebox
da0shi@qiita [~/tmp/samplebox]$ samplebox
[ 'node',
'/Users/da0shi/.nvm/versions/node/v0.12.2/bin/samplebox' ]
/Users/da0shi
引数と環境変数
引数は process.argv
で取得できる.
- node
- 実行ソースの場所
が必ず入っているみたい.
環境変数は process.env
からアクセス可能.
-
process.env
で全ての環境変数 -
process.env.HOME
みたいな指定が可能
そんな感じで.