業務でちょっとした検証用のツールや、調査用のコマンドラインアプリケーションを Go 言語で作成することがよくあります。
基本自分しか使わないのですが、何かきっかけでスクリプトを他の人に配ることもあり、このとき main.go のみで完結するようにしておくと、人に配るときや何らかの証跡と一緒に残しておく際もテキストファイル一つ渡せば済むので大変便利です。
また、配布先の人がビルドする時もトラブルが少ないです。
このため、外部のライブラリが必ず必要という状況でない限りは、できるだけ Go 標準ライブラリだけでツールを作成するようにしています。
ただ、Go 標準の flag パッケージはコマンドライン引数のパースを簡単に実装できる反面、 Usage の出力があまり綺麗ではなかったり、ロングオプションを扱うのが難しいなど色々使い勝手が悪い部分があります。
先ほど説明した通り、 main.go のみで実装することにこだわりたかったため、これまで、 spf13/cobra や urfave/cli のような外部ライブラリを使わずに、どうにかして Usage を綺麗にしたり ロングオプションを扱えるようにしたりできないか試行錯誤したので、その実装方法について何回かに分けて紹介したいと思います。
今回は「 Usage を綺麗に整形して見やすくする 」方法について紹介します。
ここで紹介する方法(以降、呼びやすさのために「 Custom Usage 」と表現します)を使うと、標準の flag パッケージだけで以下のような綺麗な Usage を出力できるようになります。
$ go run main.go -h
Usage: main [OPTIONS]
Description:
A sample command demonstrating simple template usage in Go CLI applications.
Options:
-f <string> (required) File path
-d Debug mode
-l <int> Index of line (default 10)
-u <string> URL (default "https://httpbin.org/get")
-w <duration> Duration of wait seconds (e.g., 1s, 500ms, 2m) (default 1s)
Go 標準の flag パッケージだけにしては結構見やすくなっているのではないでしょうか?
興味があれば、ぜひ詳細を読んでみてください。
続きを読む