# Keeper表記法

## 概要 <a href="#about" id="about"></a>

Keeper表記法は、Keeperシークレットマネージャー[SDK](/keeperpam/jp/secrets-manager/developer-sdk-library.md)および[統合機能](/keeperpam/jp/secrets-manager/integrations.md)でKeeperレコードのフィールドを照会するために使用されます。利用できるさまざまなレコードタイプとフィールド名については、[こちらのページ](/keeperpam/jp/secrets-manager/about/field-record-types.md)をご参照ください。

## 表記法 <a href="#notation" id="notation"></a>

{% tabs %}
{% tab title="形式" %}
**`keeper://<TITLE|UID>/<type|title|notes>`**

**`keeper://<TITLE|UID>/file/<filename|title|fileUID>`**

**`keeper://<TITLE|UID>/<field|custom_field>/<label|type>[[predicate1][predicate2]]`**

表記は4つの部分に分かれています。

* シークレットレコードのタイトルまたはUID
* レコードデータのセレクタ。以下の3種類があります。
  * ショートセレクタ: `type`、`title`、`notes`など、追加のパラメータなしで使用されるタイプ。
  * ファイルセレクタ: 1つのパラメータ (ファイル名、タイトル、UID) を指定できます。
  * フルセレクタ: フィールドタイプ (`field`や`custom_field`) を指定し、追加のパラメータを必要とします。
* フルセレクタのパラメータ\
  フルセレクタで使用されるパラメータは、レコード内の固有のフィールドを選択するフィールド**タイプ**または**ラベル**を指定する必要があります。述部はオプションです。
* 述部は、フィールド値のより詳細なオプションインデックスです。最初の述部は値の配列への数値インデックスで、2番目のインデックスは複合値の場合のプロパティインデックスです (例: .../custom\_field/name\[1]\[middle])。

{% hint style="warning" %}
最初の述部は、2番目の述部を使用するために常に必要です。以下の例のいずれかを使用してください。\
`phone[0][number]` — 最初の電話の番号だけを取得します (配列に電話が1件だけの場合でも)。\
`phone[][number]` — 値の配列内のすべての電話から番号を取得し、CSVのリストとして返します。
{% endhint %}

**述部**

述部を使用すると、値にきめ細かくアクセスできます。値は、1つの値の場合もあれば、値の配列の場合もあり、それぞれの値が文字列の場合もあれば、値の連想配列の場合もあります。

**配列**

述部が定義されていない場合は、1つの値のみが返されます。\
戻り値に値の配列が含まれている場合は、最初の値のみが返されます。\
数値を指定する述部が定義されている場合は (`phone[0]`など)、そのインデックスの値が返されます。\
インデックスは0から始まります。

値を指定しない述部が定義されている場合は (`phone[]`など)、配列値が返されます。

**サブフィールド**

<pre><code><strong>"fields": [
</strong>    { "type": "name", "value": [ 
        {"first:": "John", "last": "Doe"},
        {"first:": "Jane", "last": "Doe"} ]
    },
    { "type": "phone", "value": [
        {"number": "555-5555555", "ext": "55"}, 
        {"number": "777-7777777", "ext": "77"} ]
    }
]
</code></pre>

サブフィールドにアクセスするには、フィールド名を英数字の述部として含めます。\
たとえば、上の例では `name[0][first]` は「John」を返し、`name[1][first]` は「Jane」を返します。

**混合型**

```
[
    {"number": "555-5555555", "ext": "55"}, 
    {"number": "777-7777777", "ext": "77"}, 
    {"number": "888-8888888", "ext": "", "type": "Home"}, 
    {"number": "999-9999999", "type": "Work"}
]
```

特定の値を取得するには、最初の数値述部で値全体を取得できます。例: `phone[1]` は2番目の電話の値全体 `{"number": "777-7777777", "ext": "77"}` を返します。\
特定のサブフィールドを取得するには、述部を2段にします。例: `phone[1][number]` は2番目の値の電話番号だけを返します。
{% endtab %}

{% tab title="例" %}
これらの例を参考にして、Keeper表記法によるクエリを作成してください。 各例でのレコードUIDはサンプルです。

{% hint style="warning" %}
Keeper表記法を利用する場合は、例にあるUIDを実際のレコードのレコードUIDに置き換えてください。
{% endhint %}

**レコードのタイプ、タイトル、メモを照会する**\
`keeper://EG6KdJaaLG7esRZbMnfbFA/type`\
`keeper://EG6KdJaaLG7esRZbMnfbFA/title`\
`keeper://EG6KdJaaLG7esRZbMnfbFA/notes`

**ログインレコードのパスワードを照会する**\
`keeper://EG6KdJaaLG7esRZbMnfbFA/field/password`\
戻り値: `RX$u!h!pBzDGhR4Jr6#b` (レコードからランダムに生成されたパスワード)

