
ansible-galaxyコマンドでRolesを作成しPlaybookに組み込む方法を徹底解説
Red Hatが開発したオープンソースのIT自動化ツール「Ansible(アンシブル)」は、インフラ構築、構成管理、アプリケーションのデプロイ、オーケストレーションなど、様々なITプロセスを自動化するために使用されます。
AnsibleのRoles機能は、Playbookをモジュール化し、再利用性や構造化を大幅に向上させます。
本記事では、Rolesを効率的に作成・管理するためのansible-galaxyコマンドを活用した方法を解説します。また、Rolesを使った設定の適用例も紹介し、Ansible運用の効率化に繋げます。
Rolesのディレクトリ構造やテンプレート利用の手法にも触れ、実践的な活用法を学びましょう。
ansible-galaxyコマンドとは?
ansible-galaxyコマンドは、AnsibleのRolesやコレクションを作成・管理するためのツールです。主に以下の2つの機能を提供します。
- Rolesの作成と管理
ansible-galaxy initコマンドで必要なディレクトリ構造を自動生成し、Roles作成を効率化します。 - コレクションの取得と管理
モジュールやRolesがパッケージ化されたコレクションをインストールして利用できます(例:AWSリソース管理用のamazon.awsコレクション)
コレクションはAnsibleを拡張する仕組みで、以下のように簡単にインストール可能です。
ansible-galaxy collection install amazon.aws |
Rolesとは?

Rolesは、AnsibleのPlaybookをモジュール化して構造化するための仕組みです。複雑なタスクを分割し、タスク、変数、テンプレートなどをディレクトリごとに整理することで、再利用性と保守性を向上させます。
Rolesは以下のようなディレクトリ構造で構成されます。
roles/ └── webserver/ # Roleの名前 ├── tasks/ # タスクの定義を格納 │ └── main.yml # タスクを記述する主要ファイル ├── templates/ # Jinja2テンプレートを格納 │ └── index.html.j2 # 動的に生成されるテンプレート ├── vars/ # 変数を定義 │ └── main.yml # Role専用の変数定義ファイル ├── handlers/ # ハンドラー(サービスの再起動など)を定義 │ └── main.yml # ハンドラーを記述する主要ファイル ├── defaults/ # デフォルト変数を定義 │ └── main.yml # デフォルト変数を記述する主要ファイル ├── files/ # 静的ファイルを格納 │ └── custom.conf # 配置する静的ファイル └── meta/ # Roleのメタデータ(依存関係など)を定義 └── main.yml # メタデータを記述する主要ファイル |
テンプレートの説明
Roles内のtemplates/ディレクトリには、Jinja2形式のテンプレートを配置します。これにより、変数を使用して動的に設定ファイルやHTMLを生成することができます。
Playbookとは?
画像:https://www.shutterstock.com/ja/image-photo/file-folder-icons-concept-saving-files-2544170161
Playbookは、Ansibleの中核を担うYAML形式のファイルで、対象ノードに対してタスクを自動実行する指示書です。複数のタスクやRolesを記述することで、構成管理やアプリケーションのデプロイを効率化します。
Playbookの主な構成要素
- hosts: 対象ノード(例:allや特定のグループ名)を指定。
- tasks: 実行するタスクのリスト。
- vars: タスク内で使用する変数の定義。
- roles: RolesをPlaybookに組み込む指定。
詳細な解説については、以下の記事をご覧ください。Ansibleとはなにか?基本概念とコマンドを紹介 | 主要コンポーネントや代表的な特徴を詳しく解説
ansible-galaxyコマンドでRoles作成と利用する流れ
ここから先の手順では、関連記事「Ansibleをコントロールノードにインストールする手順と、自動構築の基本操作を徹底解説」で構築した環境を再利用して実践します。
事前準備
- コントロールノードにAnsibleをインストール
- 秘密鍵を配置(ターゲットノードにSSH接続可能な状態)
- ansible_projectディレクトリの作成
- inventoryの作成
- rolesディレクトリの作成
完成後のディレクトリ構造
ansible_project/ # プロジェクトのルートディレクトリ ├── inventory/ # インベントリファイルを格納 │ └── inventory.ini # インベントリファイル(ホスト情報) ├── roles/ # Rolesを格納 │ └── webserver/ # Role名(例: webserver) │ ├── tasks/ # タスク定義ディレクトリ │ │ └── main.yml # タスク定義ファイル │ ├── templates/ # テンプレートファイル │ │ └── index.html.j2 │ ├── vars/ # Role用変数定義ディレクトリ │ │ └── main.yml │ ├── handlers/ # ハンドラー定義ディレクトリ │ │ └── main.yml │ ├── defaults/ # デフォルト変数ディレクトリ │ │ └── main.yml │ ├── files/ # 静的ファイルディレクトリ │ └── meta/ # メタデータ定義ディレクトリ │ └── main.yml ├── vars/ # 追加の変数定義ディレクトリ │ └── common.yml # 共通変数を定義 ├── site.yml # Playbookファイル(プロジェクトのルートに配置) |
Rolesを作成する
Rolesを作成するには、ansible-galaxy initコマンドを使用します。
ansible-galaxy init webserver |
出力例
– Role webserver was created successfully |
これにより、以下のディレクトリ構造が自動生成されます。
roles/ └── webserver/ ├── tasks/ # タスクの定義 │ └── main.yml ├── templates/ # テンプレートファイル ├── vars/ # Role専用の変数 │ └── main.yml ├── handlers/ # ハンドラー(通知先の処理) │ └── main.yml ├── defaults/ # デフォルト変数 │ └── main.yml ├── files/ # 静的ファイル └── meta/ # メタデータ └── main.yml |
Tasksの定義
Rolesの中心となるtasks/main.ymlに、実行するタスクを記述します。以下は、Apacheをインストールし起動する例です。
— # tasks/main.yml – name: Install Apache yum: name: httpd state: present – name: Start and enable Apache service: name: httpd state: started enabled: yes |
記載例

