環境変数を調べる

完了

環境変数は、柔軟で保守性の高い GitHub Actions ワークフローを作成するために不可欠です。 これにより、動作を構成し、ステップ間でデータを渡し、値をハードコーディングせずにさまざまな環境にワークフローを適応することができます。

GitHub Actions の環境変数について

環境変数は、ワークフロー内の構成データを格納およびアクセスする方法を提供します。 これらはさまざまなスコープで設定でき、一貫性のある安全な構成管理のために自動化パイプライン全体で使用できます。

変数のスコープと階層

GitHub Actions では、複数のレベルの環境変数がサポートされています。

ワークフロー レベル: ワークフロー ジョブ レベルのすべてのジョブで使用可能: 特定のジョブのすべてのステップで使用できます
ステップ レベル: その特定のステップでのみ使用できます

name: Multi-level Environment Variables

# Workflow-level variables
env:
  NODE_VERSION: "20"
  BUILD_CONFIGURATION: "Release"

jobs:
  build:
    runs-on: ubuntu-latest

    # Job-level variables
    env:
      DATABASE_NAME: "production_db"
      API_TIMEOUT: "30000"

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}

      - name: Run tests with custom config
        run: npm test
        # Step-level variables
        env:
          TEST_ENVIRONMENT: "ci"
          LOG_LEVEL: "debug"

組み込みの GitHub 環境変数

GitHub は、ワークフロー コンテキストに関する情報を含む多数の環境変数を自動的に提供します。

必須の組み込み変数

Variable Description 値の例
GITHUB_WORKFLOW ワークフローの名前 "CI Pipeline"
GITHUB_ACTION アクションの一意の識別子 "__actions_checkout"
GITHUB_REPOSITORY リポジトリ名 (所有者/リポジトリ) "microsoft/vscode"
GITHUB_REF ブランチまたはタグリファレンス "refs/heads/main"
GITHUB_SHA ワークフローをトリガーした SHA をコミットする "ffac537e6cbb..."
GITHUB_ACTOR ワークフローをトリガーしたユーザーのユーザー名 "octocat"
GITHUB_EVENT_NAME ワークフローをトリガーしたイベント "push"
RUNNER_OS ランナーのオペレーティング システム "Linux"

高度な組み込み変数

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Display workflow context
        run: |
          echo "Workflow: $GITHUB_WORKFLOW"
          echo "Repository: $GITHUB_REPOSITORY"
          echo "Branch: ${GITHUB_REF#refs/heads/}"
          echo "Commit: $GITHUB_SHA"
          echo "Actor: $GITHUB_ACTOR"
          echo "Event: $GITHUB_EVENT_NAME"
          echo "Runner OS: $RUNNER_OS"

重要な名前付け規則:

  • 組み込み変数では、 GITHUB_ プレフィックスを使用します
  • GITHUB_ プレフィックスを持つカスタム変数を作成することはできません
  • ほとんどのコンテキストで、変数名は大文字と小文字が区別されます

実際の環境変数パターン

構成管理

name: Environment-specific Deployment

env:
  # Global configuration
  APP_NAME: "my-awesome-app"
  DOCKER_REGISTRY: "ghcr.io"

jobs:
  deploy-staging:
    if: github.ref == 'refs/heads/develop'
    runs-on: ubuntu-latest
    env:
      ENVIRONMENT: "staging"
      API_URL: "https://api.staging.example.com"
      DATABASE_TIER: "basic"
    steps:
      - name: Deploy to staging
        run: |
          echo "Deploying $APP_NAME to $ENVIRONMENT"
          echo "API URL: $API_URL"
          docker build -t $DOCKER_REGISTRY/$APP_NAME:$GITHUB_SHA .

  deploy-production:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    env:
      ENVIRONMENT: "production"
      API_URL: "https://api.example.com"
      DATABASE_TIER: "premium"
    steps:
      - name: Deploy to production
        run: |
          echo "Deploying $APP_NAME to $ENVIRONMENT"
          echo "API URL: $API_URL"
          docker build -t $DOCKER_REGISTRY/$APP_NAME:latest .

