Vim/VS CodeでTerraformの入力補完とオートフォーマットを導入する
VimとVS Codeでtfファイルを編集→保存した際に、自動でフォーマッターが実行されるようにしました。設定内容をシェアします。
Terraformのフォーマッターについて
terraformにはフォーマッターが標準で搭載されており、下記コマンドでフォーマットすることができます。
terraform fmt [OPTIONS] [DIRECTORY]
ディレクトリの全てのファイルをフォーマットしたり、差分を見たりできて便利です。
この terraform fmt
を、tfファイル保存時に自動で実行されるように設定します。
事前準備
Terraformをインストールします。バージョン管理ができるtfenvで導入するのがおすすめです。
# tfenvをgit cloneしてパスを通す
git clone https://github.com/tfutils/tfenv.git ~/.tfenv
ln -s ~/.tfenv/bin/* /usr/local/bin
# 最新のTerraformをインストール
tfenv install latest
tfenv use latest
# 現在のTerraformのバージョン確認
tfenv list
バージョンを指定したい場合は下記のようにします。
# 利用できるバージョンを確認
tfenv list-remote
# バージョン0.12.25をインストールする場合
tfenv install 0.12.25
Vimの設定
Vimで自動整形する場合の設定です。
自動整形
github.com/hashivim/vim-terraformというプラグインがあります。
これを使うと.vimrcに下記を追加するだけで、tfファイル保存時に自動整形されます。
let g:terraform_fmt_on_save=1
入力補完
最近はLSP、Language Server Protocolを使うのが主流です。
VimでLSPを使う場合、 vim-lsp
+ vim-lsp-settings
または coc.nvim
というプラグインがよく使われているかと思います(20200525現在)。
vim-lspとvim-lsp-settingsの組み合わせはシンプルで使いやすく、おすすめです。
LSPの設定ができたらターミナルで terraform init
を実行すると入力補完ができるようになります。
VS Codeの設定
VS Codeの場合はvscode-terraformというプラグインを使います。
https://marketplace.visualstudio.com/items?itemName=mauve.terraform
入力補完に関しては、上記プラグインのインストールすることで使用可能になります。
自動整形
エクステンションの設定画面を開きFormat On Saveをオンにすることで、フォーマッターがかかるようになります。
settings.jsonに editor.formatOnSave
の設定が追加されます。
Syntax関連のエラーが出た場合
私の環境では、Language Serverを有効にするとSyntax関連のエラーが出ました。
下記のようにLanguage Serverの設定をsettings.jsonに追加するとエラーが解消されたので、悩んでいる方は試してみてください。
"terraform.languageServer": {
"enabled": true,
"args": []
}
Terraform v0.12.3 - Syntax check broken: Unknown token IDENT
まとめ
これでterraformのコードを綺麗にフォーマットできるようになりました。そのうち気が向いたらtflintも導入しようかなと思います。