All Articles

Golangでコマンドスニペットツール書いた

ちょっとだけ便利なコマンドツール

日頃の業務でよく使い、かつ長いコマンドを打つことがあると思いますが、それをスニペットとして管理して、alias的に呼び出せるツールを作りました。リポジトリはこちら:

https://github.com/ysugimoto/gang

Node実装の bang、Ruby実装の boom。これらのGolang版みたいなものです。機能はちょっと増やしてますが。やっぱりコマンドラインツール作るのはGolangが楽でいいですね。

以下、導入方法と使い方など。

導入

go getからインストールできますが、今回は初めてhomebrewからのインストールも出来るようにしてみました。

$ go get github.com/ysugimoto/gang/cmd/gang

または

$ brew tap ysugimoto/gang
$ brew install gang

お好きな方でどうぞ。

使い方はヘルプの通りですが、コマンドリストを通常のターミナルリストとpecoで表示できるようにしています。あと、ギャングってことで、サブコマンドがそれっぽくなってます…

$ gang mode ls|peco

でスイッチできて、pecoの場合は選択したものを、ターミナルリストの場合はインデックス指定でコマンドを実行できます。 その他追加機能として、コマンド指定時にプレースホルダを指定しておいて、実行時に任意の値をバインドして実行できます。例えばgitでブランチをスイッチした場合、ブランチ名をプレースホルダにしておくとか:

$ gang bullet co "git checkout {:branch}"
> [gang] Command "co" Bulleted.
$ gang co
> [gang] Execute command needs parameter: git checkout {:branch}
> [gang] Bind Parameter "branch" is:

と聞かれるので、ブランチ名を入れればチェックアウトできます。さらに-dオプションでカレントディレクトリを指定しておけば、どこにいてもスイッチできます…(が、あんまり便利じゃないような気もしないでもない)

ま、まぁ詳しくはREADMEを参照ください。

今後やりたい機能

複数の環境でコマンドの同期と、ネットワークを介して複数のリモートでコマンドを実行するオーケストリゼーション(といっていいのかな?)を実装しようかなって思ってます。そういうケースが無ければ作らないかもしれませんが。

ターミナルの色付けとか結構頑張ったので、よろしければどうぞ。 現場からは以上です。