はじめに
前回はコマンドライン引数の受け取りについてまとめました。
今回は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を用いて表示してみます。
constyargs=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のコマンドをカスタマイズしてみます。
constyargs=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を用いて、オプションを追加できます。
constyargs=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
オプションが上手く変換されて、コンソールに出力されました。