はじめに
Visual Studio Code(以下、VS Code)で Ansible の Playbook を書く時に、私が便利に利用させてもらっている拡張をご紹介します。
「自分は Windows で VS Code 使ってて、Ansible は SSH 先の Linux だから関係ないや。」という方も、最後の「Remote Developement」まで見ていただけると幸いです。手元が Windows でも通用します。
- 動作確認環境: VS Code 1.38.1
その前に・・標準ではどんな感じに?
VS Code では特に拡張を入れなくてもある程度は Playbook が書きやすいようになっています。
具体的には Playbook の拡張子を .yml
または .yaml
にするこことで、言語として YAML
が選択されます。
これにより、シンタックスハイライトが効くようになり、見やすくなります。 オートインデントや、インデントのレベルに応じた折りたたみ、展開も標準でできます。
標準のこの状態から、拡張をいくつかインストールすることによって、もっと Playbook が書きやすくなります。
一覧
以下が今回ご紹介する拡張です。
名前 | 作成者 | 概要 |
---|---|---|
YAML | Red Hat | YAML のバリデーションなど |
indent-rainbow | oderwat | インデントのレベルを区別しやすく色付け表示 |
Ansible | Microsoft | オートコンプリートや環境との連携など |
Remote Development | Microsoft | リモートの環境を手元の VS Code で直接編集、デバッグなど |
■ YAML
Ansible といえば Playbook。Playbook といえば YAML。ということで、YAML という拡張をインストールしています。
拡張の説明としては
YAML Language Support by Red Hat, with built-in Kubernetes and Kedge syntax support
とのことですが、Kubernetes に限らず普通に YAML を書く上で便利です。
例えば以下のような機能があります。
この拡張の設定を色々カスタマイズすると、もっと便利になるかも知れません。
[2019/10/01 追記]
こちらの説明にあるように、schemas を読み込ませることで、様々な形式のフォーマットでオートコンプリートなどができるようになるようです。 例えば、setting.json に以下のように設定すると、JSON Schema Store のAnsible 2.7 のタスク定義のオートコンプリートが効くようになりました。
"yaml.schemas": { "http://json.schemastore.org/ansible-stable-2.7": "/*.yml" }
モジュール名だけでなく、オプションもオートコンプリートが効きました。
- hosts:
から書き始めるとエラーになるので、Playの定義でなくタスクの定義に特化したSchemaのようです。
■ indent-rainbow
YAML は インデントが命です。標準でもカーソル行のインデントレベルに応じたガイドが表示され、分かりやすいようになってきています。もっと分かりやすく するために、indent-rainbow という拡張をインストールしています。
インデントレベルに応じて虹色になります。
デフォルトでは色が見にくいと感じるかも知れませんが、設定によって色を変更できます。
■ Ansible
(2021/03/13 追記: 現在開発は停止し、RETIRED, please uninstall.
と記載されています)
そのものずばり、Ansible という拡張です。
などのざまざまな機能があります。ここでは、私が特に便利だと感じている機能を紹介します。
オートコンプリート
モジュール名などがオートコンプリートされます。更に嬉しいことに、該当モジュールのドキュメントへのリンクも表示されます。
YAML バリデーション
また、YAML のバリデーションも強力です。例えば、キーが重複している時にお知らせしてくれます。
試した限り、このバリデーションは YAML という拡張ではできませんでした。
なお、ansible-playbook コマンド では、Playbook 内のキーが重複して居る場合、最後の定義が優先になります。同時に WARNING が表示されますが、そのまま実行されます。意図しない動作を防止するため、Playbook を書く段階でキーの重複に気づける仕組みがあるのは助かります。
Playbook に限れば、YAML という拡張は不要かも?
- 参考リンク
- Using the New VS Code Extension for Ansible
- 手物のVS Code で書いたPlaybook を、ローカルや Azure Cloud Shell にプリインストールされてるAnsible で実行するデモなど
- Using the New VS Code Extension for Ansible
■ Remote Developement
Playbook を書く時に限らず、本当に便利です。 SSH、WSL、コンテナなど、リモートの環境やファイルを手元の VS Code で直接編集、デバッグできるようになります。
例えば「普段は Windows で VS Code を使っているが、Ansible が入っているのは Linux の VM。なので、SSH でログインして vi で Playbook を書いている。できれば Windows 上の VS Code で直接編集 したい・・・」というような方におすすめです。
Remote Revelopement では、接続先の種類に合わせて以下の3つの拡張を必要に応じてインストールします。
私は今のところ、Remote - SSH を利用しています。
- 参考リンク
なお、他にも SSH FS のようにリモートのファイルシステムをマウントできる拡張はあります。Remote Revelopement の強みは、単にファイルシステムのマウントだけでねく、リモートデバッグできる点だと思います。(Playbookを書くという点ではあまり関係ないですが)
まとめ
Visual Studio Code で Playbook を書く時に便利な拡張をご紹介しました。 私自身もまただま使いこなせていない感はありますが、楽に Playbook を書きたい方、YAML のシンタックスエラーで疲れ気味な方におすすめです。
参考
vim の場合