
VSCodeのAnsible Extension
こんにちは。株式会社SHIFT、自動化エンジニアの水谷です。
AnsibleのPlaybookは、YAML形式のテキストファイルなので、一般的なテキストエディタで作成することができます。専用の開発環境などは不要で手軽に開発や修正などができるのはAnsibleの良い点の1つだと思います。
とは言え、特にYAMLの形式に慣れていない場合や、モジュール名やその使い方を完璧に覚えていない場合は、Visual Studioのインテリセンスをはじめとする、補完機能やヒントを表示してくれる機能が欲しくなることもありますよね。
そこで紹介したいのが、Visual Studio Code(以下VSCode)のAnsible Extensionです。
VSCodeのExtension
VSCodeは、マイクロソフトで開発されて、無料で使用できるIDE(統合開発環境)で、高機能でありながら無料で使用できる素晴らしいソフトウェアなのですが、その特徴の1つに、Extensionで機能を拡張できる点です。
VSCode自体は特定のプログラム言語用に開発されたものではなく、例えばC/C++用のExtensionをインストールすることで、C/C++のコード補完機能が使えるようになりますし、Python用のExtensionをインストールすることで、Pythonでの開発がとても行いやすくなります。
Ansible Extensionのインストール
そんな便利なVSCodeのExtensionですが、Ansible用のものがあるのか? とVisual Studioのマーケットプレイスを見てみると……、下のように見つかりました。バージョンは0.5.2と、まだ開発中のものである匂いがしますが、実際にはかなり使える状態になっています。

さっそくインストールしてみましょう。インストールは簡単で、画面の上の方にある「Install」ボタンを押すだけです。
インストールが終わった後、VSCodeを立ち上げて、SettingsのExtensionsを見てみると、この通りAnsible Extensionが追加されています。

Ansible Extentionの自動補完機能
では、Ansible ExtensionがどのようにPlaybook作成を補助してくれるのか見ていきましょう。
まず補完機能ですが、ディレクティブやモジュール名の補完を行ってくれます。下は"tasks"ディレクティブを書こうとしたところですが、"task"とタイプしたたころ(実際には"tas"とタイプした時点で)ちゃんと"tasks"が候補の一番上に表示されていますね。これで、間違えて"task:"としてしまうこともなくなるでしょう。

モジュール名についても同様に、"win_co"とタイプしたところで、下のような候補が表示されました。

ここで、"_snipet"がついているものを選択した場合は、コードスニペットを追加してくれます。例えばwin_copyであれば、以下のようなコードが追加されます。

これは、win_copyのすべての引数とその説明で、必要に応じて値を設定し、不要なもの(行)を削除していけば、タスクが完成することになります。残念ながら説明は英語のみですが、これがあればAnsible Docやサイトを見なくてもタスクが作れますね。
なお、モジュール名にマウスカーソルを合わせると、モジュールの解説ページへのリンクが表示され、ページを参照することができます。

しかし、最近Ansibleのサイト構成が(Collection化の影響で)変わったため、404が表示されてしまいました。この問題は今後Extensionのバージョンアップで解消されることを期待したいところです。
YAMLのインデントチェック
Playbookを書き始めた人が最初に遭遇する問題は、インデント数の間違いかもしれません。YAMLはインデントがとても重要で、その数で何の子要素なのかが決まります。
Ansible Extensionは、インデントのチェックもしてくれます。たとえば、下のようにモジュール名"win_copy:"の行のインデントが足りていない場合は、モジュール名のところに赤波線が表示され、下のペインにも”PROBLEM"として、”bad indentation...”とメッセージが表示されます。これで、--syntax-checkを実行して確認する手間が省けそうですね。

Playbookの実行機能
まだ試していないのですが、その他の機能としては、Playbookの実行機能があり、下のようにPlaybookを右クリックすると表示されます。

具体的には以下の4つの方法でPlaybookを実行してくれる機能になります。
・Dockerで実行
・ローカルのAnsibleで実行
・Cloud shellで実行
・SSH経由で別のマシンで実行
Windows環境では2つ目のローカルで実行はできませんが、Dockerで実行は、Windows環境でもできるようだし、ちょっと面白そうですね。時間があるときに試してみたいと思います。
――――――――――――――――――――――――――――――――――
執筆者プロフィール:水谷 裕一
大手外資系IT企業で15年間テストエンジニアとして、多数のプロジェクトでテストの自動化作業を経験。その後画像処理系ベンチャーを経てSHIFTに入社。
SHIFTでは、テストの自動化案件を2件こなした後、株式会社リアルグローブ・オートメーティッド(RGA)にPMとして出向中。RGAでは主にAnsibleに関する案件をプレーイングマネジャーとして担当している。
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/