> 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)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://manual.dxable.com/1password/use-secret-references-with-1password-cli.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
