LoginSignup
0
0

More than 5 years have passed since last update.

CLI作成用パッケージ「urfave/cli」を用いた際のUSAGE内のコマンド名の固定化

Posted at

「任意の文字列や行をハイライトするツールをGo言語で作成してみた」に書いたツールを作成時に、Go言語のコマンドラインツール作成用パッケージとしてurfave/cliを使用した。
その際に、アプリケーションのヘルプメッセージ内のUSAGEの部分のコマンド名を固定化するための手法を調べたので、解決策を残しておく。

困ったこと

以下のように設定した場合、

app := cli.NewApp()
app.Name = "abc"

abcコマンドのヘルプメッセージ

$ ./abc -h
NAME:
   abc - sample cli

USAGE:
   abc [global options] command [command options] [arguments...]

abcコマンドのサブコマンドaaaのヘルプメッセージ

$ ./abc aaa -h
NAME:
   abc aaa - sample command

USAGE:
   abc aaa [command options] [arguments...]

のような出力が得られることになる。
表示されているabcのうち、最初のabc以外は、実行時のアプリケーションの名前を参照している。

なので、同じアプリケーションでもリネームされてしまうと

$ mv abc renamed
$ ./renamed -h
NAME:
   abc - sample cli

USAGE:
   renamed [global options] command [command options] [arguments...]
$ ./renamed aaa -h
NAME:
   renamed aaa - sample command

USAGE:
   renamed aaa [command options] [arguments...]

のようになってしまい、もとのアプリケーションの使い方が上書きされてしまう。

上書きされたくなかったのでちょっと調べてみた。

解決策

以下を設定することでabcの部分を固定可能であることがわかった。

app.HelpName = app.Name // 今回はアプリケーション名と同じにした

これによって、実際のアプリケーションの実行名を参照していた部分がapp.HelpNameを参照してくれるため、リネームされても

$ mv abc renamed
$ ./renamed -h
NAME:
   abc - sample cli

USAGE:
   abc [global options] command [command options] [arguments...]
$ ./renamed aaa -h
NAME:
   abc aaa - sample command

USAGE:
   abc aaa [command options] [arguments...]

のようになる。

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