GitHub ActionsのシークレットをCLIで登録する:gh secret コマンド入門

スポンサーリンク

GitHub ActionsのシークレットをCLIで登録する:gh secret コマンド入門

はじめに

GitHub ActionsのシークレットはGitHub UIから設定するのが一般的ですが、手作業には以下の問題があります。

  • 環境が増えるたびに同じ作業を繰り返す
  • 設定漏れや入力ミスが発生しやすい
  • 作業手順をドキュメントに残しにくい

gh CLIを使えばシークレットの登録・確認・削除をコマンドで行えます。スクリプト化してチームで共有することも可能です。


前提:gh CLIのインストールと認証

# macOS(Homebrew)
brew install gh

# 認証
gh auth login

認証後、操作したいリポジトリのディレクトリで実行します。


シークレットを1件登録する

gh secret set シークレット名 --body "値"
gh secret set SLACK_BOT_TOKEN --body "xoxb-xxxxxxxxxxxx"

.envファイルから値を読み取って登録する

gh secret set SLACK_BOT_TOKEN --body "$(grep SLACK_BOT_TOKEN .env | cut -d= -f2)"
gh secret set SLACK_CHANNEL --body "$(grep SLACK_CHANNEL .env | cut -d= -f2)"

grep でキーに対応する行を抽出し、cut= の後の値だけを取り出しています。


.envファイルから一括登録する(推奨)

.env ファイルのシークレットをまとめて登録できます。

gh secret set --env-file .env

.env ファイルの形式:

SLACK_BOT_TOKEN=xoxb-xxxxxxxxxxxx
SLACK_CHANNEL=C0123456789
DATABASE_URL=postgres://user:pass@host:5432/db
API_KEY=your-api-key

1コマンドで全シークレットが登録されます。手作業と比べて大幅に効率化できます。

注意: .env ファイルは .gitignore に追加してリポジトリにコミットしないようにしてください。

echo ".env" >> .gitignore

登録済みシークレットを確認する

gh secret list
NAME             UPDATED
SLACK_BOT_TOKEN  about 1 minute ago
SLACK_CHANNEL    about 1 minute ago
DATABASE_URL     about 1 minute ago
API_KEY          about 1 minute ago

値そのものはセキュリティ上表示されません。登録されているシークレット名と更新日時のみ確認できます。


シークレットを削除する

gh secret delete シークレット名
gh secret delete API_KEY

環境(Environment)ごとのシークレット

GitHub ActionsのEnvironment(productionstaging など)ごとにシークレットを設定できます。

# 環境を指定して登録
gh secret set DATABASE_URL \
  --body "postgres://user:pass@prod-host/db" \
  --env production

# .envファイルから一括登録
gh secret set --env-file .env.production --env production

# 環境のシークレット一覧
gh secret list --env production

Variables(変数)の登録

シークレットではない非機密の値は Variables として管理します。値がUIでも確認できる点がシークレットと異なります。

# 変数を登録
gh variable set APP_ENV --body "production"

# .envファイルから一括登録
gh variable set --env-file .env.vars

# 変数一覧
gh variable list

# 変数を削除
gh variable delete APP_ENV

シークレット登録スクリプトの例

チームで共有するセットアップスクリプトとして活用できます。

#!/bin/bash
# setup-secrets.sh

set -e

echo "GitHub Secretsを登録します..."

gh secret set --env-file .env

echo "登録済みシークレット一覧:"
gh secret list

echo "完了しました"
chmod +x setup-secrets.sh
./setup-secrets.sh

まとめ

操作 コマンド
1件登録 gh secret set NAME --body "値"
.envから一括登録 gh secret set --env-file .env
一覧表示 gh secret list
削除 gh secret delete NAME
環境ごとに登録 gh secret set NAME --body "値" --env 環境名
変数を登録 gh variable set NAME --body "値"
  • --env-file オプションで .env ファイルから一括登録するのが最も効率的
  • .env ファイルは必ず .gitignore に追加する
  • 環境(production・staging)ごとに管理したい場合は --env オプションを使う