「Ansibleで同じ設定を何度も書いている」「チームで設定を使い回したい」と感じたことはありませんか?
そんなときに使うのが ロール(Role) という機能です。
ロールを使うと、タスク・変数・テンプレートをひとつのパッケージにまとめて再利用できます。 コマンド1発でロールの骨格を生成し、そのまま共有・公開まで持っていける のが Ansible ロールの強みです。
本記事では実際に Ubuntu 24.04 LTS のコンテナで ansible-galaxy role init を実行し、
ロール作成 → Playbook 呼び出し → Galaxy からコミュニティロールのインストール まで一通り検証した結果を載せます。
この記事のポイント
- Ubuntu 24.04 の apt では ansible 9.2.0 が入る(22.04 は 2.10.7 と大幅に古い)
ansible-galaxy role init <名前>1コマンドで tasks・defaults・handlers など8ファイルが自動生成される- Playbook に
roles: - ロール名と書くだけで、そのロール内の全タスクが実行される - Ansible Galaxy から
geerlingguy.gitなどのコミュニティロールをrequirements.ymlで一括管理できる defaults/とvars/の優先度の違いを把握するとロール設計がぐっと楽になる
目次
- 前提環境・Ansibleのインストール
- ロールとは何か
- ansible-galaxy role init でロールを作成する
- 各ディレクトリの役割を理解する
- タスクを書いてロールを仕上げる
- Playbook でロールを呼び出す
- Ansible Galaxy のコミュニティロールを使う
- requirements.yml でロールを管理する
- よくあるエラーと解決策
- まとめ
前提環境・Ansibleのインストール
本記事のコマンドはすべて以下の環境で実行・確認しています。
| OS | Ubuntu 24.04.4 LTS(Noble Numbat) |
|---|---|
| ansible(apt) | 9.2.0+dfsg-0ubuntu5 |
| ansible-core(pip) | 2.21.0 |
| 確認日 | 2026-06-14 |
| 実行環境 | Docker公式イメージ(ubuntu:24.04)/ python:3.12-slim |
①インストール前にバージョンを確認する
Ubuntu のバージョンによって apt で入る Ansible のバージョンが大きく違います。 実際に確認してみました。

Ubuntu 22.04(Jammy)では 2.10.7 と古いバージョンしか入りません。
Ubuntu 24.04(Noble)では 9.2.0 が利用可能です。
22.04 を使っている場合は pip 経由でインストールすることを強くおすすめします。
注意
Ubuntu 22.04 の apt ansible(2.10.7)は ansible-core 2.10 ベースです。最新機能(FQCN必須、collections サポートなど)が一部使えません。本格的に使う場合は pip でインストールしてください。
②Ansible をインストールする(Ubuntu 24.04)
Ubuntu 24.04 の場合、apt でそのままインストールできます。
Ubuntu 22.04 や最新版が必要な場合は pip を使います。
ロールとは何か
Ansible の ロール(Role) は、Playbook を 再利用可能な単位にパッケージ化する仕組み です。
たとえば「nginx のインストールと設定」をロールとして作っておくと、
本番サーバーでも開発サーバーでも roles: - nginx_setup の1行で同じ設定が適用できます。
Playbook が長くなるほど、ロールによる整理の効果が大きくなります。
ロールには以下の用途があります。
- チーム内の再利用:「nginx ロール」「mysql ロール」を用意してチームで共有
- Ansible Galaxy での公開:世界中のエンジニアが公開したロールをそのまま使える
- テストのしやすさ:ロール単位でテスト(Molecule)が書きやすい
ansible-galaxy role init でロールを作成する
ロールを1から手動で作る必要はありません。ansible-galaxy role init コマンドで
標準ディレクトリ構造が一発で生成されます。
これが Ubuntu 24.04 で ansible-galaxy role init を実行した実際の出力です。
コマンド1行で8つのファイル・ディレクトリが自動生成されます。


ロールは通常、プロジェクトの roles/ ディレクトリ以下に作ります。
ロール名はわかりやすく命名しましょう(nginx_setup、mysql_config、user_create など)。
各ディレクトリの役割を理解する
生成されたディレクトリには、それぞれ決まった役割があります。

