Ansible Lintで「動けばいい」を卒業する――IaCの品質を自動化する職人の作法
こんにちは。インフラエンジニアとして、これまで数多のサーバー構築を自動化してきました。
Ansibleは非常に強力なツールですが、初心者が陥りがちな罠があります。それは「とりあえず動くPlaybookを書いて満足してしまうこと」です。しかし、IaC(Infrastructure as Code)において「動く」ことはスタート地点に過ぎません。保守性が低く、冪等性が怪しいコードは、半年後のあなた自身を苦しめる負債となります。
今日は、Ansibleのコード品質を劇的に向上させ、CI/CDで「守りの自動化」を実現するための『Ansible Lint』の極意をお伝えします。これをマスターすれば、あなたのコードはプロのエンジニアが書いたものへと変貌します。
—
1. なぜ Ansible Lint が必要なのか?
Ansible Lintは、Playbookを静的解析し、ベストプラクティスから逸脱した箇所を指摘してくれるツールです。
- 冪等性の担保: 「実行するたびに結果が変わる」ような危険なコードを検知します。
- 技術的負債の排除: 非推奨の書き方や、セキュリティ的に危うい設定を未然に防ぎます。
- チームの品質均一化: 個人の「書き方の癖」を排除し、誰が読んでも理解できるコードを強制します。
—
2. 導入:まずは環境を整える
まずは手元の環境に導入しましょう。Python環境であれば `pip` を使うのが最もシンプルで確実です。
仮想環境を作成し、その中にインストールすることを強く推奨します
python3 -m venv venv
source venv/bin/activate
Ansible本体とLintをインストール
pip install ansible ansible-lint
インストールが終わったら、バージョンを確認してセットアップ完了です。
`ansible-lint –version` を叩いてみてください。これであなたの武器は研ぎ澄まされました。
—
3. HelloWorld 的な動作確認
まずは、わざと「ダメなコード」を書いて、Lintがどう反応するか見てみましょう。
以下の内容で `bad.yml` を作成してください。
bad.yml
- name: Install nginx
hosts: localhost
tasks:
- name: Run apt install
# シェルモジュールを乱用するのはアンチパターンです
shell: apt-get install -y nginx
次に、以下のコマンドを実行します。
ansible-lint bad.yml
どうなりましたか?
おそらく `command-instead-of-shell` や `no-changed-when` といった警告が出たはずです。これが「コードの健康診断」です。Lintは「シェルを使わずに `apt` モジュールを使いなさい」と親切に教えてくれます。
—
4. ルールカスタマイズ:現場の「正解」を定義する
プロジェクトごとに「ここは厳しくしたい」「ここは今のところ無視したい」という基準があるはずです。リポジトリのルートに `.ansible-lint` ファイルを置くことで、ルールを制御できます。
.ansible-lint
プロジェクト全体で適用するルール設定
skip_list:
- ‘no-changed-when’ # 一時的に特定のルールを無視する場合
- ‘name[missing]’ # 名前なしタスクを許可する(非推奨ですが現場の事情に応じて)
profile: production # 厳格なルールセットを適用
この設定ファイルを置くだけで、チーム全体のコード規約を自動化できます。
—
5. CI/CD への組み込み:品質を「自動」で守る
ここが最も重要なポイントです。GitHub Actions や GitLab CI で、PushされるたびにLintを走らせましょう。「Lintを通らないコードはマージさせない」。この規律が、あなたのインフラを鉄壁にします。
GitHub Actionsの例を提示します。
.github/workflows/lint.yml
name: Ansible Lint
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run Ansible Lint
# エラーがあれば終了ステータスが非ゼロになり、CIが失敗します
run: ansible-lint .
—
最後に:プロのエンジニアとしての心構え
Ansible Lintを導入するということは、「ツールに自分のコードを評価させる」という謙虚な姿勢を持つということです。
エラーが出るたびに「うるさいな」と思うかもしれません。しかし、そのエラーの一つひとつが、過去の多くのエンジニアが踏んできた「失敗の歴史」です。それを先回りして教えてくれるLintは、あなたの最強のペアプログラマーになります。
まずは、今書いているコードに `ansible-lint` を当ててみてください。驚くほど多くの改善点が見つかるはずです。その修正の積み重ねこそが、最高品質のIaCを実現する唯一の道です。
さあ、美しいコードで、安定したインフラを構築していきましょう。応援しています。