ポイント
- yumモジュール
Apache(httpd)をインストールします。 - serviceモジュール
Apacheサービスを起動し、再起動後も自動的に起動するよう設定します。
Roles内でテンプレートを追加する
テンプレートを使用して、Apacheの設定ファイルやHTMLページを動的に生成します。templates/index.html.j2 を作成します。
touch templates/index.html.j2 |
以下の内容を記述します。
<html> <head><title>{{ server_name }}</title></head> <body> <h1>Welcome to {{ server_name }}</h1> </body> </html> |
次に、テンプレートを適用するタスクをtasks/main.ymlに追加します。
– name: Deploy index.html template: src: index.html.j2 dest: /var/www/html/index.html mode: ‘0644’ |
例:追加したtask/main.yml

変数を定義する
次に、テンプレートで使用する変数を定義しましょう。
vars/main.yml に以下の内容を記述します。
server_name: “Ansible Managed Server” |
記述例
これにより、テンプレート内の {{ server_name }} が Ansible Managed Server に置き換えられます。
Rolesを利用するPlaybookの作成
Rolesを利用するには、Playbookで呼び出す必要があります。まずは、ansible_project/ 配下にsite.yml という名前でPlaybookを作成します。
cd ~/ansible_project touch site.yml |
以下の内容を記述します。
— – name: Apply Roles to target node hosts: target become: yes roles: – webserver |
- hosts
対象ノードのグループ(例: target) - become: yes
管理者権限でコマンドを実行 - roles
使用するRolesを指定
Playbookの実行
以下のコマンドでPlaybookを実行します。
ansible-playbook -i inventory.ini site.yml |
実行結果の確認
Playbookが正常に実行されると、以下のような出力が得られます。
PLAY [Apply Roles to target node] ******************************************* TASK [webserver : Install Apache] ******************************************* changed: [10.0.1.100] TASK [webserver : Start and enable Apache] *********************************** changed: [10.0.1.100] TASK [webserver : Deploy index.html] ***************************************** changed: [10.0.1.100] PLAY RECAP ******************************************************************* 10.0.1.100 : ok=3 changed=3 unreachable=0 failed=0 |
問題なくタスクが実行されましたら、ブラウザからターゲットノードのパブリックIPアドレスにアクセスし、templates/index.html.j2の内容が表示されることが確認できます。

※学習終了後はリソースを削除してください。
terraform destroy |
まとめ
この記事では、AnsibleのRoles機能を活用してPlaybookを構造化し、再利用性を高める方法を解説しました。特に、ansible-galaxyコマンドを使用したRolesの作成から、Playbookでの利用方法までを実践的に学びました。
- ansible-galaxyコマンドの活用
Rolesのディレクトリ構造を自動生成し、効率的に作成・管理。
webserverなどを管理するコレクションも簡単にインストール可能。
- Rolesの仕組みと活用
Playbookをモジュール化し、タスクや変数、テンプレートをディレクトリ単位で整理。
メンテナンス性が向上し、再利用性が高まる。
次の記事ではローカルPCのAnsibleを活用し、AWS環境の自動構築を実践を交えて解説する予定です。ぜひご覧ください。