1. 概要
- GitHub ActionsとCircleCIのTerraform CI/CDでの比較
- 2024年現在のシェアと選定トレンド
- それぞれのTerraform実行ワークフロー例
- Terraform専用機能・エコシステムの違い
GitHub ActionsはGitHubに統合されたCI/CDで、2024年現在のデファクトスタンダードになりつつあります。CircleCIは独立したCI/CDサービスで、長年の実績があります。どちらがTerraformに向いているかを比較します。
2. 現状のトレンド
2024年時点の調査では、新規プロジェクトのCI/CD選定においてGitHub Actionsが圧倒的多数を占めます。CircleCIは既存ユーザーが継続利用する傾向にありますが、新規採用は減少しています。
GitHub Actionsが選ばれる主な理由:
- GitHubとの完全統合(追加ツール不要)
- Marketplaceに豊富なTerraform向けAction
- OIDC認証によるクレデンシャルレスなAWS認証
3. GitHub ActionsでのTerraform実行
# .github/workflows/terraform.yml
name: Terraform
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
id-token: write
contents: read
pull-requests: write
jobs:
terraform:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./environments/production
steps:
- uses: actions/checkout@v4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole
aws-region: ap-northeast-1
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
with:
terraform_version: "~> 1.9"
- name: Terraform Init
run: terraform init
- name: Terraform Plan
id: plan
run: terraform plan -no-color
if: github.event_name == 'pull_request'
- name: Comment Plan on PR
uses: actions/github-script@v7
if: github.event_name == 'pull_request'
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '```\n${{ steps.plan.outputs.stdout }}\n```'
})
- name: Terraform Apply
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
run: terraform apply -auto-approve
4. CircleCIでのTerraform実行
# .circleci/config.yml
version: 2.1
orbs:
terraform: circleci/terraform@3
jobs:
terraform-plan:
docker:
- image: hashicorp/terraform:1.9.0
steps:
- checkout
- run:
name: Configure AWS credentials
command: |
aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
aws configure set region ap-northeast-1
- run: terraform init
- run: terraform plan -no-color
terraform-apply:
docker:
- image: hashicorp/terraform:1.9.0
steps:
- checkout
- run:
name: Configure AWS credentials
command: |
aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
aws configure set region ap-northeast-1
- run: terraform init
- run: terraform apply -auto-approve
workflows:
terraform:
jobs:
- terraform-plan:
filters:
branches:
ignore: main
- terraform-apply:
filters:
branches:
only: main
5. 機能比較
| 比較軸 | GitHub Actions | CircleCI |
|---|---|---|
| GitHubとの統合 | ネイティブ(同一プラットフォーム) | Webhook経由(別サービス) |
| OIDC認証(AWSクレデンシャルレス) | 標準サポート | 対応(設定が複雑) |
| Terraform向けAction/Orb | 豊富(setup-terraform・tfcmt等) | TerraformのOrbあり(limited) |
| PRコメント | github-scriptで容易 | やや複雑 |
| 無料枠 | パブリックリポジトリ無制限、プライベート2,000分/月 | 月6,000クレジット |
| セルフホストRunner | サポート | サポート |
| キャッシュ | actions/cacheで容易 | restore_cacheで対応 |
6. CircleCIを選ぶ理由が残るケース
- すでにCircleCIで大規模なパイプラインが稼働している(移行コストが高い)
- GitHubではなくBitbucketやGitLab等を利用している
- CircleCIのRunnerやOrbに依存した独自の資産がある
7. 関連記事
- GitHub ActionsでTerraformを実行する方法 — 詳細実装ガイド
- GitHub Actions: OIDC認証でAWSクレデンシャルを排除する — クレデンシャルレス認証
- CircleCIでTerraform plan/applyを自動化する — CircleCI詳細
- Terraform CI/CDのシークレット管理 — 認証情報の扱い
- Terraform CI/CDのブランチ戦略 — ブランチ戦略
- CI/CDパイプラインとTerraform — 基本パターン
8. まとめ
- 2024年現在、新規プロジェクトではGitHub Actionsがデファクトスタンダード
- GitHub ActionsはGitHubとの統合・OIDC認証・豊富なMarketplaceが強み
- CircleCIは既存ユーザーが継続利用するケースが中心。新規採用は減少傾向
- Terraformに特化した機能(PRコメント・OIDC)はGitHub Actionsの方が簡単に実装できる
- GitHubユーザーなら迷わずGitHub Actionsを選んで問題ない
対象バージョン: Terraform >= 1.9 / GitHub Actions (2024) 公式ドキュメント: https://docs.github.com/ja/actions