terraforming/terraformのzsh completionで快適ターミナルライフ
terraforming
terraformingは既存のインフラリソースをtfファイルやtfstateへトレースしてくれるツールで、AWS上にある既存のシステムをterraformの管理下に置きたいという要望に応えてくれる優れもの。重宝しております。
terraformingのzsh completion
terraformingは対象となるAWSリソースを指定するサブコマンドとしてその略称を採用している*1ので、しばらく使わないでいたりすると毎回調べ直しになっていて辛いなーと思っていた所、つい先月末にリリースされたterraformming v0.8.0に、zsh completionなるものが追加されていたので早速インストールしてみた。
例えば、Githubから直接/usr/local/share/zsh/site-functions/
以下へ配置する。
curl https://raw.githubusercontent.com/dtan4/terraforming/master/contrib/zsh-completion/_terraforming -o /usr/local/share/zsh/site-functions/_terraforming
適用後は以下のような感じでタブ補完が効くようになる。中でもIAM周りはだいぶ助かるようになる。
オプションも完備。
terraformingはAWSリソース毎に繰り返し叩くことが多いので実にありがたい。
terraformのzsh completion
(2018/11/19 更新) terraformもすっかり進化して、zsh completionのインストール方法も簡単になっていた。
terraform/contrib/zsh-completion at master · hashicorp/terraform · GitHub
$ terraform -install-autocomplete
oh-my-zshを使っているならこちらも。
oh-my-zsh/README.md at 547a6ce260362b06e86a9c366dc29984c0954124 · robbyrussell/oh-my-zsh · GitHub
上記のzsh completionを設定する方法を調べてたらterraformもzsh completionを持っていることに気がついた。これでterraformをローカルから叩く場合でも快適に。
~~curl https://raw.githubusercontent.com/hashicorp/terraform/master/contrib/zsh-completion/_terraform -o /usr/local/share/zsh/site-functions/_terraform~~
細かいけど、/usr/share/zsh/site-functions/
ではなく/usr/local/share/zsh/site-functions/
にインストールしている理由は、OSXのEl Capitanを使っていてrootlessがオンだとWarning: Failed to create the file
と怒られるから*2(ローカルの環境設定は今のことろrootlessがあってもあまり困っていないので今回も触らない)。
awscliのzsh completion
ちなみに、サブコマンドの無限増殖が止まらないawsコマンドも以下でタブ補完が効くようになる。こちらもオフィシャルでサポートされている (bashとtcshも対応している)。
source /usr/local/bin/aws_zsh_completer.sh
Ref. Command Completion - AWS Command Line Interface
zsh-completions
さらに余談だけど、zsh completionのちゃんこ鍋みたいなのもある。
新規プロジェクトでもterraforming?
terraformingは、すでに稼働中のシステムのインフラをterraformの管理下におきたい、といった文脈で紹介されていると思うが、自分の場合は新規プロジェクトでもterraformingが役に立っている。例えば、必要なインフラリソースもまだ定かではない最初のプロトタイピング中は、手動でリソースを追加したり、変更したりして、ある程度固まってきた段階でterraformでの管理を開始する、などといった流れでプロジェクトが始まる場合がある。そのような状況では、terraformでの定義付けを一からやるより、terraformingでガサッと棚卸ししてしまった方が早い。terraformingのおかげでプロジェクトの成熟度に関わらず、スピードの早い方を選べるようになったと思う。
*1:慣れるとタイプ数が減るのでこれはこれで良いと思う
*2:terraformが持つインストール用のshellscriptはインストール先に/usr/share/zsh/site-functionsを指定しているのでrootlessが入っていると動かない