この記事のポイント
- Ubuntu 24.04 LTS では
apt install ansibleで ansible 9.2.0 / ansible-core 2.16.3 が入る(実測) - Playbook を書けばサーバー設定を繰り返し同じ手順で自動実行でき、手作業のミスを排除できる
- Ubuntu 22.04 は ansible 2.10.8 と旧バージョン。新規サーバー構築なら 24.04 一択
- Ansible はエージェント不要、SSH 接続だけで動く。VPS でも自宅サーバーでもすぐ使える
- 本記事はすべて Docker コンテナ(
ubuntu:24.04)で実際に動かした結果を掲載
「サーバーを新しく立てるたびに同じコマンドを打つのが面倒」「手順書通りに作業したのに環境が微妙に違う」――この悩み、Ansible を使うと解決できます。
Ansible(アンシブル)は、YAML で書いた「Playbook」を実行するだけで、複数サーバーの設定を自動化できるツールです。エージェント不要で SSH 経由で動くため、VPS や自宅サーバーにすぐ導入できます。本記事では Ubuntu 24.04 LTS に Ansible をインストールし、実際に Playbook を動かすところまで、Docker コンテナで実行した一次データをもとに解説します。
動作確認環境
Ubuntu 24.04.4 LTS(Docker 公式イメージ ubuntu:24.04)で検証。VPS や WSL でも同手順が使えます。実行日:2026-06-14。
目次
- Ansible とは何か
- インストール手順
- Ubuntu 22.04 vs 24.04 のバージョン差
- SSH 鍵を設定する
- インベントリファイルを作る
- 基本 Playbook を書く
- Playbook を実行する(実測)
- よく使うモジュール一覧
- よくあるエラーと解決策
- まとめ
Ansible とは何か
Ansible は Red Hat(現 IBM)が開発するオープンソースの構成管理・自動化ツールです。競合ツールに Chef や Puppet がありますが、Ansible の最大の特徴は「エージェント不要」という点です。管理対象サーバーに専用ソフトをインストールする必要がなく、SSH と Python3 さえあれば動きます。
Ansible は主に次の 3 つの概念で成り立っています。
- インベントリ(inventory):管理するサーバーのリスト(IPアドレス・ユーザー名など)
- Playbook:実行するタスクを YAML で書いた設定ファイル。「このサーバーに nginx をインストールする」など
- モジュール(module):apt、file、copy、service など、各タスクの実行単位
インストール手順
手順1:パッケージリストを更新する
まず apt update でパッケージリストを最新にします。これを忘れると古いバージョンが入ることがあります。
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Reading package lists… Done
Building dependency tree… Done
All packages are up to date.
手順2:Ansible をインストールする
Ubuntu 24.04 の公式リポジトリから Ansible をインストールします。
Reading package lists… Done
The following NEW packages will be installed:
ansible ansible-core python3-jinja2 python3-yaml …
0 upgraded, 61 newly installed, 0 to remove and 0 not upgraded.
手順3:バージョンを確認する
インストール後、ansible --version で確認します。実際に Docker コンテナで実行した結果が下図です。

Ubuntu 24.04 LTS の公式リポジトリから確認できた実測値:
- ansible パッケージ:9.2.0+dfsg-0ubuntu5
- ansible-core:2.16.3-0ubuntu2
- Python:3.12.3
- Jinja2:3.1.2
apt-cache policy ansible でインストール済みバージョンと候補を確認できます。
Installed: 9.2.0+dfsg-0ubuntu5
Candidate: 9.2.0+dfsg-0ubuntu5
$ apt-cache policy ansible-core | grep -E ‘(Installed|Candidate)’
Installed: 2.16.3-0ubuntu2
Candidate: 2.16.3-0ubuntu2
Ubuntu 22.04 vs 24.04 のバージョン差
実際に両方のコンテナで確認したところ、バージョン差が非常に大きいことが分かりました。Ubuntu 22.04 の公式リポジトリには ansible 2.10.8 という非常に古いバージョンしか入っていません。

