LoginSignup
0
0

More than 3 years have passed since last update.

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

Posted at

はじめに

前回はコマンドライン引数の受け取りについてまとめました。
今回は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
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のコマンドをカスタマイズしてみます。

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

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

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

0
0
0

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
0
0