# シークレット (/ja/docs/workspaces/secrets)

シークレットは、値があなたのMacのキーチェーンに残る変数です。ワークスペースのファイルには名前だけが入るので、認証情報を共有することなく、ワークスペースをコミットして共有できます。パスワード、トークン、APIキー、チャットに貼り付けたくないものには、シークレットを使います。

## 変数をシークレットにする [#make-a-variable-secret]

1. 変数のテーブルを開きます。[環境](/docs/workspaces/environments)ページ、**フォルダ設定… › 変数**、またはリクエストの**変数**タブです。
2. 変数を追加するか、すでにある変数を見つけて、**シークレット**にチェックを入れます。
3. フィールド（**このMacでは未設定**と表示されています）に値を入力して、<kbd>↩</kbd>を押すか、**保存**をクリックします。

フィールドに値が再び表示されることはありません。値が入ると、鍵のアイコンとともに**キーチェーンに保存済み**と表示されます。値を変更するには、新しい値を入力して保存します。

シークレットは、ほかの変数と同じように`{{token}}`として使います。

<Shot id="workspaces-secret-variable" alt="環境ページのワークスペース変数。tokenにシークレットの印が付き、値のフィールドに「キーチェーンに保存済み」と表示されている" />

ファイルでは、シークレットは名前とフラグだけで、値はありません。

```toml
[[variables]]
name = "token"
secret = true
```

各レベルが、それぞれ自分の値を持ちます。Stagingの環境にあるシークレット`password`とProductionにあるものは、キーチェーンの2つの項目なので、環境ごとに別のパスワードを持てます。

## 値の保管場所 [#where-the-values-live]

値は、ログインキーチェーンに、シークレット1つにつき1項目で保存され、`Echolot secret <name>`というラベルが付きます。値は、ワークスペース（`workspace.toml`にあるID）と、変数が定義されているレベルに属します。同じMac上のコマンドラインツールは、同じ項目を読み取ります。

このMacに値がないシークレットは、別のレベルにフォールバックしません。値を設定するまで、リクエストは`the secret {{password}} has no value on this Mac`と表示します。

<Edition only="appstore">
  App Store版も同じキーチェーンを使います。ダイレクトダウンロード版やコマンドラインツールが作った項目では、最初にアクセスの許可を求められることがあります。その場合は**常に許可**を選んでください。
</Edition>

## ファイルに入らないもの [#what-never-goes-into-files]

Echolotは、次のものをワークスペースのファイルに入れません。

- シークレット変数の値。
- [レスポンスのキャプチャ](/docs/requests/captures)が保存するシークレット。シークレットとして設定したキャプチャは、キーチェーンにのみ書き込みます。Alpenglowでは、**Auth › Sign in**が`access_token`をシークレット`{{token}}`にキャプチャします。
- OAuth 2.0のトークンとMCPのサインイン。
- **キーチェーンに移動**（下記）で移した値。

プレーンテキストで入力した内容は、プレーンテキストのままです。認証やプロキシのパスワードのフィールドに、変数ではなく値そのものが入っている場合、Echolotはその下に<strong>ワークスペースのファイルにプレーンテキストとして保存されます。</strong>と警告を表示します。<strong>キーチェーンに移動</strong>をクリックすると、値がワークスペースのシークレット変数になり、フィールドには代わりに`{{name}}`が入ります。

シークレットは、Echolotが解決済みのリクエストを表示したり渡したりするすべての場所でも、マスクされます。プレビュー、クイックルック、変数パネル、履歴の検索、エージェントが受け取るすべてが対象です。[コードを生成…](/docs/workspaces/exporting#copy-a-request-as-code)と**cURLとしてコピー**は例外で、リクエストを送信されるとおりに、シークレットも含めて書き出します。

## 読み込みで認証情報がシークレットに移る [#imports-move-credentials-into-secrets]

Postmanのコレクション、Insomniaのエクスポート、そのほかのファイルを[読み込む](/docs/get-started/importing)と、認証設定や認証情報のヘッダーにあるパスワード、トークン、APIキーが、シークレット変数になります。値はキーチェーンに保存され、リクエストには代わりに、リクエストの名前とフィールドから作られた`{{name}}`（`{{me_password}}`など）が入ります。読み込みのレポートには、保存したシークレットの名前が一覧表示され、値は表示されません。

アドレス（`https://user:pass@…`）、クエリ文字列、ボディに書かれた認証情報は、まだ移動されません。読み込んだ後に確認してください。

## 書き出しでは値が除かれる [#exports-leave-values-out]

[書き出し](/docs/workspaces/exporting)では、どの形式でも、シークレット変数は名前だけが書き出され、値はありません。書き出しを開いた人が、自分の側で値を設定します。

## コマンドラインとCIでのシークレット [#secrets-on-the-command-line-and-in-ci]

コマンドラインツールは、次の順でシークレットの値を探します。

1. `echolot run`に渡した`--secrets`ファイル。`NAME=value`の行です。
2. 環境変数`ECHOLOT_SECRET_<NAME>`。名前を大文字にし、英字と数字以外の文字をすべて`_`にしたものです。`{{token}}`は`ECHOLOT_SECRET_TOKEN`を、`{{api-key}}`は`ECHOLOT_SECRET_API_KEY`を読みます。
3. Macでは、アプリが保持しているキーチェーンの項目。

```sh
ECHOLOT_SECRET_TOKEN=… echolot run Alpenglow.echolot --folder orders
echolot run Alpenglow.echolot --env staging --secrets staging.secrets
```

`CI`が設定されているときと、`ECHOLOT_KEYCHAIN=0`のときは、キーチェーンは使われません。CIでは、CIのシークレットストアから`ECHOLOT_SECRET_…`変数を設定してください。[CI](/docs/cli/ci)を参照してください。

環境変数で見つかったシークレットは、すべてのレベルに適用されます。`ECHOLOT_SECRET_PASSWORD`は、どの環境でも`{{password}}`に答えます。

コマンドラインでの読み込みも、アプリと同じように認証情報をシークレットに移します。キーチェーンがない場合、ツールはどの`ECHOLOT_SECRET_…`変数を設定すればよいかを伝えます。

## チームメンバーが最初に開くとき [#a-teammates-first-open]

ワークスペースをクローンしたチームメンバーには、すべてのシークレットの名前が渡り、値は1つも渡りません。そのテーブルには**このMacでは未設定**と表示されます。各自が自分の値を1回設定すれば、以降は全員が同じファイルで、それぞれの認証情報を使って作業できます。[Gitとチーム](/docs/workspaces/git-and-teams)を参照してください。
