背景
業務でちょっとしたツールを作ることってありませんか?
最近ですとGoとかも人気だと思いますが、シェルスクリプトを使う方も少なくないと思ってます。
で、「さあツール作るか」とせっせとシェルとにらめっこするんですが、いつも以下の点が面倒です。
- 引数チェック
- 引数のエラー表示
- Usageの記述
- ヘルプモードの用意 ...etc
「いやいや、ちょっとしたツールなんだからそんな細かい事気にしなくて良いやん!」と思われそうですが、自分が作ったちょっとしたツールがどこかの運用で引き継がれて使い続けられてたりすることってよくあると思うんです(良くないけど)。
こういう状況になった時でも、上で挙げた最低限の実装さえあればなんとかなる気がします。
ただ、全部実装するとなるととにかくめんどくさい。めんどくさいけどちゃんとしたい。
それならいっそスクリプトを作るスクリプトを作るか!と思い立って作ってみました。
作ったツールの紹介
以下、実行サンプルです(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表示機能や実行時に必要な引数/環境変数がすべてチェックされた状態のテンプレートが作れるため、そのツールで実現したいロジックの実装のみに集中できます。
ちなみに生成されるスクリプトのサンプルも用意してます。どんなのが生成されるのか興味がある方はこちらまで。