しばやん雑記

Azure Serverless とメイドさんが大好きなフリーランスのプログラマーのブログ

Windows と Ubuntu (WSL 2) で VS Code Terraform 拡張の入力補完を使えるようにする

Terraform 定義を書く量が増えてきたので、快適な環境のために Terraform 定義の入力補完が動くように整えることにしました。激しく今更感がありますが、これまで真面目にセットアップせずに使っていました。

ARM Template の DSL である Bicep が微妙に注目されているようですが、サンプルを見た感じでは ARM Template のしんどい部分が割とそのままで、API Version を意識させられるのも変わっていないので、今後も Terraform を使っていくつもりです。

話を Terraform に戻しますが、Visual Studio Code で Terraform 定義を書いている人は、この拡張をみんな入れていると思います。ちょっと前に Hashicorp 公式になった拡張です。

Language Server は別リポジトリで配布されていますが、Terraform 拡張が自動でインストールとアップデートを行ってくれるので、Changelog 以外は気にしなくてもよさそうです。

基本的に Windows 10 上の VS Code で Terraform 定義を書いてきましたが、よくわからないエラーが出るのをそのまま放置してきたのを、そろそろきっちり直しておくかという気持ちになったというだけです。

ついでに WSL 2 上の Ubuntu でも同じように使えるのか試しておいたので手順を書いています。

Windows 10 で利用する

公式のチュートリアルでは Windows への Terraform インストール用に Chocolatey を使う方法が書かれていますが、個人的に Chocolatey は好きではないので手動で管理することにしました。

ユーザープロファイル以下に適当なディレクトリを作って、そこに PATH を通しています。scoop でも良さそうですが、こっちもあまり好きではないので。

f:id:shiba-yan:20200910013743p:plain

winget が標準で入って Terraform が追加されたら移行を考えたいところですが、Windows のパッケージマネージャ周りは混沌としていて決定版が出るまで時間がかかりそうです。

Terraform CLI への PATH が通っていれば VS Code を開いてもエラーが出なくなっているはずです。

ただし terraform init を実行せずに VS Code で開くと以下のような警告が出るので、適切な場所で実行して必要な Provider のダウンロードと初期化を行っておきます。

f:id:shiba-yan:20200910011036p:plain

実行後は VS Code を再起動しないと反映されない感じでした。大人しく開きなおしました。

開きなおした後は文字の入力や Ctrl+Space を押したタイミングで、以下のように見慣れた候補一覧が表示されるようになりました。型も表示されているのが良い感じです。

f:id:shiba-yan:20200910011054p:plain

今のところ ip_restriction などの一部のパラメータは入力補完が動いていないようですが、これは Provider 側のスキーマ定義に問題があるような気がしています。

Resource への入力補完も動作するので、それっぽい名前を入れて候補一覧から必要なものを探すという、Visual Studio 使いなら一般的な方法で Terraform 定義を書いていけるのが良いです。

f:id:shiba-yan:20200910011044p:plain

まだ多少制約はありますが、生産性が圧倒的に高まるのできっちり使えるようにしておきたいところです。

WSL 2 上の Ubuntu で利用する

最近は VS Code と WSL 2 を組み合わせてコードを書いている人が多いので、一応 Terraform の入力補完が動くか確認しておきました。まずは Terraform CLI を apt-get を使ってインストールしますが、チュートリアルにコマンドが書いてあるのでコピペで良いです。

CLI のインストールが終われば VS Code の Terraform 拡張をインストールします。WSL 2 を見る形で VS Code が立ち上げればインストール出来ます。

f:id:shiba-yan:20200910013249p:plain

その後は適切な場所で terraform init を実行して Provider のダウンロードと初期化を行って、VS Code を再起動すれば入力補完が使えるようになりました。とても簡単な手順でした。

f:id:shiba-yan:20200910013007p:plain

ぱっと見は Windows 上で動いているものと変わらないですが、WSL 2 上の Ubuntu で動作しています。タイトルバーには一応 WSL 2 上であることが表記されています。

実行中のプロセスを確認してみると、ちゃんと Language Server は WSL 2 側で動作しています。

f:id:shiba-yan:20200910013306p:plain

謎の技術感が凄いですが、違いをあまり気にすることなく VS Code で Windows と Ubuntu を混ぜて使えるのはやばいな、と今更ながら思いました。

おまけ : 保存時に terraform fmt を実行する

昔は設定画面からサクッとオンに出来たようですが、今の Terraform 拡張では .vscode/settings.json に手動で以下のような設定を追加する必要があるようです。

{
    "[terraform]": {
        "editor.formatOnSave": true
    }
}

これで保存のタイミングでインデントなどが自動で修正されるので快適になりました。