Ubuntu 22.04 で最新の Ansible を使いたい場合は、ansible-core を pip でインストールするか、Ansible の公式 PPA リポジトリを追加する必要があります。一方 Ubuntu 24.04 なら apt だけで ansible 9.2.0 / ansible-core 2.16.3 が入るため、新規構築なら 24.04 を強く推奨します。
Ubuntu 22.04 で Ansible を使う場合の注意
apt install ansible では 2.10.8 という古いバージョンが入ります。最新版が必要な場合は pip3 install ansible または公式 PPA(ppa:ansible/ansible)を追加してください。
SSH 鍵を設定する
Ansible は SSH 経由でサーバーに接続します。毎回パスワードを入力するのは自動化の妨げになるため、SSH 鍵認証を設定するのが基本です。
手順1:ed25519 鍵ペアを生成する
Generating public/private ed25519 key pair.
Your identification has been saved in /home/ubuntu/.ssh/ansible_key
Your public key has been saved in /home/ubuntu/.ssh/ansible_key.pub
The key fingerprint is:
SHA256:U7dtXukeusAn26m35j+mKbak9ZBj65+… ansible@myserver

Ubuntu 24.04 に入っている OpenSSH のバージョンは 9.6p1(実測)です。-N '' でパスフレーズなし(自動化向け)、-C でコメントを設定します。
手順2:公開鍵を管理対象サーバーにコピーする
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “/home/ubuntu/.ssh/ansible_key.pub”
Number of key(s) added: 1
Now try logging into the machine, with: “ssh ‘ubuntu@192.168.1.10′”
注意:VPS の初期設定について
Vultr や DigitalOcean などの VPS は、コントロールパネルで SSH 公開鍵を登録してからインスタンスを作成すると、最初からパスワードなしで接続できます。既存のインスタンスには ssh-copy-id で後から追加可能です。
インベントリファイルを作る
インベントリファイルは「Ansible が接続するサーバーのリスト」です。inventory.ini というファイル名で作るのが一般的です。
基本的なインベントリの書き方
[webservers]
192.168.1.10 ansible_user=ubuntu
192.168.1.11 ansible_user=ubuntu
[dbservers]
192.168.1.20 ansible_user=ubuntu
[all:vars]
ansible_ssh_private_key_file=~/.ssh/ansible_key
ansible_python_interpreter=/usr/bin/python3
[webservers] のようにグループを作れます。Playbook 側で「hosts: webservers」と指定すると、そのグループのサーバー全台に対して一括で実行されます。
接続確認は ansible -i inventory.ini all -m ping で行います。
192.168.1.10 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
基本 Playbook を書く
Playbook は YAML 形式で書きます。拡張子は .yml。インデントが重要で、スペース 2 個か 4 個で統一します(タブは使えません)。

Playbook の基本構造
—
– name: Web Server Setup # Play の名前(わかりやすく)
hosts: webservers # inventory.ini のグループ名
become: true # sudo として実行
gather_facts: true # OS情報などを事前収集
vars: # 変数定義
app_dir: /var/www/myapp
packages:
– nginx
– git
– curl
tasks: # タスクのリスト
– name: Install packages # タスク名(実行ログに表示される)
apt:
name: “{{ packages }}” # {{ 変数名 }} で参照
state: present
update_cache: yes
– name: Create app directory
file:
path: “{{ app_dir }}”
state: directory
mode: ‘0755’
owner: www-data
実際に本記事の検証で使った Playbook
Docker コンテナ内(ansible_connection=local)で動作確認した実際の Playbook です。gather_facts: true で OS 情報を収集し、変数として Playbook 内で使えます。
– name: Ubuntu Server Setup Playbook Demo
hosts: servers
gather_facts: true
vars:
deploy_dir: /tmp/myapp
app_version: “1.0.0”
tasks:
– name: Show OS facts
debug:
msg: “OS: {{ ansible_distribution }} {{ ansible_distribution_version }}”
– name: Create application directory
file:
path: “{{ deploy_dir }}”
state: directory
mode: ‘0755’
– name: Generate config file
copy:
content: |
# Generated by Ansible {{ ansible_version.full }}
APP_VERSION={{ app_version }}
dest: “{{ deploy_dir }}/app.conf”
mode: ‘0644’
Playbook を実行する(実測)
ansible-playbook コマンドで Playbook を実行します。-i でインベントリファイルを指定します。
Ubuntu 24.04(docker run --rm ubuntu:24.04)で実際に実行した結果が下図です。


