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(production・staging など)ごとにシークレットを設定できます。
# 環境を指定して登録 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オプションを使う