📝

Terraformの開発環境をvimで構築する for Mac

2022/10/29に公開

Terrafromを勉強中ですが、そもそもTerraformを始めるのにエディタの環境を整えなくては、ということで、どのエディタを使うかを色々悩んでいました。
最近の流行りでいくと、VScodeなのですがインフラエンジニアとしてVimに長年触れていたので(と言っても基本的操作しか出来ていないのですが😅)、やはりVimでコードを書いていたら素敵だなという勝手な妄想のもと、MacでVimを使ってTerraformの開発環境を作ってみることにしました。
なお、構築にあたっては、以下の記事を参考にさせていただきました。
https://qiita.com/tenderness330/items/87293c33793f92103ffe

この記事の想定読者

Vimは触ったことあるけど、Vimのプラグインはさっぱり分からない?な初心者な方を想定して書きましたので、玄人の方は所々Skipして読んでいただければ。

Homebrewのインストール

Macでパッケージマネージャーといえば、Homebrewをおすすめします。
まだインストールされていない方は、Macのターミナルから下記を実行してインストールしてください。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Terraformのインストール

HomebrewからTerraformのインストールしますが、複数バージョンが扱えるようにtfenvというパッケージでTerraformのバージョン管理をしたいと思います。

brew install tfenv   # tfenvのインストール
tfenv list-remote    # tfevでインストール可能なTerraformの一覧を表示
tfenv install 1.3.3  # ver1.3.3をインストール
tfenv use 1.3.3      # tfenvでver1.3.3を指定
tfenv list           # tfenvでどのバージョンを使っているかを確認。下記のように表示されればOK
* 1.3.3 (set by /usr/local/Cellar/tfenv/3.0.0/version)

Goのインストール

VimでTerrafromの入力補完をするのにterraform-lspというプラグインを使用しますが、
terraform-lspはGo言語で書かれているので、Goでのコンパイルが必要になります。

brew install go           # goのインストール
go get -u golang.org/x/sys  # terraform-lspのコンパイル時にエラーを出さないためのおまじない

vim-plugのインストール

Vimのプラグインを使用するためにvim-plugをインストールします。

brew install vim-plug

terraform-lspのインストール

次にterraform-lspのビルドを実施します。

git clone https://github.com/juliosueiras/terraform-lsp     # gitのリポジトリをクローン。もしgitを使いたくなければ、リポジトリからZipファイルをDL・展開して適当な場所に配置してください。
cd terraform-lsp               # clone or DL・展開したterraform-lspのディレクトリに移動
GO111MODULE=on go mod download # プロジェクトのモジュールをダウンロードする
make                           # ビルド 
make copy                      # インストール
echo 'export PATH=$PATH:~/.bin' >> ~/.zshrc  #パスを通す。
source ~/.zshrc          # .zshrcの反映

Vimプラグインのインストールとterraform-lspの設定

terraform-lspを使うには、Vimのプラグインが必要となります。
またその中でもlsp(Language Server Protocol)を使うには、中核となるlspのプラグインが必要となります。様々調べた結果、私はvim-lspを使うことにしました。そのほか、何のプラグインだか私には良く意味が分かっていないけれど😂入れといた方が便利なんだろうな的なものも、参考にした記事を元に入れておきます。というかそのまんまコピーですが🫣

vim ~/.vimrc
.vimrc
# プラグインの設定
call plug#begin('~/.vim/plugged')
  Plug 'prabirshrestha/async.vim'
  Plug 'prabirshrestha/vim-lsp'
  Plug 'prabirshrestha/asyncomplete.vim'
  Plug 'prabirshrestha/asyncomplete-lsp.vim'
  Plug 'hashivim/vim-terraform' , { 'for': 'terraform'}
call plug#end()


# terraform-lspの設定
if executable('terraform-lsp')
  au User lsp_setup call lsp#register_server({
    \ 'name': 'terraform-lsp',
    \ 'cmd': {server_info->['terraform-lsp']},
    \ 'whitelist': ['terraform','tf'],
    \ })
endif

編集ができたら上書き保存します。
そのあとで、記載したプラグインのインストールを実施します。

vim   # vimを起動

" :PlugInstall " でプラグインをインストールします。

インストールが終わった後は、" :q " で抜けます。

Terraformの入力補完をONにする

ここまでで、Vimでterraformの入力補完ができる環境は整いました。
あとは、"terraform init" を実行すると、実際に入力補完が使えるようになります。

tfファイルを作成し、下記の内容を追記します。

main.tf
provider aws {
}

追記できたら、terraform init を実行します。。

terraform init

そして再度、main.tfファイルを開くと…🤩

入力補完できましたでしょうか?
お疲れ様でした👍🏻

Discussion