# シークレットを環境にロードする

### **シークレットを環境にロードする** <a href="#h40omwanxk70" id="h40omwanxk70"></a>

1Password CLIを使うと、[シークレット参照](https://developer.1password.com/docs/cli/secret-reference-syntax/)を環境変数としてプロビジョニングして、さまざまな環境向けに複数の構成を作成するプロセスを簡素化できます。シークレット参照を使えば、構成設定を変更したり、コードに平文のシークレットを入力したりすることなく、 1Passwordでシークレットを編集できます。\
環境変数をシークレット参照に設定したら、[op run](https://developer.1password.com/docs/cli/reference/commands/run/)コマンドを使って、必要なシークレットを使いながらアプリをプロビジョニングできます。

[最小特権の原則](https://developer.1password.com/docs/cli/best-practices/)に従うために、[1Password Service Accounts](https://developer.1password.com/docs/service-accounts/)を使うことをお勧めします。サービス アカウントは、 1Password CLI を特定のVault（保管庫）に制限することをサポートしているため、承認されたターミナル セッションのプロセスは、特定の目的のために必要なアイテムにのみアクセスできます。

注意\
コンピューター上のプロセスは、同じユーザーによって実行される他のプロセスの環境にアクセスできると考える必要があります。環境変数を通じてシークレットを提供する場合は、この点に注意してください。

### **必須条件**[**​**](https://developer.1password.com/docs/cli/secrets-environment-variables/#requirements) <a href="#x3dqbgam5w5e" id="x3dqbgam5w5e"></a>

環境にシークレットをロードする前に、次のことを行う必要があります。

1. [1Passwordにサインアップ](https://1password.com/pricing)する。
2. [1Password CLIをインストールする](https://developer.1password.com/docs/cli/get-started/#step-1-install-1password-cli)。
3. プロビジョニングするシークレットを1Passwordアカウントに保存する。

### **ステップ1：シークレット参照を取得する**[**​**](https://developer.1password.com/docs/cli/secrets-environment-variables/#step-1-get-secret-references) <a href="#puznx2wf504y" id="puznx2wf504y"></a>

シークレット参照はいくつかの方法で取得できます。

* [1Passwordデスクトップ アプリを使う場合](https://developer.1password.com/docs/cli/secret-reference-syntax/#with-the-1password-desktop-app)：アプリから秘密の参照をコピーします。
* [1Password for VSCode を使う場合](https://developer.1password.com/docs/vscode/#get-values)：コードを編集するときに 1Password から秘密の参照を挿入します。
* [1Password CLI を使う場合](https://developer.1password.com/docs/cli/secret-reference-syntax/#with-1password-cli)：op item getコマンドを使い1つまたは複数のフィールドのシークレット参照を取得します。
* [シークレット参照構文規則](https://developer.1password.com/docs/cli/secret-reference-syntax/#syntax-rules)を使って、シークレット参照を手動で記述します。

### **ステップ2：シークレットをアプリケーションに渡す** <a href="#fmra6ko0sd1c" id="fmra6ko0sd1c"></a>

必要なシークレットをアプリに配置するには、シークレット参照を適切な環境変数にマップし、op runコマンドを使ってシークレットをアプリケーションに渡します。

これを行うには2つの方法があります。

[**環境変数**](https://developer.1password.com/docs/cli/secrets-environment-variables/#export-environment-variables)をエクスポートする

コマンドラインから環境変数を [シークレット参照](https://developer.1password.com/docs/cli/secret-reference-syntax/)として個別にエクスポートできます。

①必要な環境変数をエクスポートします：\
Bash, Zsh, shの場合\
$ export GITHUB\_TOKEN=op\://development/GitHub/credentials/personal\_token

fishの場合\
$ set -x GITHUB\_TOKEN op\://development/GitHub/credentials/personal\_token\
PowerShellの場合\
PS C:¥> $Env:GITHUB\_TOKEN = "op\://development/GitHub/credentials/personal\_token"

②op run -- をアプリの起動コマンドをと一緒に使います：

* op run -- gh

#### **環境ファイル群（.env）**[**​**](https://developer.1password.com/docs/cli/secrets-environment-variables/#use-environment-env-files)**を使う** <a href="#m5qdzrub06d2" id="m5qdzrub06d2"></a>

Environment files allow you to define multiple (secret) environment KEY=VALUE環境ファイルを使うと、改行で区切られたステートメントを使用して複数の (秘密の) 環境変数を定義できます。これらのファイルの.env拡張子は .

環境ファイルをソース管理にチェックインして、どこでも同じ環境を使用できます。例えば、テスト シークレットに環境ファイルを使うと、シークレットを個別にプロビジョニングしなくても、ローカルと CI の両方でテストを実行できます。

prod.env\
$ AWS\_ACCESS\_KEY\_ID="op\://development/aws/Access Keys/access\_key\_id"\
$ AWS\_SECRET\_ACCESS\_KEY="op\://development/aws/Access Keys/secret\_access\_key"

環境ファイルを使うには、op runコマンドで--env-fileフラグを使って環境ファイルへのパスを指定します。\
$ op run --env-file="./prod.env" -- aws

環境ファイルの構文規則

.envのファイル解析エンジンは次の規則に従います。

* 環境変数は、改行で区切られたKEY=VALUEステートメント群として定義されます。
* 変数は、’または”で囲むと複数行に続けて書くことができます。

例：\
MY\_VAR = "this is on the first line\
and this is on the second line"

* 空行はスキップされます。
* \#で始まる行はコメントとして扱われます。コメントはKEY=VALUEステートメントの後にインラインで配置することもできます。
* 空の値は空の文字列になります。例えば\
  EMPTY=\
  という文は環境変数EMPTYを空の文字列に設定します。
* 値が一重引用符または二重引用符で囲まれている場合、これらの引用符は評価された値には含まれません。したがってKEY="VALUE"、 とKEY='VALUE'は両方ともKEYとVALUEとして評価されます。
* $VAR\_NAMEまたはの出現は、${VAR\_NAME}環境からのそれぞれの値に置き換えられます。
* .envファイル内で定義された変数は、同じファイル内の後方で参照できます。

例：\
SOME\_VAR = value\
OTHER\_VAR = ${SOME\_VAR}

* 特殊文字は\でエスケープできます。例えば、\
  MY\_VAR = "\\$SOME\_VAR that is not actually replaced."

ではMY\_VARは次の値になります。\
$SOME\_VAR that is not actually replaced.

* 内部引用符は維持されるため、JSON={"foo":"bar"}は、JSONと{"foo":"bar"}に評価されます。
* 変数は、一重引用符で囲まれた値では置き換えられません。そのためKEY='$SOME\_VAR'は、KEYと$SOME\_VARとに評価されます。
* テンプレート構文が、シークレットをVALUEで注入するために使えます。KEYにはテンプレート変数のみを入れることができます。
* テンプレート解析は.envファイル解析の後に実行されるため、前者を使用して後者を構築することはできません。
* KEYとVALUEの両方のセグメントの先頭と末尾の空白は無視されるため、 KEY = VALUEはKEY=VALUEと同じように解析されます。
* 一重引用符と二重引用符で囲まれた値は先頭と末尾の空白が維持されるため、KEY=" some value "はKEYおよびsome valueと評価されます。
* これらのファイルでは UTF-8エンコードを使う必要があります。

### ステップ3：環境に合わせてシークレットセットを変える <a href="#id-1x6r2925v1mb" id="id-1x6r2925v1mb"></a>

\
環境ごとに異なるシークレットセットがある場合は、単一の環境ファイルを使って適切なシークレットをアプリケーションに渡すことができます。これを行うには、全環境で1Passwordシークレットを同じ方法で構成するようにしてください。\
例: dev/mysql/passwordとprod/mysql/password\
次に、環境ファイル内の各シークレットのVault名の代わりに、外部で設定された変数（$VARIABLE\_NAME）を含めます。これにより、各環境で使うシークレットのセットを指定できるようになります。

例えば、次の .env ファイルでは、$APP\_ENV は外部で設定された環境変数です。

* app.env\
  $ MYSQL\_DATABASE = "op\://$APP\_ENV/mysql/database"\
  $ MYSQL\_USERNAME = "op\://$APP\_ENV/mysql/username"\
  $ MYSQL\_PASSWORD = "op\://$APP\_ENV/mysql/password"

開発環境にアプリをデプロイするために、dev vaultからシークレットセットを使うには：\
Bash, Zsh, sh, fishの場合\
$ APP\_ENV=dev op run --env-file="./app.env" -- myapp deployop\://development/GitHub/credentials/personal\_token\
PowerShellの場合\
①$APP\_ENV変数を設定します。\
PS C:¥> $ENV:APP\_ENV = "dev"\
②op run -- を環境変数と一緒に使います。\
PS C:¥> op run --env-file="./app.env" -- myapp deploy

### 次のステップ：本番環境で使う <a href="#bo7027vsia7o" id="bo7027vsia7o"></a>

アプリケーションが適切な構成でローカルで動作するようになったので、[1Password CLIを1Password Connect Serverとともに使って](https://developer.1password.com/docs/connect/connect-cli/)、実稼働環境でシークレットをプロビジョニングできます。また、[CIで1Password CLI を設定し](https://developer.1password.com/docs/connect/connect-cli/#optional-set-up-the-ci-environment)、他の構成と一緒にシークレット参照を定義することもできます。

次の記事も参照してください。

* [Use 1Password Connect Server with 1Password CLI](https://developer.1password.com/docs/connect/connect-cli/#optional-set-up-the-ci-environment)
* [Load secrets into config files](https://developer.1password.com/docs/cli/secrets-config-files/)
* [Secret reference syntax](https://developer.1password.com/docs/cli/secret-reference-syntax/)
* [Template syntax](https://developer.1password.com/docs/cli/secrets-template-syntax/)
