#最初に
NodeJSでこんな感じのパラメタを渡すアプリを作りたいとします
node mynote add --title="title" --body="message body"
addは機能名、--titleはタイトル、--bodyは本文だったとします。
皆さん、こんな時どうします?
ゴリゴリ処理を書くこともできますが、結構面倒ですよね。
さらに別なlistという機能を追加してみたい…ってなったら…
ということで、今回は簡単パラメタパーサー”yargs"を紹介します。
yargsはnodeプログラム向けのパーサーです。
https://github.com/yargs/yargs
#インストール
インストールはnpmコマンドで行います。
npm i yargs
#使い方
基本的な手順は以下の通りです
- requireする
- コマンドを定義する
- parseする
コード
では、実際にコードを書いてみます。
ここではaddというメソッドに対しtitleとbodyというパラメタを持ったアプリを作り、以下のような形で呼び出せるようにしたいと思います。
また、listという別機能も用意したいと思います。
node app.js add --title="my title" --body="message body"
長くないので、ソースコードを全て載せます。
const yargs = require('yargs')
yargs.command({
command: 'add',
describe : '新規にノートを追加します',
builder: {
title: {
describe: 'ノートのタイトル',
demandOption: true,
type: 'string'
},
body: {
describe: '本文',
demandOption: true,
type: 'string'
}
},
handler(argv) {
// TODO: write a note to storage
console.log(`add is called. title="${argv.title}", body="${argv.body}""`)
}
})
yargs.command({
command: 'list',
describe: '作成したノートの一覧を表示します',
builder: {
keyword: {
describe: '検索キーワードを指定できます',
demandOption: false,
type: 'string'
}
},
handler(argv){
// TODO: search string from storage
console.log(`list is called. keyword=${argv.keyword}`)
}
})
yargs.parse()
注目すべきはyargs.commandのところです。ここで機能、引数、実際の処理を定義します。
複数機能ある場合はyargs.commandを複数記述します。
- command: 機能
- describe: 機能の説明
- builder: パラメタを定義します。titleとすることで"--title"というオプションが追加され、demandOptionで必須かどうかを指定しています。
- handler: 実際の処理を記述します。この中にいろいろ書くとごちゃごちゃするので、実際の処理は外に置いて呼び出すだけにしましょう
ここではaddとlistという機能を追加しています。
最後のparse()で準備完了です。
#実験
では、きちんと動作するか見てみます。
まずはaddを確認。きちんと動いています。
>node app.js add --title="hello" --body="my mseeage"
add is called. title="hello", body="my mseeage"
では必須パラメタを指定しないとどうなるか見てみます。
>node app.js add --title="hello"
app2.js add
新規にノートを追加します
オプション:
--help ヘルプを表示 [真偽]
--version バージョンを表示 [真偽]
--title ノートのタイトル [文字列] [必須]
--body 本文 [文字列] [必須]
必須の引数が見つかりません: body
エラーとなり何が足りないかもきちんと表示されますね。
2つ目の機能listが使えるか見てみます。
>node app.js list
list is called. keyword=undefined
listの処理が呼び出されました。また、こちらは"keyword"パラメタがオプションとなっているため、指定しなくてもエラーにはなりません。
ヘルプも自動で追加されていて便利ですね。
>node app.js --help
app.js [コマンド]
コマンド:
app.js add 新規にノートを追加します
app.js list 作成したノートの一覧を表示します
オプション:
--help ヘルプを表示 [真偽]
--version バージョンを表示 [真偽]
#まとめ
NodeはWebのバックエンドとして使うことが多いのですが、折角覚えた知識… ちょっとしたツールとしてスクリプト作りたいなんて時に便利です。
試してみてください。