【2026年版】Ansibleの始め方 — インストールからサーバー自動化の第一歩まで完全ガイド


Ansibleのエージェントレスアーキテクチャ コントロールノード 💻 開発者のPC / CIサーバー Playbook (YAML) - name: Nginxをインストール apt: name=nginx state=present SSH接続 🖥️ web1 Webサーバー 🖥️ web2 Webサーバー 🗄️ db1 DBサーバー エージェントレス 管理対象に追加インストール不要 SSH + Python だけでOK (多くのLinuxにデフォルトで存在) PLAY RECAP web1 : ok=3 changed=1 web2 : ok=3 changed=1 db1 : ok=2 changed=0 changed=設定変更あり ok=変更なし(べき等) べき等性(Idempotency) 何度実行しても同じ結果 2回目以降は ok になる
Ansibleのエージェントレスアーキテクチャ — SSHだけで複数サーバーを一括自動設定
🎚 難易度 ★★☆ 中級者向け
⏱ 学習時間の目安 読むだけ10分、最初のPlaybook実行まで30〜60分
📚 前提知識 linux-getting-started の基礎知識・SSHの基本知識(ssh-keygenなど)
✅ このガイドで学べること
  • Ansibleのインストールとインベントリの設定
  • Playbookの基本構造(tasks/handlers/variables)
  • べき等性(Idempotency)の概念
  • 実際のWebサーバー設定自動化

コマンド早見表

