GitHub Actions vs CircleCI — Terraform CI/CDパイプラインの選び方

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 ActionsCircleCI
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. 関連記事


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