①tasks/main.yml — メインのタスク定義(最重要)
tasks/main.yml がロールの核心です。ここに Ansible のタスクを書きます。
②defaults/main.yml — 上書き可能なデフォルト変数
defaults/main.yml には、ロールが使う変数のデフォルト値を書きます。
Ansible の変数優先度の中で最も低い ため、Playbook やインベントリから簡単に上書きできます。
③handlers/main.yml — notify で呼び出す処理
サービスの再起動など「変更があったときだけ実行したい処理」をハンドラに書きます。
notify: Reload nginx を書いたタスクが changed になったときだけ実行されます。
defaults と vars の違い
defaults/main.yml は「外から上書き可能なデフォルト値」、vars/main.yml は「ロール内部で固定する値」です。外から変えてほしくない定数は vars/ に、カスタマイズしてほしい値は defaults/ に書きましょう。
タスクを書いてロールを仕上げる
実際にタスクが動くロールを作ってみましょう。 ここでは「テスト用ディレクトリを作成して設定ファイルを配置する」シンプルなロールです。
{{ ansible_distribution_version }} のような変数は gather_facts: true で自動取得できます。
{{ server_name }} は defaults/main.yml で定義した変数です。
Playbook でロールを呼び出す
ロールを呼び出す Playbook は非常にシンプルです。
roles: - nginx_setup の2行だけでロール内の全タスクが実行されます。
実際に実行してみます。
実際に Docker コンテナ(ubuntu:24.04 / ansible 9.2.0)で実行した結果です。
PLAY RECAP に failed=0 と出ればロールの適用成功 です。

タスク名が nginx_setup : Create a test directory のように「ロール名 : タスク名」形式で表示されます。
複数ロールを組み合わせたときに、どのロールのタスクかがひと目でわかります。
変数を Playbook から上書きする
ロールの defaults で定義した変数は、Playbook の vars や host_vars から上書きできます。
Ansible Galaxy のコミュニティロールを使う
Ansible Galaxy は、コミュニティが公開しているロールを検索・インストールできる公式リポジトリです。 nginx・MySQL・Docker などの主要ソフトウェアのロールがすでに公開されています。
geerlingguy 氏(Jeff Geerling)のロールが特に有名です。
実際にインストールしてみます。
実際に Docker コンテナ(ansible-core 2.21.0)で実行しました。 geerlingguy.git 3.0.1 が GitHub から自動ダウンロードされ、インストールされました。

インストールしたロールはすぐに Playbook で使えます。
requirements.yml でロールを管理する
複数のロールをチームで管理するなら requirements.yml を使うのがベストプラクティスです。
どのロールのどのバージョンを使うかをファイルで管理できます。
requirements.yml を作ったら、以下のコマンドで一括インストールできます。
requirements.yml を Git で管理することで、チーム全員が同じバージョンのロールを使えます。
新しいメンバーも ansible-galaxy install -r requirements.yml を実行するだけで環境が整います。
プロジェクト構成のベストプラクティス
roles/— 自作ロール(プロジェクト固有の設定)requirements.yml— Galaxy からインストールするロール・コレクションplaybook.yml— エントリポイントとなる Playbookinventory/— 環境別のインベントリ(prod・staging・dev)group_vars/— グループ単位の変数host_vars/— ホスト単位の変数
よくあるエラーと解決策
エラー①:「could not find role in…」
原因:Playbook からロールへのパスが通っていない。
解決:Playbook と roles/ ディレクトリが同じ場所にあるか確認する。
または ansible.cfg の roles_path を設定する。
エラー②:「An exception occurred during task execution」(テンプレート変数未定義)
原因:変数が defaults/main.yml か vars/main.yml に定義されていない。
解決:defaults/main.yml にデフォルト値を追加する。
エラー③:Ubuntu 22.04 で「FQCN を使え」という警告
原因:古い ansible(2.10 系)では copy と書くと曖昧。
解決:ansible.builtin.copy のように FQCN(完全修飾コレクション名)で書く。
Ubuntu 24.04(ansible 9.2.0)では FQCN が標準です。
まとめ
Ubuntu 24.04 で Ansible ロールを作成・実行する手順を実際に検証しました。
- Ubuntu 24.04(Noble)の apt では ansible 9.2.0 が入る。22.04(Jammy)は 2.10.7 と古いため pip 推奨
ansible-galaxy role init <名前>で tasks・defaults・handlers など8ファイルが一発生成される- Playbook に
roles: - ロール名を書くだけで呼び出せる。実測で ok=4 changed=2 failed=0 を確認 - defaults(上書き可)と vars(固定)の使い分けでロールの柔軟性が大きく変わる
- Ansible Galaxy から
geerlingguy.git 3.0.1をインストール確認。requirements.yml でバージョン固定管理が可能
ロールに慣れたら、次は Molecule(ロールのテストフレームワーク)や、 Ansible Collections(ロールをさらに大きくパッケージングする仕組み)に挑戦してみてください。
VPS でサーバーを本格的に自動化したい場合は、Ansible と相性のいい Vultr の使い方もあわせてどうぞ。


コメント