百日半狂乱

Shut the fuck up and write some code!!

terraforming/terraformのzsh completionで快適ターミナルライフ

terraforming

terraformingは既存のインフラリソースをtfファイルやtfstateへトレースしてくれるツールで、AWS上にある既存のシステムをterraformの管理下に置きたいという要望に応えてくれる優れもの。重宝しております。

github.com

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周りはだいぶ助かるようになる。

f:id:doi-t:20160605162630p:plain:w500

オプションも完備。

f:id:doi-t:20160605162755p:plain:w500

terraformingはAWSリソース毎に繰り返し叩くことが多いので実にありがたい。

terraformzsh 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/にインストールしている理由は、OSXEl Capitanを使っていてrootlessがオンだとWarning: Failed to create the fileと怒られるから*2(ローカルの環境設定は今のことろrootlessがあってもあまり困っていないので今回も触らない)。

awscliのzsh completion

ちなみに、サブコマンドの無限増殖が止まらないawsコマンドも以下でタブ補完が効くようになる。こちらもオフィシャルでサポートされている (bashtcshも対応している)。

source /usr/local/bin/aws_zsh_completer.sh

Ref. Command Completion - AWS Command Line Interface

zsh-completions

さらに余談だけど、zsh completionのちゃんこ鍋みたいなのもある。

github.com

新規プロジェクトでもterraforming?

terraformingは、すでに稼働中のシステムのインフラをterraformの管理下におきたい、といった文脈で紹介されていると思うが、自分の場合は新規プロジェクトでもterraformingが役に立っている。例えば、必要なインフラリソースもまだ定かではない最初のプロトタイピング中は、手動でリソースを追加したり、変更したりして、ある程度固まってきた段階でterraformでの管理を開始する、などといった流れでプロジェクトが始まる場合がある。そのような状況では、terraformでの定義付けを一からやるより、terraformingでガサッと棚卸ししてしまった方が早い。terraformingのおかげでプロジェクトの成熟度に関わらず、スピードの早い方を選べるようになったと思う。

*1:慣れるとタイプ数が減るのでこれはこれで良いと思う

*2:terraformが持つインストール用のshellscriptはインストール先に/usr/share/zsh/site-functionsを指定しているのでrootlessが入っていると動かない