LoginSignup
11
13

More than 3 years have passed since last update.

シェルスクリプト製のツールを爆速で作るツールの紹介

Last updated at Posted at 2018-07-26

背景

業務でちょっとしたツールを作ることってありませんか?
最近ですとGoとかも人気だと思いますが、シェルスクリプトを使う方も少なくないと思ってます。

で、「さあツール作るか」とせっせとシェルとにらめっこするんですが、いつも以下の点が面倒です。

  • 引数チェック
  • 引数のエラー表示
  • Usageの記述
  • ヘルプモードの用意 ...etc

「いやいや、ちょっとしたツールなんだからそんな細かい事気にしなくて良いやん!」と思われそうですが、自分が作ったちょっとしたツールがどこかの運用で引き継がれて使い続けられてたりすることってよくあると思うんです(良くないけど)。
こういう状況になった時でも、上で挙げた最低限の実装さえあればなんとかなる気がします。
ただ、全部実装するとなるととにかくめんどくさい。めんどくさいけどちゃんとしたい。
それならいっそスクリプトを作るスクリプトを作るか!と思い立って作ってみました。

作ったツールの紹介

xshoji/bash-script-starter

以下、実行サンプルです(sample.shが生成されたスクリプト)。

bash-4.2# STARTER_URL=https://raw.githubusercontent.com/xshoji/bash-script-starter/master/ScriptStarter.sh
bash-4.2# curl -sf ${STARTER_URL} |bash -s - \
  --naming SampleScript \
  --author xshoji \
  --description "This is sample script for qiita." \
  --env PASS,xxxxx \
  --required id,1001 \
  --optional name,xshoji \
  --flag dryRun \
  --short > sample.sh

// 権限を与えて実行する
bash-4.2# chmod 755 sample.sh
bash-4.2# ./sample.sh
[!] export PASS=xxxxx is required.
[!] --id is required.

 SampleScript
----------------- author: xshoji

This is sample script for qiita.

Usage:
  ./sample.sh --id 1001 [ --name xshoji --dryRun ]

Environment variables:
  export PASS=xxxxx

Required:
  -i, --id 1001 : "1001" means id.

Optional:
  -n, --name xshoji : "xshoji" means name.
  -d, --dryRun : Enable dryRun flag.

Helper options:
  --help, --debug

このように、環境変数や必須パラメータのチェック機能つきのスクリプトのテンプレートが生成されます。
必須項目を設定して実行すると...

$ export PASS=test
$ ./sample.sh --id 10001 --name myname --dryRun

[ Environment variables ]
PASS: test

[ Required parameters ]
id: 10001

[ Optional parameters ]
name: myname
dryRun: true

スクリプトの引数の値をそのまま出力します(処理を実装する際は、この出力部分は消してしまってOKです。あくまで最初に生成されるテンプレートがそうなっているだけです。)

詳細はREADMEをご参照ください。まとめると、

  • スクリプト名(必須)
  • author
  • スクリプトの説明文
  • 必須のパラメータ
  • オプションのパラメータ
  • フラグパラメタ
  • exportが必要な環境変数

の中から自分が作るツールに必要なものを指定することで、以下の機能を持ったスクリプトの雛形を生成します。

  • --helpによるusageの表示
  • --debugによるデバッグモード
  • 必須パラメータの存在チェック、及び足りないパラメータの表示
  • exportが必要な環境変数の存在チェック、及び足りない環境変数の表示
  • 短縮パラメータの自動生成(例:--name-nでも指定可能になる)

このbash-script-starterを使うことで、「XXするツール欲しいな」と思った時に、そのツールのusage表示機能や実行時に必要な引数/環境変数がすべてチェックされた状態のテンプレートが作れるため、そのツールで実現したいロジックの実装のみに集中できます。

ちなみに生成されるスクリプトのサンプルも用意してます。どんなのが生成されるのか興味がある方はこちらまで。

11
13
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
11
13