> For the complete documentation index, see [llms.txt](https://manual.dxable.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://manual.dxable.com/1password/use-secret-references-with-1password-cli.md).

# 1Password CLIでシークレット参照を使う

1Password CLIを使うと、[シークレット参照](https://developer.1password.com/docs/cli/secret-reference-syntax)を使用して、プレーンテキスト（平文）でシークレットを公開することなく、1Passwordに保存されている情報を環境変数、構成ファイル、スクリプトに安全に読み込むことができます。<br>

シークレット参照のURIには、1Passwordアカウントでシークレットが保存されるvault、アイテム、セクション、フィールドの名前が含まれます。

```
$ op://<①vault-name>/<②item-name>/[③section-name/]<④field-name>
```

シークレット参照を実行時に参照するシークレットに置き換えるには、[`op read`](https://developer.1password.com/docs/cli/secret-references/#with-op-read)、[`op run`](https://developer.1password.com/docs/cli/secret-references/#with-op-runhttps://developer.1password.com/docs/cli/secret-references/#with-op-run)、または[`op inject`](https://developer.1password.com/docs/cli/secret-references/#with-op-inject)コマンドを使います。

{% hint style="success" %}
TIP<br>

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

### **必要条件** <a href="#hrhnvjw5fz52" id="hrhnvjw5fz52"></a>

1Password CLIでシークレット参照を使って安全にシークレットをロードするには、以下のことが必要です：

①[1Passwordにサインアップする](https://1password.com/pricing)。

②[1Password CLIをインストールする](https://developer.1password.com/docs/cli/get-started/#step-1-install-1password-cli)。

③参照したいシークレットを1Passwordアカウントに保存する。

\
**ステップ1：シークレット参照を取得する**

シークレット参照を取得するにはいくつかのやり方があります。

* [1Passwordデスクトップアプリで取得する](https://developer.1password.com/docs/cli/secret-reference-syntax/#with-the-1password-desktop-app)： アプリからシークレット参照を入手してください。
* [1Password for VS Codeで取得する](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="#u46xrc1shf21" id="u46xrc1shf21"></a>

シークレット参照を作成したら、それをコード中の平文のシークレットの代わりに使ってください。

以下の例では、GitHubの環境ファイルに、平文のトークンではなく、1Password内のGitHub Personal Access Tokenが保存されている場所を指すシークレット参照を指定しています。

![](/files/x1jVfOHj68q2JRxl2xK5)

### **ステップ3：シークレット参照を解決する** <a href="#id-1p6tejfrze5t" id="id-1p6tejfrze5t"></a>

シークレット参照をランタイムに実際のシークレットで置き換えるには3つの方法があります。

* [`op read`コマンドを使いシークレットを標準出力（`stdout`）またはファイルに書き出させる。](https://developer.1password.com/docs/cli/secret-references/#with-op-read)
* [`op run`コマンドを使いプロセスに対してシークレットを環境変数として送る。](https://developer.1password.com/docs/cli/secret-references/#with-op-run)
* [`op inject`コマンドを使い設定ファイルやスクリプトにシークレットをインジェクトする。](https://developer.1password.com/docs/cli/secret-references/#with-op-inject)

#### **`op read`コマンドで出力する**[**​**](https://developer.1password.com/docs/cli/secret-references/#with-op-read) <a href="#pyp5f2ww0tsy" id="pyp5f2ww0tsy"></a>

[`op read`](https://developer.1password.com/docs/cli/reference/commands/read/) コマンドとシークレット参照を使ってシークレットを標準出力（`stdout`）に出力できます。

```
$ op read op://development/GitHub/credentials/personal_token
```

<details>

<summary>結果の例：</summary>

ghp\_WzgPAEutsFRZH9uxWYtw

</details>

シークレットを`stdout`ではなくファイルに書き込むには、新しいファイルへのパスとともに`--out-file`フラグ（または `-o`）を含めます。例えば、GitHub personal access tokenを含むファイル`token.txt`を作成するには、次のようにします。

```
$ op read --out-file token.txt op://development/GitHub/credentials/personal_token
```

{% code title="結果の例：token.txt" %}

```
$ ghp_WzgPAEutsFRZH9uxWYtw
```

{% endcode %}

また、シークレット参照を指定した`op read`コマンドを使って、[シークレットをスクリプトに読み込む](https://developer.1password.com/docs/cli/secrets-scripts/)こともできます。例えば、`docker login`コマンドでDockerユーザー名とパスワードの代わりにシークレット参照を使うには、次のようにします。

{% code title="myscript.sh" %}

```
$ #!/bin/bash
$
$ docker login -u $(op read op://prod/docker/username) -p $(op read op://prod/docker/password)
```

{% endcode %}

Query parameters\
[クエリーパラメーター](https://developer.1password.com/docs/cli/secret-reference-syntax/#retrieve-field-and-file-metadata-)を含むシークレット参照を使用して、アイテムに関する詳細情報を取得できます。\
アイテムフィールドまたはファイル添付に関する情報を取得するには、取得する属性とともに`attribute`（または`attr`）クエリーパラメーターを含めて命令します。

```
$ op://<vault>/<item>[/<section>]/<field>?attribute=<attribute-value>
```

この方法でフィールドの次の属性を照会できます: `type`、`value`、`title`、`id`、`purpose`、`otp`

さらに照会できる、ファイル添付ファイルの属性は次のとおりです: `content`, `size`, `id`, `name`, `type`.

例えば、 GitHubアイテムのワンタイムパスワードフィールドからワンタイムパスワードを取得するには、次のようにします。

```
$ op read "op://development/GitHub/Security/one-time password?attribute=otp"
```

<details>

<summary>結果の例：</summary>

359836

</details>

OpenSSH形式でSSHキーのプライベートキーを取得するには、SSHキーのprivate keyフィールドのシークレット参照に、値openssh を持つssh-formatクエリーパラメーターを含めます。

<pre><code><strong>$ op read "op://Private/ssh keys/ssh key/private key?ssh-format=openssh"
</strong></code></pre>

<details>

<summary>結果の例：</summary>

\-----BEGIN OPENSSH PRIVATE KEY-----\
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABD3rRrf8J\
ruD0CxZTYfpbTYAAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIJ5B/GnxX6t9jMwQ\
G7QE7r5daJLkMKTZhNZhWfvzK2y+AAAAkLgQAivYu/+12/YrZhK5keIAZf4ZgsZsZ2JI2q\
qbx23PqgO93oGy1iCxXe3kngQL4cM6lwOZPsZPKCinkN6KxEr6RnXqFRHJbMpOiGeZhTuD\
rjeo77HqFdxDqDeckB77XCKL0Ew28H5JlM/WO31XR3Z4VBAgTe+BQLjrFV8WU5UX38hpBJ\
PMJyRsK72ZUDDaGQ==\
\-----END OPENSSH PRIVATE KEY-----

</details>

{% hint style="info" %}
次のステップ

[シークレットをスクリプトに安全にロードする方法](https://developer.1password.com/docs/cli/secrets-scripts/)について詳しく学習します。
{% endhint %}

#### **`op run`コマンドで出力する** <a href="#xtqdixh9u7ub" id="xtqdixh9u7ub"></a>

`op run`は、環境変数をスキャンしてシークレット参照を探し、1Passwordから対応する値をロードし、サブプロセスの実行中は環境変数としてシークレットを使用できるようにして、指定されたコマンドをサブプロセスで実行します。

\
[**シークレットをアプリケーションまたはスクリプトに渡す**](https://developer.1password.com/docs/cli/secret-references/#pass-the-secrets-to-an-application-or-script)

実行時にスクリプトまたはアプリケーションにシークレットを渡すには、コマンドをop runで囲みます。

例えば、データベースに接続するために資格情報を必要とするNode.js アプリを次に示します。<br>

```
$ $ node app.js
$ [INFO] Launching Node.js app...
$ [ERROR] Missing credentials DB_USER and DB_PASSWORD
$ [INFO] Exiting with code 1
```

この例では、`DB_USER`と`DB_PASSWORD`環境変数をシークレット参照に設定できます。<br>

{% tabs %}
{% tab title="Bash, Zsh, shの場合" %}

```
$ export DB_USER="op://app-dev/db/user"
$ export DB_PASSWORD="op://app-dev/db/password"
```

{% endtab %}

{% tab title="fishの場合" %}

```
$ set -x DB_USER="op://app-dev/db/user"
$ set -x DB_PASSWORD="op://app-dev/db/password"
```

{% endtab %}

{% tab title="PowerShellの場合" %}

```
PS C:¥> $Env:DB_USER = "DB_USER=op://app-dev/db/user"
PS C:¥> $Env:DB_PASSWORD = "DB_PASSWORD=op://app-dev/db/password"
```

{% endtab %}
{% endtabs %}

次に、`op run`コマンドを使って、シークレットを`node app.js`コマンドに渡します。

```
$ op run -- node app.js
$ [INFO] Launching Node.js app…
$ [DEBUG] ✔ Connected to db as user 'mydbuser' with password '<concealed by 1Password>'
```

**環境ファイルと一緒にop runコマンドを使う**

環境ファイルで`op run`コマンドを使うこともできます。これを行うには、環境ファイルでプレーンテキストのシークレットの代わりにシークレット参照を使います<br>

{% code title="node.envの例" %}

```
DB_USER="op://app-dev/db/user"
DB_PASSWORD="op://app-dev/db/password"
```

{% endcode %}

次に、`--env-file`フラグを指定して`op run`コマンドを使います。

```
op run --env-file="./node.env" -- node app.js
```

**マスクなしでシークレットをプリントする**

`op run`で使われるサブプロセスが`stdout`にシークレットを出力する場合、そのシークレットはデフォルトでは隠されます。`--no-masking`フラグを追加すると値を出力できます。

{% tabs %}
{% tab title="Bash, Zsh, shの場合" %}
サンプルの環境変数`DB_PASSWORD`をシークレット参照にエクスポートするには次のように書きます：

```
$ export DB_PASSWORD=op://app-prod/db/password
```

`op run`を`printenv`コマンドと一緒に使うと、隠蔽されたシークレットを出力できます：

```
$ op run -- printenv DB_PASSWORD
```

結果を見る...

```
<concealed by 1Password>
```

`--no-masking`フラグをつけるとシークレットそのものを出力します：

```
$ op run --no-masking -- printenv DB_PASSWORD
```

結果の例（訳注：マスクがない）：

```
fX6nWkhANeyGE27SQGhYQ
```

{% endtab %}

{% tab title="fishの場合" %}
サンプルの環境変数`DB_PASSWORD`をシークレット参照にエクスポートするには次のように書きます：

```
$ set -x DB_PASSWORD=op://app-prod/db/password
```

`op run`を`printenv`コマンドと一緒に使うと、隠蔽されたシークレットを出力できます：

```
$ op run -- printenv DB_PASSWORD
```

結果を見る...

```
<concealed by 1Password>
```

`--no-masking`フラグをつけるとシークレットそのものを出力します：

```
$ op run --no-masking -- printenv DB_PASSWORD
```

結果の例（訳注：マスクがない）：

```
fX6nWkhANeyGE27SQGhYQ
```

{% endtab %}

{% tab title="PowerShellの場合" %}
サンプルの環境変数`DB_PASSWORD`をシークレット参照にエクスポートするには次のように書きます：

```
PS C:¥> Env:DB_PASSWORD = "DB_PASSWORD=op://app-prod/db/password"
```

隠蔽されたシークレットを出力するには次のように書きます：

```
PS C:¥> op run -- powershell -c '$env:DB_PASSWORD'
```

結果の例：

```
<concealed by 1Password>
```

`--no-masking`フラグをつけるとシークレットそのものを出力します：

```
PS C:¥> op run --no-masking -- powershell -c '$env:DB_PASSWORD'
```

結果の例（訳注：マスクがない）：

```
fX6nWkhANeyGE27SQGhYQ
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**次のステップ**

テンプレート変数を使用して[さまざまな環境のさまざまなシークレット セットを切り替える方法](https://developer.1password.com/docs/cli/secrets-environment-variables/)など、op run を使用して環境にシークレットをロードする方法について詳しく学習します。
{% endhint %}

#### `op inject`コマンドで出力する[​](https://developer.1password.com/docs/cli/secret-references/#with-op-read)

[`op inject`](https://developer.1password.com/docs/cli/reference/commands/inject/)コマンドを使うと、スクリプトまたはファイル内のシークレット参照を、それらが参照するシークレットに置き換えることができます。

デフォルトでは、`op inject`は `stdin`からの入力を受け入れ、`stdout` に出力します。その代わりにファイルから入力を読み込ませるには`--in-file`フラグ（または `-i`）を使い、出力を書き込む場所を指定するには`--out-file`フラグ（または `-o`）を使います。

`op inject`を使い簡単なコマンドでシークレットを解決するには：

```
$ echo "here is my GitHub token: op://development/GitHub/credentials/personal_token" | op inject
```

<details>

<summary>結果の例：</summary>

here is my GitHub token: ghp\_WzgPAEutsFRZH9uxWYtw

</details>

出力をカレントディレクトリーの`token.txt`ファイルに書き込むよう指定するには：

```
$ echo "here is my GitHub token: op://development/GitHub/credentials/personal_token" >> token.txt | op inject --out-file token.txt
```

{% code title="結果の例（token.txt）" %}

```
$ here is my GitHub token: ghp_WzgPAEutsFRZH9uxWYtw
```

{% endcode %}

#### 設定ファイルと一緒に使う

**op inject**を使うと、シークレット参照でテンプレート化された設定ファイルを渡して、解決されたシークレットを含めた設定ファイルを出力できます。プレーンテキストのシークレットの代わりにシークレット参照を使う設定ファイルは、Gitに安全にチェックインできます。

{% code title="設定ファイルの例（config.yml.tpl）：" %}

```
database:
    host: http://localhost
    port: 5432
    username: op://prod/mysql/username
    password: op://prod/mysql/password
```

{% endcode %}

コードの例：

```
$ op inject --in-file config.yml.tpl --out-file config.yml
```

{% hint style="info" %}
**次のステ**

ップ テンプレート変数を使用してさまざまな環境のさまざまなシークレット セットを切り替える方法など、op inject を使用して[シークレットを構成ファイルに読み込む](https://developer.1password.com/docs/cli/secrets-config-files/)方法について詳しく学習します。
{% endhint %}

### **より深く学習するには**[**​**](https://developer.1password.com/docs/cli/secret-references/#learn-more) <a href="#gasv434a7a07" id="gasv434a7a07"></a>

* [Secret reference syntax](https://developer.1password.com/docs/cli/secret-reference-syntax/)
* [Load secrets into the environment](https://developer.1password.com/docs/cli/secrets-environment-variables/)
* [Load secrets into config files](https://developer.1password.com/docs/cli/secrets-config-files/)
* [Load secrets into scripts](https://developer.1password.com/docs/cli/secrets-scripts/)
* [Use service accounts with 1Password CLI](https://developer.1password.com/docs/service-accounts/use-with-1password-cli)
