🐇

VimでTerraformのタグジャンプ

2023/06/17に公開

Terraformのコードを書くのにVimを使っているのですが、コードを書いていると "あるある" なのが、この定義をどこに書いてたっけ?とコード内を探しまわること(私だけ?)。
単純に検索すれば良いのですが、もっと簡単に定義を探したい(タグジャンプしたい)ということでctagsを使うことにしました。
ところがMacにプリインストールされているctagsではTerraform構文に対応しておらず、タグジャンプできません。そこで、今回はuniversal-ctags を使ってTerraformの構文でもタグジャンプできるように環境構築をしていきます。

この記事の想定読者

  • MacでTerraformのコードを書くのにVimを使っているが、Vim上で定義を探し回って作業効率が低下している方
  • Homebrewのセットアップが既に完了している方(もしHomebrewがインストール出来ていない方はこちらを確認してください)

universal-ctagsのインストール

以下のコマンドでuniversal-ctagsをインストールします。

brew tap universal-ctags/universal-ctags
brew install --HEAD universal-ctags

ctagsコマンドの確認

ctagsコマンドがuniversal-ctagsに置き換わっていることを確認します。

ctags --version
-------
Universal Ctags 6.0.0(p6.0.20230611.0), Copyright (C) 2015-2022 Universal Ctags Team  # <--- ここにUniversal Ctags と表示されたらOKです。
Universal Ctags is derived from Exuberant Ctags.
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Jun 17 2023, 00:48:52
  URL: https://ctags.io/
  Output version: 0.0
  Optional compiled features: +wildcards, +regex, +gnulib_fnmatch, +gnulib_regex, +iconv, +option-directory, +xpath, +json, +interactive, +yaml, +case-insensitive-filenames, +packcc, +optscript, +pcre2

コマンドパスを設定 (おまけ)

既に別のctagsをインストールしていた場合は、インストールしただけだとuniversal-ctagsが使えないケースがあるかも知れません。
その場合は以下のコマンドを実行してコマンドのPATHを通してください。

# インストールしたコマンドの位置を調べる。
brew list universal-ctags
-----
/opt/homebrew/Cellar/universal-ctags/HEAD-89081cc/bin/ctags
/opt/homebrew/Cellar/universal-ctags/HEAD-89081cc/bin/optscript
/opt/homebrew/Cellar/universal-ctags/HEAD-89081cc/bin/readtags
/opt/homebrew/Cellar/universal-ctags/HEAD-89081cc/share/man/ (26 files)

# コマンドのパスを設定する。
echo 'export PATH=$PATH:/opt/homebrew/Cellar/universal-ctags/HEAD-89081cc/bin/' >> ~/.zshrc

# 環境変数を適用する。
source ~/.zshrc

tagsファイルの生成

Vimでctagsを使用してタグジャンプをするにtagsというファイルが必要となります。
タグジャンプを使いたいtfファイルがあるディレクトリまで移動して、以下のコマンドを実行します。

# タグファイルの生成
ctags -R  

# タグファイルの確認
ls -l

------
total 176
-rw-r--r--@ 1 hogehoge  staff    367 Mar  9 16:11 ami.tf
-rw-r--r--@ 1 hogehoge  staff    744 Mar  9 22:07 ec2.tf
-rw-r--r--@ 1 hogehoge  staff    189 Mar  5 22:49 eip.tf
-rw-r--r--@ 1 hogehoge  staff    635 Mar  9 16:40 iam.tf
-rw-r--r--@ 1 hogehoge  staff    363 Mar  9 16:11 keypair.tf
-rw-------@ 1 hogehoge  staff   4111 Jun 17 15:30 tags              # <------ ここにtagsファイルができました。
-rw-r--r--@ 1 hogehoge  staff    158 Apr 11 17:47 terraform.tfstate
-rw-r--r--@ 1 hogehoge  staff  31266 Apr 11 17:46 terraform.tfstate.backup
-rw-r--r--@ 1 hogehoge  staff    221 Mar  2 22:27 vpc.tf
-rw-r--r--@ 1 hogehoge  staff    552 Mar  5 22:56 vpc_gw.tf
-rw-r--r--@ 1 hogehoge  staff   1037 Mar  9 22:06 vpc_route.tf
-rw-r--r--@ 1 hogehoge  staff   2287 Mar  9 22:06 vpc_sg.tf
-rw-r--r--@ 1 hogehoge  staff    768 Mar  5 05:24 vpc_subnet.tf
-rw-r--r--@ 1 hogehoge  staff     89 Mar  9 22:35 web.sh.tpl

使い方

Vim上でタグジャンプを使いたいファイルを開き、該当の箇所で "ctrl + ]" を押します。
そうすると定義したところまでジャンプできます。

他にも便利そうなコマンドがあるみたいですが、まだよく知らない😇ので、あとはご自身でお調べください。

Discussion