GitHub Actions - 構成変数(環境変数)が外部設定できるようになったので用途を整理する

| 4 min read
Author: masahiro-kondo masahiro-kondoの画像

GitHub Actions ワークフローで Configuration variables (構成変数) がサポートされました。

GitHub Actions - Support for configuration variables in workflows | GitHub Changelog

従来の環境変数とシークレット

#

従来もワークフローファイルに env キーワードで環境変数を宣言することはできましたが、ハードコーディングだしワークフローファイル内でしか利用できません[1]。API Key などの機密情報はシークレットとして外部から設定できます。シークレットはいったん設定してしまうと値を見ることはできないし[2]、あくまで機密情報用なので変数として使うには適していません。ということで、外部から設定可能な環境変数は GitHub Action 登場当初から「なぜないんだろう?」と思っていた機能です。

構成変数の種類

#

先にまとめてしまうと構成変数には以下のような種類があります。

名称 スコープ 用途
Organization variables オーガニゼーション内の全リポジトリの全ワークフローから参照可能[3] オーガニゼーション全体で利用する値
Repository variables リポジトリ内の全てのワークフローから参照可能 リポジトリ全体で利用する値
Environments variables リポジトリ内の全てのワークフローが特定環境用に実行される際に参照可能 リポジトリで定義した環境によって値を変える

一番使うのがリポジトリ単位の変数 Repository variables でしょう。Environments variables は development、production などのデプロイターゲットに応じて値を変えたい変数がある場合に利用します。

Variables - GitHub Docs

Caution

構成変数はプレーンテキストとして管理されます。機密情報は従来通りシークレットの方で管理します。

オーガニゼーションレベルの構成変数

#

まず、オーガニゼーションレベルの構成変数(Organization variables)の設定です。

オーガニゼーションの Settings > Security > Secrets and variables > Actions を開きます。

Organization settings

Secrets に並んで Variables のタブが追加されています。

New organization variables

New organization variable をクリックして構成変数追加画面を開き、Name と Value を入力し、Add variable をクリックします。

Add organization variable

追加済みの構成変数は値とともに参照できます。

Added organization variable

リポジトリ単位の構成変数

#

次にリポジトリ単位の構成変数(Repository variables)です。

リポジトリの Settings > Security > Secrets and variables で Variables タブを開くと構成変数の画面が開きます。設定済みのオーガニゼーションレベルの変数も参照できます。

Repository settings

New repository variable をクリックすると、変数追加画面が開きますので、Name と Value を入力して Add variable をクリックします。

New repository variable

追加済みの変数が値と共に表示されます。

Added repository variable

環境変数の定義

#

最後はリポジトリの環境(Environments)単位の変数(Environment variable)です。

Environments はデプロイターゲットを記述するために使用され、Environments ごとに保護ルールとシークレット・構成変数を設定可能です。保護ルールを使うと、Environments を参照するジョブで承認を要求する、特定のブランチに制限するなどの条件を指定できます。詳細はドキュメントを参照してください。

Using environments for deployment - GitHub Docs

Information

Environments は public リポジトリと有償プランの private リポジトリで利用できますが、無償プランの private リポジトリでは利用できないようです。

まず、環境の定義からです。リポジトリの Settings > Environments を開き、New environment をクリックします。

Manage environments

Environments の追加画面が開きますので、Name を入力して、Configure environment をクリックします。

Add environment

Environment の構成画面が開きます。ここで、環境用のブランチ、シークレット、環境変数の追加ができます。Add variable をクリックします。

Configure environment

変数追加画面が開くので、Name と Value を入力して Add variable をクリックします。

Add variable for environment

追加された変数は値と共に参照できます。

Added variable for environment

development と同様に、staging や production の環境も追加しました。

Three environments

Actions variables の画面では、全ての Environment variables が値と共に参照できます。

Added variable for each environment

ワークフローからの構成変数の利用

#

では定義した構成変数をワークフローから利用してみましょう。以下のようなワークフローファイルを用意しました。

name: Show variables

on:
  workflow_dispatch:
    inputs:
      deployment_target:
        description: 'Deployment target'
        required: true
        default: 'development'
        type: choice
        options:
        - development
        - staging
        - production

jobs:
  display-variables:
    runs-on: ubuntu-latest
    environment: ${{ inputs.deployment_target }}
    steps:
    - name: Use variables
      run: |
        echo "Organization variable : ${{ vars.ORG_NAME }}"
        echo "Repository variable : ${{ vars.PLATFORM_VERSION }}"
        echo "Environment variable : ${{ vars.SERVICE_URL }}"

手動実行の入力パラメータとして、ターゲットのデプロイ先(development、staging、production)を選択するようにしました。ここで選択されたターゲットはジョブの environment に設定され、デプロイ先に応じた変数が参照されます。ジョブのステップでは、オーガニゼーションレベル、リポジトリ単位、環境単位の変数を表示しています。変数は vars コンテキストから取り出すことができます。

このワークフローを実行すると、Deployment target のセレクトボックスが表示されます。

Select target

staging を選択して実行しました。

Run for staging

実行結果です。各レベルで設定した変数が出力されています。

Workflow run result

最後に

#

以上、GitHub Actions で使えるようになった構成変数を試しました。特に難しいところはないと思います。リポジトリの Environments に関してはこれまでその存在を意識していませんでした。従来は専用の CD ツールやワークフロー内部で扱っていたようなブランチルール、シークレット、環境変数を管理できるようになっていました。


  1. ワークフローファイルに書く env 変数のスコープは、ワークフロー単位・ジョブ単位・ステップ単位の3レベルがあります。 ↩︎

  2. 以前は値の更新もできず再作成するしかありませんでしたが、現在は更新可能になっています。 ↩︎

  3. 参照可能なリポジトリを選択することもできます。 ↩︎

豆蔵では共に高め合う仲間を募集しています!

recruit

具体的な採用情報はこちらからご覧いただけます。