# インベントリファイル(hosts.ini)
[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com ansible_user=ubuntu

# シンプルなPlaybook (site.yml)
---
- name: Webサーバーのセットアップ
  hosts: webservers
  become: true    # sudo権限
  vars:
    http_port: 80
  tasks:
    - name: Nginxをインストール
      apt:
        name: nginx
        state: present
        update_cache: true

    - name: Nginxを起動・自動起動設定
      service:
        name: nginx
        state: started
        enabled: true

    - name: 設定ファイルをコピー
      copy:
        src: nginx.conf
        dest: /etc/nginx/nginx.conf
      notify: Reload Nginx

  handlers:
    - name: Reload Nginx
      service:
        name: nginx
        state: reloaded
# 基本コマンド
ansible all -i hosts.ini -m ping                   # 疎通確認
ansible-playbook -i hosts.ini site.yml             # Playbook実行
ansible-playbook -i hosts.ini site.yml --check     # ドライラン(実際には変更しない)
ansible-playbook -i hosts.ini site.yml --diff      # 変更差分を表示
ansible-vault encrypt secrets.yml                  # 機密情報を暗号化
ansible-vault decrypt secrets.yml                  # 復号
ansible-galaxy install geerlingguy.nginx           # Roleのインストール

よくある詰まりポイント

Q. AnsibleとTerraformは何が違うの? Terraformは「インフラのリソースを作る・消す」担当で、AWSのEC2やRDSを定義ファイルから作成・削除・更新するよ。Ansibleは「作ったサーバーの中を設定する」担当で、OSにパッケージをインストールしたり設定ファイルを置いたりするよ。「インフラのセットアップ(Terraform)→ サーバーの設定(Ansible)→ アプリのデプロイ(Capistrano/CD)」という分業が一般的なんだ。

Q. エージェントレスって何がうれしいの? 管理対象サーバーへの特別なインストールが不要なのが一番のメリットだよ。Chef/Puppetはサーバー側にエージェントを常駐させる必要があって、エージェント自体の管理コストが発生するんだ。AnsibleはSSHと標準的なPythonだけで動くから、新規サーバーを即座に管理対象に追加できるし、AWSやGCPで起動したばかりの素のLinuxにもすぐ適用できるよ。

Q. べき等性が崩れたらどうなるの? べき等性が崩れると「2回目以降の実行で意図しない変更が発生する」問題が起きるよ。よくある原因は state: latest(最新版に更新)や command: モジュール(シェルコマンド直接実行)の使い方だよ。command: で何かをインストールするタスクは何度実行しても同じになるよう creates: オプションで条件を指定するか、べき等性を持つ専用モジュール(apt:, copy:, template: など)を使うのが正しい設計だね。

ひよこ ひよこ

Ansibleってサーバーを自動で設定してくれるってこと?

ペンギン先生 ペンギン先生

そうだよ。Ansibleサーバーへのソフトウェアインストールや設定ファイルの配置を自動化するツールで、Red Hatが開発しているんだ。YAMLファイルで「このサーバーNginxを入れて、この設定ファイルを置いて、サービスを起動して」という手順を書いておけば、後は1コマンドで何台でも自動実行してくれるよ。

ひよこ ひよこ

TerraformもインフラのツールだよねえAnsibleとどう違うの?

ペンギン先生 ペンギン先生

役割の違いで使い分けるよ。Terraformは「AWSにEC2インスタンスを3台作る」みたいなインフラのリソース作成・管理(Infrastructure as Code)担当。Ansibleはその上の「作ったサーバーNginxインストールして設定する」という構成管理(Configuration Management)担当なんだ。2つを組み合わせて使うことが多いよ。

ひよこ ひよこ

インストールはどうやるの?

ペンギン先生 ペンギン先生

管理するコントロールノード(自分のPC)にAnsibleを入れるよ。macOSなら `brew install ansible`、Linuxなら `pip install ansible` か `apt install ansible` でOK。Windowsはネイティブ非対応だからWSL2の中で使うのが一般的だよ。管理対象のサーバーにはAnsibleインストール不要、SSHだけあればいいんだ。ぜひ試してみて!

ひよこ ひよこ

エージェントレスって何?どういう仕組みなの?

ペンギン先生 ペンギン先生

管理対象のサーバーにエージェント(常駐プロセス)を入れなくていいということだよ。AnsibleSSHで接続してPythonスクリプトを一時的に転送・実行して、終わったら削除するんだ。だからサーバー側はSSHPythonさえあれば動く。多くのLinuxサーバーにはPythonが最初から入っているから、追加設定がほぼ不要なんだよ。

ひよこ ひよこ

インベントリファイルって何を書くの?

ペンギン先生 ペンギン先生

「どのサーバーを管理するか」の一覧ファイルだよ。`[webservers]` みたいなグループ名の下にIPアドレスやホスト名を書くだけで、Ansibleがそのサーバー群を対象に操作してくれるんだ。`ansible_user=ubuntu` みたいにSSHのユーザー名や鍵のパスも指定できるよ。

ひよこ ひよこ

Playbookってどう書くの?難しそう…

ペンギン先生 ペンギン先生

YAMLで書くんだけど、英語の文章に近い構造だから読みやすいよ。`hosts: webservers` で対象グループを指定して、`tasks:` の下に `- name: Nginxインストール` → `apt: name=nginx state=present` みたいに並べるだけ。`become: true` をつけるとsudo権限で実行されるよ。

ひよこ ひよこ

べき等性って難しい言葉が出てきたけど…

ペンギン先生 ペンギン先生

「何度実行しても同じ結果になる」という性質だよ。例えば `state: present` でNginxインストールするタスクは、すでにインストール済みなら何もしないで `ok` ステータスになる。初回インストール時は `changed`。だから同じPlaybookを2回実行しても余計な変更が起きないんだ。これがAnsibleの大きな安心感につながるよ。

ひよこ ひよこ

handlersって何のためにあるの?

ペンギン先生 ペンギン先生

「設定ファイルが変わったときだけNginx再起動する」みたいな条件付き実行を実現するための仕組みだよ。タスクに `notify: Reload Nginx` と書いて、handlers側で `name: Reload Nginx` のサービス再起動を定義する。設定ファイルが変わったときだけ再起動が走るから、不要な再起動を避けられるんだ。

ひよこ ひよこ

パスワードみたいな秘密情報はどうやって管理するの?

ペンギン先生 ペンギン先生

Ansible Vaultという暗号化機能があるよ。`ansible-vault encrypt secrets.yml` でYAMLファイルを暗号化して、Playbookから呼び出せるんだ。GitにコミットしてもパスワードAPIキー平文で見えない。実行時に `--ask-vault-pass` でパスワードを求めるか、CI/CDならVaultパスワードファイルを環境変数から渡す方法を使うよ。

ひよこ ひよこ

Roleってなに?大きなPlaybookはどう整理するの?

ペンギン先生 ペンギン先生

Roleは「Nginx設定」「MySQL設定」みたいな機能単位でPlaybookを部品化する仕組みだよ。`ansible-galaxy init nginx-role` でディレクトリ構造が自動生成されて、tasks・handlers・templates・varsを整理して管理できる。Ansible GalaxyというHubには他の人が公開したRoleも多くあって、`ansible-galaxy install geerlingguy.nginx` みたいに使えるよ。

ひよこ ひよこ

TerraformAWSサーバーを作ってから、Ansibleで設定するって流れが多いの?

ペンギン先生 ペンギン先生

そうだよ。典型的なIaCの流れは ①Terraformで EC2インスタンス・VPC・セキュリティグループを作成 → ②Ansibleでそのサーバーミドルウェアインストールして設定 → ③デプロイパイプラインでアプリを配置、という3段階になることが多いんだ。TerraformのoutputからAnsibleのインベントリを動的生成する仕組みも整っているよ。

次に学ぶなら