GitHub Actionsで機密情報を扱う方法

GitHub ActionsでAPIキーなど機密情報を扱う場合、Secretを使うと安全に利用できます。

Secretには2種類あり、Environment SecretとRepository Secretです。Environment Secretは本番環境や検証環境などで区別して利用できます。Repository Secretはリポジトリ内で同一の値を利用できます。

:::note warn
2つのSecretはActionsでの使い方が違います。
GitHub上での設定方法が似ており、微妙に異なる利用方法を誤ると値を取得できないので、どちらを使うのか気をつけてください。
:::

## Environment Secret
### 追加方法
リポジトリのSettings
![2022-04-26_21h46_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/4deb330a-2d28-72df-b15e-9e0d6730f04d.png)

左ペインのEnvironments
![2022-04-26_21h47_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/9a70481b-e048-293c-9642-bee42adf49b0.png)

右上の「New environment」
![2022-04-26_21h48_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/01ad1f4c-e30a-6c8e-f6bb-b40c6ae761a7.png)

:::note
既存のものに追加する場合は、Environment名のリンクをクリックします。
:::

環境名（production, stagingなど）を入力し、「Configure environment」ボタンをクリック
![2022-04-26_21h49_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/2f6093ca-ae5a-4571-7f51-5562fe27b0f2.png)

ページ下部の「Environment secrets」内の「Add Secret」をクリック
![2022-04-26_21h52_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/b898c032-717f-0fc5-94ef-486a4fd3a9b4.png)

Name、Valueを入力し、「Add secret」をクリック
![2022-04-26_21h57_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/c34ef44c-9728-1fce-2f8d-9f39f668b30e.png)

Environment secretsに追加したNameがあれば完了。
![2022-04-26_21h54_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/3efb1df0-1c65-058d-85bd-977d67659532.png)

:::note warn
追加後にValueの内容は表示できません。Updateボタンから更新はできます。
:::

### Actionsでの使い方
```YAML
# .github/workflows/****.yml
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    environment: 
      name: production  # 環境名を指定（記載しないとSecretを取得不可）
    steps:
      - run: |
      # secretは ${{ secrets.<Name> }} 形式で取得可能
          echo ${{ secrets.API_KEY }}  
```

## Repository Secret
### 追加方法
リポジトリのSettings
![2022-04-26_21h46_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/4deb330a-2d28-72df-b15e-9e0d6730f04d.png)

左ペインのSecrets→Actions
![2022-04-26_22h04_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/d903f536-d801-c4c9-6db7-4b6a81627030.png)

右上の「New repository secret」をクリック
![2022-04-26_22h05_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/1ca50881-d1a3-a325-b289-c5ffd5799f22.png)

Name、Valueを入力し、「Add secret」をクリック
![2022-04-26_22h06_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/04c2a584-6f46-4f8f-6164-d561632165c3.png)

Repository Secretsに追加したNameがあれば完了
![2022-04-26_22h07_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20639/0979b75e-f461-1fcb-b5d5-a23e39b7696e.png)

:::note warn
追加後にValueの内容は表示できません。Updateボタンから更新はできます。
:::

### Actionsでの使い方
```YAML
# .github/workflows/****.yml
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    steps:
      - run: |
      # secretは ${{ secrets.<Name> }} 形式で取得可能
          echo ${{ secrets.APP_ID }}  
```

:::note
Environment Secretのように、YAML内で上記以外の設定は不要です。
:::

## まとめ
Secretには2種類あり、Environment SecretとRepository Secretがあります。Environment SecretはEnvironmentsから追加可能です。Repository SecretはSecrets→Actionsから追加可能です。
Actionsではいずれも`${{ secrets.<Secret名> }}`で参照可能です。Environment Secretの場合は、`environment`で環境名を指定することを忘れないでください。