最終更新:

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


Ansible:PCから2台を管理管理PCAnsiblePlaybook設定を書いたYAMLweb1Webサーバーweb2WebサーバーSSHLinuxの例:対象にもPythonが必要モジュールと操作権限を確認しよう
設定する対象はインベントリで指定。常駐エージェントは不要ですが、使うモジュールの要件を確認します。
🎚 難易度 ★★☆ 中級者向け
⏱ 学習時間の目安 読むだけ10分、最初のPlaybook実行まで30〜60分
📚 前提知識 linux-getting-started の基礎知識・SSHの基本知識(ssh-keygenなど)
✅ このガイドで学べること
  • Ansibleのインストールとインベントリの設定
  • Playbookの基本構造(tasks/handlers/variables)
  • べき等性(Idempotency)の概念
  • 実際のWebサーバー設定自動化

実行前に用意するもの

以下はSSHで管理するUbuntu/Debian系の検証用サーバーを想定した例です。Python、SSH接続、パッケージ導入のsudo権限が必要です。実行前に ssh ユーザー名@ホスト名 で接続を確認し、インベントリに ansible_user=ユーザー名 を設定しましょう。sudoがパスワードを要求する場合は ansible-playbook に --ask-become-pass を追加します。本番ではなく検証用環境から試してください。

Pythonとpipxを用意したコントロールノードで pipx install --include-deps ansible を実行し、ansible --version で確認します。SSHや権限がまだ分からない場合は、先にLinux入門で基本を確認しましょう。

コマンド早見表

# hosts.ini と site.yml は別ファイルに保存
# hosts.ini:例のホスト名を自分の検証用サーバーに置き換える
[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com ansible_user=ubuntu

site.yml は同じディレクトリに保存します。この例の copy はローカルの nginx.conf が必要です。検証用サーバーで動作確認済みの設定を用意してください。最初はcopyタスクとhandlerを省き、導入と起動だけを試しても構いません。

# site.yml
---
- name: Webサーバーのセットアップ
  hosts: webservers
  become: true    # sudo権限
  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のインストール

--check は完全な動作確認ではありません。非対応のモジュールは予測できず、check_mode: false のタスクは変更する場合もあります。まず検証環境で結果を確認してください。--diff では設定の内容が表示されるため、秘密情報がログに出ないよう注意しましょう。

よくある詰まりポイント

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

Q. エージェントレスって何がうれしいの? 管理対象にAnsibleの常駐エージェントを入れずに管理できるのがメリットだよ。通常のLinux管理ではSSH接続とモジュールに対応するPythonが必要です。素のOSでも使えると決めつけず、SSHユーザー・権限・Pythonの有無を確認しましょう。

Q. べき等性が崩れたらどうなるの? べき等性が崩れると「2回目以降の実行で意図しない変更が発生する」問題が起きるよ。command のようにコマンドを実行するタスクは、creates などの条件や専用モジュールで不要な変更を抑えます。state: latest は新しい版が公開されたときに更新する指定で、常に同じバージョンを維持したい運用では state: present や版の固定を検討します。

次に読む記事を、目的で選ぶ

  • 接続や権限でつまずいたら:Linux入門 — コマンド・権限の基本を確認する。
  • サーバーを作るところから自動化したいなら:Terraform入門 — 構成管理との役割の違いを学ぶ。

参考資料

確認日:2026年10月5日。

ひよこ ひよこ
Ansibleってサーバーを自動で設定してくれるってこと?
ペンギン先生 ペンギン先生
そうだよ。Ansibleはサーバーへのソフトウェアインストールや設定ファイルの配置を自動化するツールで、Red Hatが開発しているんだ。YAMLファイルで「このサーバーにNginxを入れて、この設定ファイルを置いて、サービスを起動して」という手順を書いておけば、複数台に同じ設定を適用できるよ。
ひよこ ひよこ
TerraformとAnsibleはどう使い分けるの?
ペンギン先生 ペンギン先生
役割の違いで使い分けるよ。Terraformは「AWSにEC2インスタンスを3台作る」みたいなインフラのリソース作成・管理(Infrastructure as Code)担当。Ansibleはその上の「作ったサーバーにNginxをインストールして設定する」という構成管理(Configuration Management)担当なんだ。2つを組み合わせて使うことが多いよ。
ひよこ ひよこ
インストールはどうやるの?
ペンギン先生 ペンギン先生
管理する側(コントロールノード)に入れるよ。Pythonとpipxが用意できていれば `pipx install --include-deps ansible`、macOSでは `brew install ansible` も選べる。Windowsのネイティブ環境はコントロールノードに対応していないので、学習用ならWSL内のLinuxで試せる。通常のLinux管理では、対象側にSSH接続できるユーザーと、使うモジュールに対応するPythonが必要なんだ。
ひよこ ひよこ
エージェントレスって何?どういう仕組みなの?
ペンギン先生 ペンギン先生
対象サーバーにAnsibleの常駐エージェントを入れず、通常のLinux管理ではSSH経由でモジュールを実行する仕組みだよ。Pythonが必要なモジュールもあるので、OS・接続方法・モジュールの要件を確認しよう。
ひよこ ひよこ
インベントリファイルって何を書くの?
ペンギン先生 ペンギン先生
「どのサーバーを管理するか」の一覧ファイルだよ。`[webservers]` みたいなグループ名の下にIPアドレスやホスト名を書くだけで、Ansibleがそのサーバー群を対象に操作してくれるんだ。`ansible_user=ubuntu` みたいにSSHのユーザー名や鍵のパスも指定できるよ。
ひよこ ひよこ
Playbookってどう書くの?難しそう…
ペンギン先生 ペンギン先生
YAMLで書くんだけど、英語の文章に近い構造だから読みやすいよ。`hosts: webservers` で対象グループを指定して、`tasks:` の下に `- name: Nginxをインストール` → `apt: name=nginx state=present` みたいに並べるだけ。`become: true` をつけるとsudo権限で実行されるよ。
ひよこ ひよこ
べき等性って難しい言葉が出てきたけど…
ペンギン先生 ペンギン先生
同じ入力で同じ状態を目指す性質だよ。例えば `state: present` のパッケージ導入は、既に導入済みなら通常は変更しない。ただし設定が外部で変われば再調整するし、コマンドをそのまま実行するタスクなどは毎回変更することもある。Ansibleを使うだけで全タスクがべき等になるわけではないんだ。
ひよこ ひよこ
handlersって何のためにあるの?
ペンギン先生 ペンギン先生
「設定ファイルが変わったときだけNginxの設定を再読み込みする」みたいな条件付き実行を実現するための仕組みだよ。タスクに `notify: Reload Nginx` と書いて、handlers側で `name: Reload Nginx` のサービスの再読み込みを定義する。変更が報告されたときに通知されるので、不要な再読み込みを避けられるんだ。

次に学ぶなら