Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

Node.jsを勉強する⑦ - npmモジュールyargsを使った引数のオプションの処理

$
0
0

はじめに

前回はコマンドライン引数の受け取りについてまとめました。
今回は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に表示されるようにコードを書きます。

app.js
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を用いて表示してみます。

app.js
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のコマンドをカスタマイズしてみます。

app.js
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を用いて、オプションを追加できます。

app.js
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

オプションが上手く変換されて、コンソールに出力されました。


Viewing all articles
Browse latest Browse all 8691

Trending Articles