LoginSignup
109

More than 5 years have passed since last update.

npm でコマンドラインツール開発事始め

Last updated at Posted at 2015-05-15

npm でコマンドラインツール開発事始め

node.js で Gmail API を叩きたい (https://github.com/takayukioda/cmail)
軌跡その2

Gmail をコマンドラインで確認できるツールを作りたい.

開発言語は興味あるけど中々手が出せてなかった node.js で作りたい.

そんなわけで node.js の簡単な使い方を勉強

node.js のインストール

node.js のインストール方法は色々ある

  • 公式ホームページからダウンロードしてインストール
  • Homebrew 等のパッケージ管理ツールからインストール
  • nvm 等の node 用のバージョン管理ツールを利用してインストール

などなど.
自分はバージョンが頻繁に変わるらしいという事で 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 みたいな指定が可能

そんな感じで.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
109