はじめに
前回はコマンドライン引数の受け取りについてまとめました。
今回はnpmモジュールyargsを使ったオプションの変換を記事にします。yargsを利用することで、ターミナルでコマンドを実行する際に、引数のオプションを入れた場合、それを引数として変換できます。
教材
Udemy
The Complete Node.js Developer Course (3rd Edition)
https://www.udemy.com/course/the-complete-nodejs-developer-course-2/
解決したいこと
processを用いることで、コマンドライン引数の受け取りはできましたが、引数のオプションを入力しても上手く変換されません。
まずは、こちらから見ていきましょう。app.jsというファイルを作成し、コマンドライン引数がconsoleに表示されるようにコードを書きます。
console.log(process.argv[2])
それでは、こちらのファイルを引数addBookとオプション title="Kokoro"を入れて実行してみます。
node app.js addBook --title="Kokoro"
結果は以下のようになり、オプションである"Kokoro"をうまく読み込んでくれません。(--title="Kokoro"全体が2つめの引数として認識されている)
addBook
こちらをnpmのyargsを使って解決します。
yargsのインストール
ターミナルにてインストールのコマンドを実行します。npm公式のyargsのページはこちら
//npmを開始していない場合はこちらも実行
npm init
npm i yargs
次に、requireを用いて、yargsをapp.js内で使えるようにします。コマンドライン引数をyargs.argvを用いて表示してみます。
const yargs = require('yargs')
console.log(yargs.argv);
同じ引数を入れて、ファイルを実行すると、以下のように出力されます。
node app.js addBook --title="Kokoro"
{ _: [ 'addBook' ], title: 'Kokoro', '$0': 'app.js' }
引数 addBookに対して、titleをプロパティとして認識し、Kokoroを値として出力できています。
ちなみに、'$0'は実行されたファイル名を指します。app.jsが実行されていることがわかります。
コマンドをカスタマイズする
次に、yargsのコマンドをカスタマイズしてみます。
const yargs = require('yargs')
// 以下のコマンドを作作成します。
yargs.command({
//コマンド名
command: 'addBook',
//以下で、コメントを残しておきます。
describe: 'Add a new Book',
//以下の処理を実行します
handler: function(){
console.log("Add a new book!");
}
})
//yargsを実行する
yargs.parse()
コマンドが作成されているかターミナルから確認してみます。
node app.js --help
Commands:
app.js addBook Add a new Book
Options:
--help Show help [boolean]
--version Show version number [boolean]
コマンドに、 addBookと設定したコメントが追加されています。
実際に、コマンドを実行してみましょう。
node app.js addBook
Add a new book!
処理には、"Add a new book!"をコンソールに出力する処理を書きましたが、無事に表示されました。
コマンドに引数のオプションを追加する
作成したコマンドには、builderを用いて、オプションを追加できます。
const yargs = require('yargs')
yargs.command({
command: 'addBook',
describe: 'Add a new Book',
//オプション引数を追加
builder: {
title:{
//処理の内容をメモ
describe: "Add a book title",
//必須の引数にするか指定
demandOption: true,
//データ型を指定
type: "string"
}
},
//オプションを表示するように変更する
handler: function(argv){
console.log("Adding " + argv.title);
},
})
yargs.parse();
ターミナルでオプションのtitleを入れてファイルを実行します。
node app.js addBook --title="Kokoro"
Adding Kokoro
オプションが上手く変換されて、コンソールに出力されました。