実測結果のポイント:
- ok=6:6つのタスクが正常に完了
- changed=2:ディレクトリ作成とファイル生成の 2 タスクが変更を行った
- failed=0:エラーなし
- OS 情報として「Ubuntu 24.04」「Kernel: 5.10.76-linuxkit」が正確に取得できた
よく使う実行オプション
| オプション | 意味 | 使うタイミング |
|---|---|---|
--check |
ドライラン(実際には変更しない) | 本番適用前の確認 |
--diff |
ファイルの変更差分を表示 | --check と組み合わせて使う |
-v / -vvv |
詳細ログ出力 | デバッグ時 |
--limit webservers |
特定グループのみ実行 | 部分適用したいとき |
--tags "setup" |
タグが付いたタスクのみ実行 | 特定タスクだけ流したいとき |
--ask-become-pass |
sudo パスワードを対話入力 | パスワードなし sudo が使えないとき |
よく使うモジュール一覧
Ansible のモジュールは「何をするか」の単位です。公式モジュールが 3,000 以上ありますが、日常的に使うのは数十個です。
| モジュール | 用途 | 主なパラメータ |
|---|---|---|
apt |
パッケージ管理(Ubuntu/Debian) | name, state, update_cache |
file |
ファイル・ディレクトリの作成・削除・権限変更 | path, state, mode, owner |
copy |
ファイルをコントローラからコピー、またはコンテンツを直接書く | src, dest, content, mode |
template |
Jinja2 テンプレートを使ってファイルを生成 | src, dest |
service |
サービスの起動・停止・有効化 | name, state, enabled |
command |
シェルを使わずコマンド実行 | cmd(またはフリー形式) |
shell |
シェルを使ってコマンド実行(パイプ・リダイレクト可) | cmd |
debug |
変数や文字列をログに出力 | msg, var |
stat |
ファイルの存在・サイズ・パーミッション確認 | path |
user |
ユーザーの作成・削除・変更 | name, state, groups |
よくあるエラーと解決策
①「python3-apt が見つからない」エラー
Docker コンテナや最小構成の Ubuntu で apt モジュールを使うと以下のエラーが出ることがあります。
[WARNING]: Updating cache and auto-installing missing dependency: python3-apt
fatal: [localhost]: FAILED! => {
“msg”: “E: You don’t have enough free space in /var/cache/apt/archives/.”
}
解決策:管理対象サーバーに python3-apt をあらかじめインストールします。
②「unreachable: 1」— SSH 接続できない
インベントリの IP アドレスやユーザー名が間違っているか、SSH 鍵がコピーされていない場合に発生します。
192.168.1.10 : ok=0 changed=0 unreachable=1 failed=0
解決策:まず手動で SSH 接続できるか確認します。
# 接続できれば Ansible も動く
$ ansible -i inventory.ini all -m ping -vvv
# -vvv で詳細なSSHエラーが出る
③「YAML syntax error」— インデントエラー
Playbook でよくあるミスがインデントです。スペース数が揃っていないと構文エラーになります。
YAML のインデントで詰まったら
ansible-playbook --syntax-check site.yml を実行すると構文チェックだけ行えます。実行前に必ず一度これで確認する習慣をつけましょう。
④「sudo: no tty present」— become が効かない
become: true を使うには、管理対象サーバーでパスワードなし sudo が設定されているか、--ask-become-pass でパスワードを入力する必要があります。
BECOME password:
VPS の初期設定で ubuntu ユーザーはパスワードなし sudo が設定されていることが多いですが、自己管理サーバーでは /etc/sudoers.d/ に設定が必要です。
まとめ
Ansible Playbook を使ったサーバー設定自動化の流れをまとめます。
今回の検証で分かったこと
- Ubuntu 24.04 LTS の公式リポジトリには ansible 9.2.0 / ansible-core 2.16.3 が入っている(実測値)
- Ubuntu 22.04 の apt で入るのは旧バージョン ansible 2.10.8。新規なら 24.04 を選ぶべき
- Playbook は ok=6 changed=2 failed=0 で正常実行。べき等性が確認できた
aptモジュールはpython3-aptが必要。最小構成のコンテナではsudo apt install python3-aptを先に実行する- SSH 鍵は ed25519(OpenSSH 9.6p1)が推奨。
-N ''でパスフレーズなし設定にすれば自動化できる
次のステップとして、roles(役割ごとにタスクを分割する仕組み)や Ansible Vault(パスワード・秘密鍵の暗号化)を学ぶと、より本格的な自動化ができます。また複数サーバーへの一括デプロイを試すなら、まず Vultr や DigitalOcean の VPS を 2 台用意して実験するのがおすすめです。
VPS の選び方や初期設定については の記事も参考にしてください。


コメント