8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

KDDI EngineerAdvent Calendar 2020

Day 8

TypeScriptでコマンドライン引数を取り扱う

Last updated at Posted at 2020-12-07

#概要

いつもはちょっとした処理をShellScriptで書きがちだったのですが、TypeScriptで書いてみたところ、コマンドライン引数の取り扱いが綺麗にできたので、備忘録として残しておきます。

#ShellScriptでのコマンドライン引数

Shellでコマンドライン引数をパースして、必須引数の存在チェックや説明メッセージを追加したい場合、色々書き方はあるかと思いますが、下記の様な感じになります。

script.sh
#!/usr/bin/env bash
set -e

function usage() {
    cat <<EOS
  Usage: $0
  [REQUIRED]
    --account         : AWS account to deploy.
    --stage           : Stage name of the resource to deploy.
  [OPTIONS]
    --params          : Parameters required for deployment.
EOS
    exit 1
}

ARGS=($@)
for ((i = 0; i < ${#ARGS[@]}; i++)); do
    case "${ARGS[$i]}" in
    "--account")
        i=$(expr $i + 1)
        ACCOUNT="${ARGS[$i]}"
        ;;
    "--stage")
        i=$(expr $i + 1)
       STAGE="${ARGS[$i]}"
        ;;
    "--params")
        i=$(expr $i + 1)
       PARAMS="${ARGS[$i]}"
        ;;
    *)
        usage
        ;;
    esac
done

if [ -z "${ACCOUNT}" -o -z "${STAGE}" ]; then
    usage
fi

#TypeScriptでのコマンドライン引数

上と同じ様なものをTypeScriptで作成しようとした場合、yargsを利用するとこんな感じで簡単に実現できます。

script.ts
import * as yargs from "yargs";

const argv = yargs
  .option("account", {
    description: "AWS account to deploy.",
    demandOption: true,
  })
  .option("stage", {
    description: "Stage name of the resource to deploy.",
    demandOption: true,
  })
  .option("params", {
    description: "Parameters required for deployment.",
    demandOption: false,
  })
  .help().argv;

console.log(argv);
console.log(`${argv.account}`);
console.log(`${argv.stage}`);
console.log(`${argv.params}`);

以下の例では、引数を全て入力してスクリプトを実行しています。

> ts-node script.ts --account DEV --stage dev --params test 
{
  _: [],
  account: 'DEV',
  stage: 'dev',
  params: 'test',
  '$0': 'script.ts'
}
DEV
dev
test

以下の例では、引数が不足している状態でスクリプトを実行しています。
説明メッセージを綺麗に表示してくれます。

> ts-node script.ts
オプション:
  --version  バージョンを表示                                             [真偽]
  --account  AWS account to deploy.                                   [必須]
  --stage    Stage name of the resource to deploy.                    [必須]
  --params   Parameters required for deployment.
  --help     ヘルプを表示                                                [真偽]

必須の引数が見つかりません: account, stage

#まとめ
TypeScriptを利用するプロジェクトでちょっとしたスクリプトを作る際は、ShellScriptよりもTypeScript × yargsを使うと便利だと感じました。

8
2
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
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?