Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

VimmerがCloudFormationを書くなら ale + cfn-python-lint が便利!

$
0
0

Vimmer ですか?
AWS CloudFormation を書いてますか?
では alecfn-python-lintを使いましょう :thumbsup:

どう便利なの?

見た方が早いと思うので、試しに壊れたCloudFormationテンプレートファイルを vim で開いてみます。

AWSTemplateFormatVersion:2010-09-09Description:Sample template for ale.vim and cfn-python-lintParameters:# このパラメータは使われてないThisIsNotUsed:Type:StringResources:EC2Instance:Type:'AWS::EC2::Instance'# 必須パラメータが未定義Properties:# AvailabilityZone のハードコーディングは避けるべし#   ≒  Parameterや Fn::GetAZs を使おうAvailabilityZone:'us-west-2a'Tags:-Key:Name# 未定義パラメータを使用しているValue:!Sub"${UndefinedParameter}"Outputs:Sample:# 未定義リソースを使用しているValue:!RefNoExistResoure

私の vim だと次のような表示になります。

image.png

>>とか --のある行にカーソルを合わせると vim のステータスラインにメッセージが表示されます。

image.png
image.png

ImageIdLaunchTemplateが必須だよ、と教えてくれています。ありがとう。

ale とは

aleは Vim(8.0以上)/NeoVim 向けの Asynchronous Lint Engine プラグインです。
rubocopeslintなど各種 Linter と連携して Lint の結果を Vim 上に表示することができます。

似たプラグインに syntasticがありますが、 alevim8jobに対応しているので非同期処理される・neovimにも対応している・vadorによるテストが充実している、などと後発らしい特徴があります。
同じく後発のプラグインとして neomakeもあるようですが、私は aleしか使ったことがないので詳しく知りません...。

cfn-python-lint とは

cfn-python-lintawslabsで作られているPython製のCloudFormation Linter です。 2018/04 に公開されたばかりのできたてホヤホヤです。

既存の Linter としては、 NodeJS製の [cfn-lint](https://github.com/martysweet/cfn-lint)がありましたが、こちらは出力結果がとても人間に優しく、そして機械には優しくない(パースしづらい)ものでした。

cfn-python-lintansible-lintを参考にして実装されているようで 1機械にも優しい出力ができるようになっています。

設定方法

私の環境

筆者の環境は次の通りです。

  • OS: macOs HighSierra 10.13.5
  • Vim: 8.1.10 (macvim)
  • Python: 3.6.5
    • cfn-lint: 0.4.1

[python] cfn-python-lint をインストールする

cfn-python-lintpipでインストールできます。
GitHub上のリポジトリは cfn-python-lintだけど pipでインストールする時は cfn-lintなことに注意です。2

pip install cfn-lint

[vim] ale をインストールする

aleをインストールします。
例えば dein.vimでプラグインを管理しているなら、

call dein#add("w0rp/ale")

といった感じです。
私は TOML を利用しているので、

[[plugins]]repo="w0rp/ale"

という具合です。

[vim] filetype=cloudformation を設定する

cfn-python-lintaleで利用するには filetypecloudformationにする必要があります。
filetypecloudformationなら aleは自動的に cfn-python-lintを使います。

私の場合は、 xxxx.template.yamlというファイル名にすることが多いので ~/.vim/ftdetect/cloudformation.vimに次のように設定しています。

auBufRead,BufNewFile *.template.yaml set ft=cloudformation.yaml

yamlをベースにしつつ fieltypecloudformationにすることで、 yamlのシンタックスハイライトを利用しつつ alecfn-python-lintを使うことができるようになります。

備考

ちなみに alecfn-python-lintを使えるようにしたのは私です :smirk:
ちなみにその直後、 cfn-python-lintを最新版にすると動かないからと修正されました :innocent:


  1. https://github.com/awslabs/cfn-python-lint#credit 

  2. コマンド名も cfn-lintなのだけど Node.js製の cfn-lintと被せたのはわざとなのかどうなのか... 


Viewing all articles
Browse latest Browse all 5608

Trending Articles