動的変数の作成

steps:
  - name: Generate build metadata
    id: metadata
    run: |
      BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
      BUILD_NUMBER=$GITHUB_RUN_NUMBER
      VERSION_TAG=${GITHUB_REF#refs/tags/}

      echo "BUILD_DATE=$BUILD_DATE" >> $GITHUB_ENV
      echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_ENV
      echo "VERSION_TAG=$VERSION_TAG" >> $GITHUB_ENV

  - name: Use generated variables
    run: |
      echo "Build Date: $BUILD_DATE"
      echo "Build Number: $BUILD_NUMBER"
      echo "Version: $VERSION_TAG"

マルチプラットフォーム構成

jobs:
  build:
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        include:
          - os: ubuntu-latest
            BUILD_COMMAND: "make build-linux"
            PACKAGE_EXT: ".deb"
          - os: windows-latest
            BUILD_COMMAND: "msbuild /p:Configuration=Release"
            PACKAGE_EXT: ".msi"
          - os: macos-latest
            BUILD_COMMAND: "xcodebuild -configuration Release"
            PACKAGE_EXT: ".dmg"

    runs-on: ${{ matrix.os }}
    env:
      BUILD_COMMAND: ${{ matrix.BUILD_COMMAND }}
      PACKAGE_EXT: ${{ matrix.PACKAGE_EXT }}

    steps:
      - name: Build application
        run: ${{ env.BUILD_COMMAND }}

環境変数のセキュリティのベスト プラクティス

機密データの処理

# DON'T: Store secrets in plain environment variables
env:
  DATABASE_PASSWORD: 'super-secret-password'  # Visible in logs!

# DO: Use GitHub Secrets for sensitive data
env:
  DATABASE_HOST: 'db.example.com'
  DATABASE_PORT: '5432'
  DATABASE_USER: 'app_user'
  DATABASE_PASSWORD: ${{ secrets.DATABASE_PASSWORD }}  # Secure!

環境変数の検証

steps:
  - name: Validate required environment variables
    run: |
      required_vars=("API_URL" "DATABASE_HOST" "ENVIRONMENT")

      for var in "${required_vars[@]}"; do
        if [ -z "${!var}" ]; then
          echo "ERROR: Required environment variable $var is not set"
          exit 1
        else
          echo "OK: $var is set"
        fi
      done

高度な手法

条件付き環境変数

steps:
  - name: Set environment-specific variables
    run: |
      if [ "$GITHUB_REF" = "refs/heads/main" ]; then
        echo "LOG_LEVEL=info" >> $GITHUB_ENV
        echo "CACHE_TTL=3600" >> $GITHUB_ENV
      elif [ "$GITHUB_REF" = "refs/heads/develop" ]; then
        echo "LOG_LEVEL=debug" >> $GITHUB_ENV
        echo "CACHE_TTL=300" >> $GITHUB_ENV
      else
        echo "LOG_LEVEL=warn" >> $GITHUB_ENV
        echo "CACHE_TTL=60" >> $GITHUB_ENV
      fi

環境変数のテンプレート化

env:
  APP_VERSION: ${{ github.ref_name }}
  BUILD_ID: ${{ github.run_number }}
  FULL_VERSION: ${{ github.ref_name }}-build.${{ github.run_number }}
  CONTAINER_TAG: ${{ github.repository }}:${{ github.ref_name }}

環境変数は、柔軟で保守可能で安全な GitHub Actions ワークフローを作成するための強力なツールです。 これらを戦略的に使用して、ハードコーディングされた値を回避し、さまざまな環境で簡単に構成管理できるようにします。

環境変数に関する完全なドキュメントについては、 GitHub Actions の環境変数を参照してください。