**連絡先のレコードからファーストネームを照会する**\
`keeper://3FXqmP5nFKwju0H8pl0DmQ/field/name[first]`

戻り値: `'Craig'`

**レコードからファイルを照会する**\
`keeper://bf3dg-99-JuhoaeswgtFxg/file/credentials.txt`

戻り値: `b"jNxmJkhbZ[...]6jQtE"` (credentials.txtの内容)

**ラベルが「code」のカスタム暗証番号フィールドを照会する**

`keeper://aj3dg-9ecJuhoa-sdyehg/custom_field/code`

戻り値: `5876` (暗証番号)

**ログインレコードの二要素コードフィールドを照会する**

`keeper://aj3dg-9ecJuhoa-sdyehg/field/oneTimeCode`

戻り値: `5876891`

**複数のカスタムフィールド電話番号の2番目を照会する**

`keeper://aj3dg-9ecJuhoa-sdyehg/custom_field/phone[1]`

戻り値: `{"number":"555-555-5555", "type": "home"}`

**この電話フィールドの番号だけを取得する**

`keeper://aj3dg-9ecJuhoa-sdyehg/custom_field/phone[1][number]`

戻り値: `"555-555-5555"`

**レコードにあるすべての電話番号を配列として取得する**

`keeper://aj3dg-9ecJuhoa-sdyehg/custom_field/phone[]`

戻り値:

```javascript
[
  {"number":"123-456-7890", "type": "work"},
  {"number":"555-555-5555", "type": "home"}
]
```

{% endtab %}
{% endtabs %}

## 名前でレコードを取得 <a href="#fetching-records-by-name" id="fetching-records-by-name"></a>

KeeperシークレットマネージャーSDKでは、レコード名でレコードを取得するKeeper表記法をサポートしています。

### 表記文字のエスケープ <a href="#escaping-notation-characters" id="escaping-notation-characters"></a>

レコードのどこかに「/」「\」「\[」「]」が含まれている場合は、その文字をバックスラッシュでエスケープする必要があります。これらの記号は、内部セクションおよびインデックスの区切り文字として表記法で使用され、レコードタイトル、フィールドラベル、ファイル名に含まれる場合はエスケープする必要があります。

例:

タイトル: Twitter Login \[Marketing]\
`keeper://Twitter Login \[Marketing\]/field/password`\
ラベルが「/. links」のURLカスタムフィールド\
`keeper://My Slashdot Links/custom_field/\/.links[]` (すべてのリンク)\
`keeper://My Slashdot Links/custom_field/\/.links[1]` (2番目のリンクのみ)\
ファイル名: creds\[2].crt\
`keeper://My \/.Credentials/file/creds\[2\].crt`

### 名前を使用した環境切替の簡略化 <a href="#using-name-to-simplify-environment-switching" id="using-name-to-simplify-environment-switching"></a>

Keeper表記法のレコードタイトル取得機能を使用すると、一度Keeper表記法で記述したクエリを、異なるビルド環境で異なるシークレットマネージャーアプリケーションを活用して再利用することができます。

例:

この例では、2つの共有フォルダを作成しました。1つは開発環境用、もう1つは本番用です。 それぞれのフォルダ内には、同じ名前のレコードがあります。 これらのレコードは同じ名前ですが、格納されているクレデンシャルは異なります。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2Fd9nmUsXHvuMnIDcvxYHT%2Fimage.png?alt=media&#x26;token=abc07b21-bdc1-44ff-96c6-d30675e16a06" alt=""><figcaption></figcaption></figure>

それぞれの共有フォルダは、異なるシークレットマネージャーアプリケーションに関連付けられます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FLpzl5bD46LWfTxwTSduW%2Fimage.png?alt=media&#x26;token=c1b01f3f-51e7-4252-9ba3-34babdf37a10" alt=""><figcaption></figcaption></figure>

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FUYMikjYX9dRQDFMJ9O1a%2Fimage.png?alt=media&#x26;token=c986bda5-49ae-415a-8448-a88d4fa9f994" alt=""><figcaption></figcaption></figure>

関連するシークレットマネージャー統合で、以下のように表記法を使用してクレデンシャルを取得します。\
`keeper://MySQL Creds/field/password`\
\
開発ビルドで使用される統合では、「Development Environment」フォルダに関連付けられたシークレットマネージャーアプリケーションを使用します。その後、プロダクションビルドを行う際には、関連付けられたシークレットマネージャーアプリケーションを「Production Environment」に変更するだけで、コードやスクリプトの変更は必要ありません。


---

# Agent Instructions: 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://docs.keeper.io/keeperpam/jp/secrets-manager/about/keeper-notation.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.
