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

https://github.com/hashicorp/vscode-terraform/issues/195

まとめ

これでterraformのコードを綺麗にフォーマットできるようになりました。そのうち気が向いたらtflintも導入しようかなと思います。