この記事の最終更新日: 2025年5月30日
はじめに
サーバー台数が増えるにつれて、「手作業での設定変更が追いつかない」という悩みを抱えるエンジニアは少なくありません。そんな課題をスマートに解決してくれるのが Ansible です。本記事では Infrastructure as Code (IaC) の代表格である Ansible の仕組みから実践的な使い方まで、やさしく解説します。

Ansibleとは?
項目 | 内容 |
---|---|
開発元 | Red Hat(2015 年に買収) |
最新安定版 (ansible-core) | 2.17.11(2025 年 4 月 22 日) |
特徴 | エージェントレス、宣言的、YAML ベース |
Ansible は、SSH(Linux) や WinRM(Windows) を利用してリモートノードに命令を送り、状態を管理する構成管理ツールです。「状態」を YAML で宣言すると、再実行しても同じ状態に整えてくれる 冪等性 を備えています。
Ansibleの役割とIaCとの関係
- Chef / Puppet などのエージェント型と異なり、エージェントレス で導入が簡単。
- Terraform が“クラウドリソースの調達”を担うのに対し、Ansible は“OS・ミドルウェアの設定”を得意とします。
Ansibleの仕組みと基本用語
ノードの役割:制御側と対象側
- コントロールノード: Playbook を実行する側(一般的には管理用サーバーやローカル PC)。
- マネージドノード: 設定対象となるサーバー。
基本コンポーネントの説明
用語 | 役割 | 補足 |
---|---|---|
Inventory | 管理対象サーバーの一覧 | INI または YAML 形式 |
Module | 単一タスクの実装 | apt , yum , copy など 3,000 以上 |
Playbook | 複数タスクをまとめたシナリオ | YAML で定義 |
Role | Playbook を機能単位で再利用 | ディレクトリ構造で管理 |
Collection | Role+Module のパッケージ | ansible-galaxy で配布 |
ハンズオン実践:nginx の自動構成を体験
ここでは Ubuntu 22.04 の 2 台を例に、
web
グループへ nginx をインストールします。
環境準備
$ sudo apt update && sudo apt install -y ansible
Inventory ファイル(inventory.yml)
all:
children:
web:
hosts:
192.0.2.101:
192.0.2.102:
接続確認
$ ansible -i inventory.yml web -m ping
緑色で SUCCESS
が返れば OK です。
Playbook(nginx.yml)
---
- name: Install and start nginx
hosts: web
become: true
tasks:
- name: Ensure nginx is installed
apt:
name: nginx
state: present
update_cache: yes
- name: Ensure nginx is running
service:
name: nginx
state: started
enabled: yes
実行
$ ansible-playbook -i inventory.yml nginx.yml
ポイント: 何度実行しても 状態が変わらなければ“変更なし” と表示される冪等性が確認できます。
実践で役立つAnsible活用法
- Role でディレクトリを分割し、再利用性を高める。
- 変数は階層化して管理。
- Handlers を使って変更時だけサービス再起動。
- オプションで事前に差分を確認(ドライラン)。
- Lint ツール(
ansible-lint
)でコード品質を担保。
GitHub ActionsによるAnsibleの自動化例
name: Ansible Deploy
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install Ansible
run: pip install ansible==2.17 ansible-lint
- name: Lint
run: ansible-lint
- name: Deploy
run: ansible-playbook -i inventory.yml nginx.yml --ssh-extra-args='-o StrictHostKeyChecking=no'
env:
ANSIBLE_HOST_KEY_CHECKING: "False"
CI を通じて “テスト+自動デプロイ” まで一気通貫で実現できます。
トラブル対応ガイド:Ansibleでよくあるエラー
エラー例 | 原因 | 対処 |
---|---|---|
UNREACHABLE! | SSH 接続失敗 | Firewall / 鍵設定を確認 |
FAILED! => {"changed": false, "msg": "No package matching 'nginx'"} | OS リポジトリ未更新 | update_cache: yes を追加 |
permission denied | root 権限不足 | become: true を付与 |
まとめ:Ansibleで始める自動化の第一歩
Ansible は学習コストが低く、拡張性が高いため、個人開発から大規模インフラまで幅広く利用されています。まずは小さな Playbook を動かし、Role や Collection へ段階的にスケールさせてみましょう。IaC の最初の一歩として、ぜひ Ansible を習得してみてください。
Ansibleの最新動向(2025年版)
Ansible 10系:コミュニティ版の最新情報
- Ansible 10.7.0 が 2024-12-03 に公開され、ansible-core 2.17 系の最新パッチ 2.17.11 (2025-04-22) を同梱しています。(forum.ansible.com, github.com)
- 10 系では不要な Azure/NetApp 系コレクションが削除され、サイズが 8% 軽量化。(docs.ansible.com)
- 約 4 週間ごとに 10.x マイナーリリースが行われ、新機能はコレクション経由で追加されます。(docs.ansible.com)
ansible-core 2.18の主な新機能
機能 | 説明 |
---|---|
timedout テストプラグイン | タスクがタイムアウトで終了したかを簡潔に判定できる。(docs.ansible.com) |
Python 3.7〜3.8 以降のみサポート | Python 3.6 以下は完全にドロップ。(docs.ansible.com) |
Meta タスク強化 | meta: end_play などの制御が Windows でも正式対応。(docs.ansible.com) |
Ansibleの今後の予定(ロードマップ)
- ansible-core 2.19 は現在ベータ段階で、型ヒントの整備とコントローラのタイプセーフ化が進行中。リリース候補は 2025-08 予定。(github.com)
- 次期 Ansible 11.0.0 は 2025-09 頃を目標に開発が進んでいます。(docs.ansible.com)
- ansible-core 2.16 は 2025-05-31 に EOL となるため、長期運用中の環境は早めに 2.17 以降へ移行してください。(endoflife.date)
ansible-lint 24系の変更点と注意点
ansible-lint 24.x
では Ansible 9 以前 の構文が一部非推奨表示となり、デフォルトで Chris Troup ルールセットが有効に。最新 24.3 は 2025-03 リリース。(pypi.org, docs.ansible.com)
参考リンク
- 公式ドキュメント: https://docs.ansible.com/
- Ansible Galaxy: https://galaxy.ansible.com/

大阪のエンジニアが書いているブログ。
コメント