オプションで長くなるAWS CLIをスニペットマネージャーで簡単に実行する
こんにちは。大阪の市田です。
今回はコマンドラインの実行を簡単に実行できるスニペットマネージャをご紹介します。
背景
覚えられないコマンドの存在
普段の業務では、MacからAWS CLIの実行やサーバへのログインなどを行っています。
しかし、どうしても覚えられないコマンドってありますよね?
例えば、AWS CLIでオプションをたくさん付けたり、jq
で書式を整理して実行したりする時、どうしてもコマンドが長くなってしまいます。
下記は、EC2インスタンスに対して、インスタンスタイプとプライベートIP、Nameタグの内容を表示するAWS CLIの内容です。
aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | .InstanceType + "\t" + .PrivateIpAddress + "\t" + (.Tags[]? | select(.Key == "Name")).Value'
これを「自分のメモからコピペ」でもいいんですが、もっと簡単に効率的に管理したいと思います。
スニペットマネージャ「pet」
ということで、Go製の「pet」というコマンドラインのスニペットマネージャをご紹介します。シンプルなのでとても使いやすいです。
knqyf263/pet: Simple command-line snippet manager, written in Go.
petでできること
- コマンドスニペットを簡単に登録できる
- スニペットはインタラクティブに検索できる
- スニペットを直接実行できる
- スニペットの内容はTOML形式のファイルで管理できる
- Gistと同期できる
便利そうですね。
petを使ってAWS CLI実行
petを使うと、最初に紹介したAWS CLIの実行が下記のように簡単に登録、実行できるようになります。細かい使い方はこの後で説明しています。
インストール
petの利用にはpeco
がインストールされている必要があります。もしインストールされていなければ、最初にインストールしておきます。
brew install peco
次に、petのインストール方法はいくつかありますが、Go製なので今回はバイナリをそのまま利用することにします。下記から環境に合わせたものをダウンロードして下さい。
ダウンロードできたら適当なパスに保存します。私の場合は/usr/local/bin
に保存しました。
petでコマンド管理
では早速使ってみます。
コマンド登録
まずは、簡単にls -l
を登録してみます。登録はnew
コマンドを使います。
「Command:」で登録したいコマンドを入力し、「Description:」でコマンドの説明を記載します。
pet new Command: ls -l Description: show all files
もう一つ登録してみます。
pet new Command: curl ifconfig.io Description: show my ip address
登録コマンドの表示
登録したコマンドを表示するにはlist
コマンドを使います。下記のように登録されたコマンド内容が表示されます。
pet list Description: show all files Command: ls -l ------------------------------ Description: show my ip address Command: curl ifconfig.io ------------------------------
登録内容の保存ファイル
登録した内容はTOML形式のファイルに保存されています。このファイルのパスはconfigure
コマンドで確認出来ます。
pet configure
configure
コマンドを実行すると、指定されているエディタ(デフォルトはvim)でpetのコンフィグファイル(~/.config/pet/config.toml
)が開きます。
[General] snippetfile = "/Users/xxxxxxxxx/.config/pet/snippet.toml" editor = "vim" column = 40 selectcmd = "peco" [Gist] file_name = "pet-snippet.toml" access_token = "" gist_id = ""
ここで設定されているパスのTOMLファイルを直接編集することも出来ますが、スニペットの編集にはedit
コマンドが利用できます。
editコマンドにより、指定のエディタでTOMLファイルを開くことが出来ます。
pet edit
コマンドの実行
exec
コマンドで登録したスニペットからコマンドを実行します。
pet exec
下記のように実行したいコマンドを選択できるようになります。さらにQuery
でインタラクティブに検索することも出来ます。
実行したいコマンドを選択してEnterで実行できます。
コマンドの検索
search
コマンドで、コマンドを実行せずに、実行したいコマンドを検索、表示することも可能です。
pet search
先程のexec
コマンドのように対象をインタラクティブに検索できます。
対象を選択すると登録されている内容が表示されます。コマンドの引数だけ変えたい場合などに利用できます。
Gistとの同期
後、少し変わった機能としてGistとの同期を行うことが出来ます。例えば、他のPCで同じスニペット内容を利用したい場合に便利です。
pet configure
で開く設定ファイルに設定箇所があります。ここにGistへのアクセストークンと対象のGist IDを指定します。
[Gist] file_name = "pet-snippet.toml" access_token = "" gist_id = ""
同期させるにはsync
コマンドで-u
オプションを使います。
pet sync -u Upload success
これでローカルのスニペットファイルの内容がGist上で同期されます。ファイル名は先程の設定ファイルのfile_name
で指定した名前になります。デフォルトで「pet-snippet.toml」というファイル名です。
sync
コマンドをオプション無しで実行するとGistの内容をダウンロードして、petで利用できるようになります。
確認してみます。まずはpet edit
で登録内容を削除します。
pet list (何も表示されない。つまり登録がない状態。)
次にスニペットの内容をダウンロードしてみます。
pet sync Download success
ダウンロードできたらリスト表示してみます。確かに同じスニペットが使えるようになっています。
pet list Description: show all files Command: ls -l ------------------------------ Description: show my ip address Command: curl ifconfig.io ------------------------------
スニペットをクリップボードにコピー
pbcopy
を使うことでスニペット内容をクリップボードにコピー出来ます。例えばクリップボードに実行したいスニペットをコピーした状態で、サーバにSSHログインしてコピー内容を貼り付けて実行、といった使い道があります。
pet search | pbcopy
上記のコマンドを実行すると、pet search
の表示になるので、コピーしたいものを選択します。
この状態でクリップボードに選択したコマンドがコピーされています。後は利用しているPCに合わせたペーストを行うだけです。
特別なペースト用の実行はありません。WindowsならCtrl + V
というように、OS標準のペーストを実行するだけです。
直前のコマンドを簡単に登録
コマンドの登録はpet new
でも行えますが、直前のコマンドならもっと簡単に登録できます。
下記の内容を~/.zshrc
を追加します。
function prev() { PREV=$(fc -lrn | head -n 1) sh -c "pet new `printf %q "$PREV"`" }
zshで動くのでシェルをzshに変更します。
zsh
登録したいコマンドを実行します。
date +%Y%m%d%H%M%S
コマンドの実行後にprev
と入力すると、上記のコマンドに対してpet new
した時のDescriptionの入力待ちになります。
後は、Descriptionを入力するだけで完了です。便利ですね。
prev Command: date +%Y%m%d%H%M%S Description: (ここで入力待ちになります)
最後に
AWS CLIはどうしても1回のコマンド内容が長くなりがちですが、petのようなコマンドスニペットが利用できると作業効率の向上が期待できそうです。
私の場合は、長いコマンドやスペル的にどうしても覚えづらいコマンド(Raspberry PiへのSSHログイン等)を登録して使っています。
なかなか便利ですので、是非一度お試し頂ければと思います。
以上になります。