# レコードの作成と更新

## record-addコマンド

本ページには、Keeperコマンダーにおける `record-add` コマンドを使用したレコードの作成方法について、包括的な例を記載しています。このコマンドでは、フィールド指定にドット記法を、複雑なフィールドには `$JSON:` 構文をサポートしています。

{% hint style="info" %}
Keeperコマンダーでは、行末にバックスラッシュ (`\`) を使用することで、長いコマンドを複数行に分割して記述でき、可読性が向上します。
{% endhint %}

{% hint style="warning" %}
バックスラッシュ (`\`) の後にスペースを入れないでください。行は必ず **`\` で終わる**必要があります。スペースがあると空の引数が渡され、解析エラーの原因となります。
{% endhint %}

***

### コマンド構文

```bash
record-add --title "Record Title" --record-type "RECORD_TYPE" [OPTIONS] [FIELDS...]
```

#### 主な引数

<table><thead><tr><th width="268.39453125">引数</th><th>説明</th></tr></thead><tbody><tr><td><code>--title</code> / <code>-t</code></td><td>レコードのタイトル (必須)</td></tr><tr><td><code>--record-type</code> / <code>-rt</code></td><td>レコードタイプ (必須)</td></tr><tr><td><code>--notes</code> / <code>-n</code></td><td>レコードのメモ (任意)</td></tr><tr><td><code>--folder</code></td><td>レコードを保存するフォルダのパスまたはUID (任意)</td></tr><tr><td><code>--force</code> / <code>-f</code></td><td>警告を無視して実行 (任意)</td></tr><tr><td><code>--syntax-help</code></td><td>フィールド構文のヘルプを表示</td></tr></tbody></table>

***

#### フィールド構文の概要

ドット記法の形式

```bash
[FIELD_SET.][FIELD_TYPE][.FIELD_LABEL]=FIELD_VALUE
```

各要素の説明

<table><thead><tr><th width="226.73828125">要素名</th><th>説明</th></tr></thead><tbody><tr><td><code>FIELD_SET</code></td><td>任意。<code>f</code> (標準フィールド) または<code>c</code> (カスタムフィールド) を指定可能</td></tr><tr><td><code>FIELD_TYPE</code></td><td>フィールドタイプ (例: <code>login</code>、 <code>password</code>、<code>url</code>など)</td></tr><tr><td><code>FIELD_LABEL</code></td><td>任意。フィールドにラベルを付ける場合に使用</td></tr><tr><td><code>FIELD_VALUE</code></td><td>フィールドに設定する値</td></tr></tbody></table>

***

#### 特殊な値の構文

<table><thead><tr><th width="242.12890625">構文</th><th>説明</th></tr></thead><tbody><tr><td><code>$JSON:{"key": "value"}</code></td><td>複雑なオブジェクト型フィールドに使用</td></tr><tr><td><code>$GEN</code></td><td>パスワード、TOTPコード、鍵ペアなどを自動生成</td></tr><tr><td><code>$BASE64:&#x3C;base64_string></code></td><td>任意の文字列フィールド向けにBase64デコードした値を展開</td></tr><tr><td><code>file=@filename</code></td><td>ファイルの添付。<code>@</code>のあとにファイルパスを指定</td></tr></tbody></table>

***

### レコードタイプ

Keeperコマンダーでは、以下の2種類のレコードタイプがサポートされています。

* **タイプ付きレコード**\
  あらかじめ定義されたスキーマに基づく構造化レコード (例: ログイン、銀行口座、連絡先など）
* **レガシーレコード**\
  一般的なレコード形式。使用時は`-rt legacy`または`-rt general`を指定します。

***

### フィールドタイプと例

#### 単純フィールドタイプ

<table><thead><tr><th width="250.70703125">フィールドタイプ</th><th>説明</th></tr></thead><tbody><tr><td><code>login</code></td><td>ユーザー名/ログインID</td></tr><tr><td><code>password</code></td><td>パスワード (マスク表示)</td></tr><tr><td><code>url</code></td><td>ウェブサイトのURL</td></tr><tr><td><code>email</code></td><td>メールアドレス</td></tr><tr><td><code>text</code></td><td>プレーンテキスト</td></tr><tr><td><code>multiline</code></td><td>複数行のテキスト</td></tr><tr><td><code>secret</code></td><td>マスクされたテキストフィールド</td></tr><tr><td><code>note</code></td><td>マスクされた複数行のテキスト</td></tr><tr><td><code>oneTimeCode</code></td><td>TOTP/2要素認証コード (2FA)</td></tr><tr><td><code>date</code></td><td>Unixエポックタイムまたは日付文字列</td></tr></tbody></table>

***

#### 複雑フィールドタイプ

※ `$JSON:` 構文で指定する必要があります。

<table><thead><tr><th width="235.515625">フィールドタイプ</th><th>説明</th></tr></thead><tbody><tr><td><code>phone</code></td><td>電話番号 (地域情報や種別を含む)</td></tr><tr><td><code>name</code></td><td>氏名 (名、ミドルネーム、姓)</td></tr><tr><td><code>address</code></td><td>住所 (郵便番号、都道府県、市区町村、番地など)</td></tr><tr><td><code>paymentCard</code></td><td>クレジットカード情報</td></tr><tr><td><code>bankAccount</code></td><td>銀行口座情報</td></tr><tr><td><code>securityQuestion</code></td><td>セキュリティ質問と回答のペア</td></tr><tr><td><code>host</code></td><td>ホスト名とポート番号の組み合わせ</td></tr><tr><td><code>keyPair</code></td><td>SSH鍵ペア</td></tr></tbody></table>

### クイックスタート例

#### 基本的なログインレコード

**1行版 (コピー＆ペースト向け・推奨)**

```bash
record-add -t "Gmail Account" -rt login login=john.doe@gmail.com password=SecurePass123 url=https://accounts.google.com
```

**複数行版 (手入力向け。コピー＆ペーストは非推奨)**

```bash
record-add -t "Gmail Account" -rt login \
  login=john.doe@gmail.com \
  password=SecurePass123 \
  url=https://accounts.google.com
```

***

#### 電話番号付きの基本的な連絡先レコード

```bash
record-add -t "John Smith" -rt contact \
  name='$JSON:{"first": "John", "middle": "Michael", "last": "Smith"}' \
  email=john.smith@email.com \
  phone.Mobile='$JSON:{"number": "(555) 555-1234", "type": "Mobile"}'
```

***

#### 複数レコードのスクリプト実行

Keeperコマンダーでは、`run-batch` または `run` の[コマンド](https://docs.keeper.io/jp/keeperpam/commander-cli/misc-commands#run-batch-command)でスクリプト化できます。複雑なオブジェクト用の正しいJSON形式を得る手順は、ウェブボルトでレコードを1件作成し、コマンダーで `get UID --format=json` を実行すると、`$JSON:{"key": "value"}` の形で確認できる点が簡単です。その内容をもとにバッチを組み立てて実行します。

```bash
# my_script.txt
record-add -t "Gmail Account" -rt login login=john.doe@gmail.com
record-add -t "Yahoo Account" -rt login login=john.doe@yahoo.com
# run batch
keeper shell run-batch my_script.txt
```

## レコードタイプ別の詳細な使用例

#### 1. ログイン情報レコード

```bash
# 基本的なログイン情報レコード
record-add -t "Gmail Account" -rt login \
  login=john.doe@gmail.com \
  password=SecurePass123 \
  url=https://accounts.google.com

# 自動生成されたパスワードでのログイン
record-add -t "Work Account" -rt login \
  login=john.doe \
  password='$GEN:rand,16' \
  url=https://company.com
  
# Base64でエンコードしたパスワードを使用したログイン
record-add -t "Admin Portal" -rt login \
  login=administrator \
  password='$BASE64:QWRtIW5AMjAyNCNTdHIwbmck' \
  url=https://admin.company.com

# TOTP付きログイン
record-add -t "Banking Login" -rt login \
  login=john.doe \
  password=MySecurePassword \
  url=https://mybank.com \
  oneTimeCode='$GEN'

# セキュリティ質問付きログイン
record-add -t "Investment Account" -rt login \
  login=john.doe \
  password=InvestPass123 \
  url=https://investment.com \
  securityQuestion.Mother='$JSON:[{"question": "What is your mother'\''s maiden name?", "answer": "Smith"}]'

# カスタムフィールド付きログイン
record-add -t "Work VPN" -rt login \
  login=john.doe \
  password=VpnPass123 \
  url=https://vpn.company.com \
  c.text.Department="IT Security" \
  c.text.Employee_ID="EMP001"
```

#### 2. 銀行口座レコード

```bash
# 基本的な銀行口座レコード
record-add -t "Chase Checking" -rt bankAccount \
  bankAccount='$JSON:{"accountType": "Checking", "routingNumber": "021000021", "accountNumber": "123456789"}' \
  name='$JSON:{"first": "John", "last": "Doe"}' \
  login=john.doe \
  password=BankPass123

# オンラインバンキング付き銀行口座
record-add -t "Wells Fargo Savings" -rt bankAccount \
  bankAccount='$JSON:{"accountType": "Savings", "routingNumber": "121042882", "accountNumber": "987654321"}' \
  name='$JSON:{"first": "Jane", "last": "Smith"}' \
  login=jane.smith \
  password=SavePass456 \
  url=https://wellsfargo.com \
  --notes "金利の高い普通預金口座"
```

#### 3. クレジットカードレコード

```bash
# クレジットカード
record-add -t "Chase Sapphire Preferred" -rt bankCard \
  paymentCard='$JSON:{"cardNumber": "4111111111111111", "cardExpirationDate": "12/2025", "cardSecurityCode": "123"}' \
  text.cardholderName="John Doe" \
  pinCode=1234 \
  login=john.doe \
  password=CardPass123

# デビットカード
record-add -t "Bank of America Debit" -rt bankCard \
  paymentCard='$JSON:{"cardNumber": "5555555555554444", "cardExpirationDate": "08/2026", "cardSecurityCode": "456"}' \
  text.cardholderName="Jane Smith" \
  pinCode=5678
```

#### 4. 連絡先レコード

```bash
# 個人の連絡先
record-add -t "John Smith" -rt contact \
  name='$JSON:{"first": "John", "middle": "Michael", "last": "Smith"}' \
  email=john.smith@email.com \
  phone.Mobile='$JSON:{"number": "(555) 555-1234", "type": "Mobile"}' \
  text.company="ABC Corporation"

# 複数の電話番号を持つビジネス連絡先
record-add -t "Dr. Sarah Johnson" -rt contact \
  name='$JSON:{"first": "Sarah", "last": "Johnson"}' \
  email=sarah.johnson@medical.com \
  phone.Work='$JSON:{"number": "(555) 987-6543", "type": "Work"}' \
  phone.Mobile='$JSON:{"number": "(555) 123-4567", "type": "Mobile"}' \
  text.company="Medical Associates" \
  c.text.Title="Chief Medical Officer"
```

#### 5. 住所レコード

```bash
# 自宅の住所
record-add -t "Home Address" -rt address \
  address='$JSON:{"street1": "123 Main St", "street2": "Apt 4B", "city": "New York", "state": "NY", "zip": "10001", "country": "US"}'

# 勤務先の住所
record-add -t "Office Address" -rt address \
  address='$JSON:{"street1": "456 Business Ave", "city": "San Francisco", "state": "CA", "zip": "94105", "country": "US"}' \
  --notes "本社所在地"
```

#### 6. サーバーの認証情報

```bash
# Webサーバー
record-add -t "Production Web Server" -rt serverCredentials \
  host='$JSON:{"hostName": "web.company.com", "port": "22"}' \
  login=admin \
  password='$GEN:rand,20' \
  c.text.Environment="Production" \
  c.text.Purpose="Web Server"

# データベースサーバー
record-add -t "MySQL Database" -rt databaseCredentials \
  host='$JSON:{"hostName": "db.company.com", "port": "3306"}' \
  login=dbadmin \
  password=DbSecure123 \
  text.database="production_db"
```

#### 7. SSHキー

```bash
# SSH鍵ペアの生成
record-add -t "Production SSH Key" -rt sshKeys \
  keyPair='$GEN:ed25519,enc' \
  host='$JSON:{"hostName": "prod.company.com", "port": "22"}' \
  login=deploy \
  c.text.Purpose="Production deployment"

# 既存のSSH鍵を使用
record-add -t "GitHub SSH Key" -rt sshKeys \
  keyPair='$JSON:{"privateKey": "-----BEGIN OPENSSH PRIVATE KEY-----\n...", "publicKey": "ssh-ed25519 AAAAC3..."}' \
  host='$JSON:{"hostName": "github.com", "port": "22"}' \
  login=git
```

#### 8. ソフトウェアライセンス

```bash
# ソフトウェアライセンス
record-add -t "Microsoft Office" -rt softwareLicense \
  licenseNumber="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" \
  c.text.Product_Version="Office 365" \
  c.text.Licensed_To="John Doe" \
  c.date.Purchase_Date="2023-01-15" \
  c.date.Expiration_Date="2024-01-15"
```

#### 9. WiFiパスワード

```bash
# WiFiネットワーク
record-add -t "Home WiFi" -rt wifiCredentials \
  text.ssid="MyHomeNetwork" \
  password=WiFiPassword123 \
  c.text.Security_Type="WPA2" \
  c.text.Frequency="5GHz"
```

#### 10. メモ

```bash
# 基本的なメモ
record-add -t "Important Information" -rt encryptedNotes \
  note="This is confidential information that needs to be encrypted." \
  date="2024-01-15"

# カスタムフィールド付きメモ
record-add -t "Recovery Codes" -rt encryptedNotes \
  note="Backup codes for two-factor authentication" \
  c.text.Service="Google Authenticator" \
  c.multiline.Codes="123456\n789012\n345678"
```

#### 11. データベース認証情報

```bash
# PostgreSQLデータベース
record-add -t "Production PostgreSQL" -rt databaseCredentials \
  host='$JSON:{"hostName": "db.company.com", "port": "5432"}' \
  login=postgres \
  password='$GEN:rand,24' \
  text.database="production_db" \
  c.text.Environment="Production" \
  c.text.SSL_Mode="require"

# MongoDBデータベース
record-add -t "Analytics MongoDB" -rt databaseCredentials \
  host='$JSON:{"hostName": "mongo.company.com", "port": "27017"}' \
  login=admin \
  password=MongoPass456 \
  text.database="analytics" \
  c.text.Replica_Set="rs0"
```

#### 12. 運転免許証

```bash
# 運転免許証
record-add -t "Driver's License" -rt driverLicense \
  accountNumber=DL123456789 \
  name='$JSON:{"first": "John", "last": "Doe"}' \
  birthDate="1990-01-15" \
  expirationDate="2025-01-15" \
  address='$JSON:{"street1": "123 Main St", "city": "New York", "state": "NY", "zip": "10001", "country": "US"}' \
  c.text.License_Class="Class C"

# 商用運転免許証
record-add -t "CDL License" -rt driverLicense \
  accountNumber=CDL987654321 \
  name='$JSON:{"first": "Jane", "last": "Smith"}' \
  birthDate="1985-05-20" \
  expirationDate="2024-05-20" \
  c.text.License_Class="Class A" \
  c.text.Endorsements="Hazmat, Passenger"
```

#### 13. パスポート

```bash
# 米国パスポート
record-add -t "US Passport" -rt passport \
  accountNumber=123456789 \
  name='$JSON:{"first": "John", "last": "Doe"}' \
  birthDate="1990-01-15" \
  expirationDate="2030-01-15" \
  date="2020-01-15" \
  address='$JSON:{"street1": "123 Main St", "city": "New York", "state": "NY", "zip": "10001", "country": "US"}' \
  c.text.Place_of_Birth="New York, NY" \
  c.text.Nationality="US"
```

#### 14. 健康保険

```bash
# 健康保険
record-add -t "Blue Cross Blue Shield" -rt healthInsurance \
  accountNumber=12345678901 \
  name='$JSON:{"first": "John", "last": "Doe"}' \
  login=john.doe \
  password=HealthPass123 \
  url=https://bcbs.com \
  c.text.Plan_Type="PPO" \
  c.text.Group_Number="12345" \
  c.text.Deductible="$2000"
```

#### 15. メンバーシップ

```bash
# ジムメンバーシップ
record-add -t "Gold's Gym" -rt membership \
  accountNumber=GYM123456 \
  name='$JSON:{"first": "John", "last": "Doe"}' \
  password=GymPass123 \
  c.text.Membership_Type="Premium" \
  c.date.Expiration_Date="2024-12-31"

# プロフェッショナルメンバーシップ
record-add -t "IEEE Membership" -rt membership \
  accountNumber=IEEE987654 \
  name='$JSON:{"first": "Jane", "last": "Smith"}' \
  password=IEEEPass456 \
  c.text.Membership_Grade="Senior Member" \
  c.text.Specialization="Computer Science"
```

#### 16. 出生証明書

```bash
# 出生証明書
record-add -t "Birth Certificate" -rt birthCertificate \
  name='$JSON:{"first": "John", "middle": "Michael", "last": "Doe"}' \
  birthDate="1990-01-15" \
  address='$JSON:{"street1": "Hospital Address", "city": "New York", "state": "NY", "country": "US"}' \
  c.text.Certificate_Number="BC123456789" \
  c.text.Place_of_Birth="New York General Hospital" \
  c.text.Parents_Names="Jane Doe, Robert Doe"
```

#### 17. ソーシャルセキュリティカード

```bash
# SSNカード
record-add -t "Social Security Card" -rt ssnCard \
  accountNumber=123-45-6789 \
  name='$JSON:{"first": "John", "middle": "Michael", "last": "Doe"}' \
  c.text.Issue_Date="2008-01-15" \
  c.text.Issue_State="New York"
```

#### 18. 写真レコード

```bash
# 写真レコード
record-add -t "Profile Photo" -rt photo \
  file='@/path/to/profile.jpg' \
  c.text.Description="Professional headshot" \
  c.date.Date_Taken="2024-01-15"
```

#### 19. 添付ファイル

```bash
# 添付ファイル付きレコード
record-add -t "Important Document" -rt file \
  file='@/path/to/document.pdf' \
  --notes "Legal documents"

# 複数の添付ファイル
record-add -t "Project Files" -rt file \
  file='@/path/to/project.zip' \
  file='@/path/to/readme.txt' \
  c.text.Project_Name="Alpha Release"
```

### PAM (特権アクセス管理) レコードタイプ

{% hint style="warning" %}
PAMレコードでは、ローテーション、接続、トンネリングなどを利用するために、追加のコマンドによる設定が必要です。詳細は、本セクションの後に示す例をご参照ください。
{% endhint %}

{% hint style="warning" %}
PAM構成タイプは、[pam config](https://github.com/Keeper-Security/gitbook-jp-secrets-manager/blob/main/commander-cli/command-reference/keeperpam-commands.md#sub-command-config)コマンドを使用して作成します。
{% endhint %}

#### 20. PAMデータベース

```bash
# PAMデータベース構成
record-add -t "Production Oracle DB" -rt pamDatabase \
  pamHostname='$JSON:{"hostName": "oracle.company.com", "port": "1521"}' \
  login=system \
  password='$GEN:rand,20' \
  text.database="PROD" \
  c.text.Instance_Name="ORCL" \
  c.text.Service_Name="prod.company.com"
```

#### 21. PAMディレクトリ

```bash
# Active Directory PAM
record-add -t "Corporate Active Directory" -rt pamDirectory \
  pamHostname='$JSON:{"hostName": "dc.company.com", "port": "389"}' \
  login=administrator \
  password='$GEN:rand,24' \
  c.text.Domain="company.com" \
  c.text.Base_DN="dc=company,dc=com" \
  c.text.Security_Protocol="LDAPS"
```

#### 22. PAMマシン

```bash
# プロダクションサーバーPAM
record-add -t "Production Web Server" -rt pamMachine \
  pamHostname='$JSON:{"hostName": "web01.company.com", "port": "22"}' \
  login=root \
  password='$GEN:rand,20' \
  c.text.OS="Ubuntu 20.04" \
  c.text.Environment="Production" \
  c.text.Purpose="Web Application Server"
```

#### 23. PAMユーザー

```bash
# 特権ユーザーアカウント
record-add -t "Database Admin User" -rt pamUser \
  login=dbadmin \
  password='$GEN:rand,24' \
  name='$JSON:{"first": "Database", "last": "Administrator"}' \
  c.text.Department="IT Operations" \
  c.text.Access_Level="Full Database Admin" \
  c.date.Account_Expiry="2024-12-31"
```

#### 24. PAMリモートブラウザ

```bash
# リモートブラウザセッション
record-add -t "Salesforce Admin Session" -rt pamRemoteBrowser \
  url=https://company.salesforce.com \
  login=admin@company.com \
  password='$GEN:rand,16' \
  c.text.Session_Type="Administrative" \
  c.text.Browser_Profile="Chrome Enterprise"
```

### PAM環境の例

各PAMレコードは、Keeperゲートウェイを参照するPAM構成に紐付けられています。このゲートウェイは通常、ローカルネットワーク内またはPAMリソースへのアクセスが可能な場所にインストールされます。以下は、新しいPAM環境を構成する際の基本的な出発点となる例です。

```bash
# 共有フォルダを作成
mkdir gwapp -sf -a
# Secrets Managerアプリケーションを作成
secrets-manager app create gwapp1
# 作成した共有フォルダを新しいアプリに追加
secrets-manager share add --app=gwapp1 --secret=SHARED_FOLDER_UID --editable

# 新しいPAMゲートウェイを作成 - 出力：Docker用のbase64構成
pam gateway new --name=gateway1 --application=gwapp1 --config-init=b64 --return_value
# 新しいゲートウェイを使ってPAM構成を作成
pam config new --environment=local \
  --title=config1 \
  --gateway=gateway1 \
  -sf=SHARED_FOLDER_UID \
  --connections=on --tunneling=on --rotation=on --remote-browser-isolation=on

# PAMリソースレコードとユーザーを作成：管理者とローテーションユーザーを持つマシン1台
record-add --folder=SHARED_FOLDER_UID --title=admin1 -rt=pamUser \
  login=admin1 password="$GEN:rand,16"
record-add --folder=SHARED_FOLDER_UID --title=user1  -rt=pamUser \
  login=user1  password="$GEN:rand,16"
record-add --folder=SHARED_FOLDER_UID --title=machine1 -rt=pamMachine \
  pamHostname="$JSON:{\"hostName\": \"127.0.0.1\", \"port\": \"22\"}"

# 接続とトンネリング用にPAMマシンを設定
pam tunnel edit PAM_MACHINE_UID --configuration=PAM_CONFIG_UID --enable-tunneling
pam connection edit PAM_MACHINE_UID --configuration=PAM_CONFIG_UID \
  --connections=on \
  --protocol=ssh \
  --admin-user=ADMIN_USER_UID

# PAMユーザーをマシン（リソース）のローテーション用に設定
# --force は非対話モードに切り替える
pam rotation edit --config=PAM_CONFIG_UID \
  --record=PAM_USER_UID \
  --resource=PAM_MACHINE_UID \
  --admin-user=ADMIN_USER_UID \
  --on-demand --enable --force

# ゲートウェイインストール後にセットアップをテスト可能
pam tunnel start PAM_MACHINE_UID
# pam tunnel stop ENDPOINT_UID
pam action rotate --record-uid=PAM_USER_UID
```

### 高度な機能

#### パスワード生成

```bash
# ランダムパスワード（既定）
password='$GEN'
password='$GEN:rand,16'  # 16文字

# Dicewareパスワード
password='$GEN:dice,5'   # 語数 5

# 暗号ベースのパスワード
password='$GEN:crypto'
```

#### TOTP/2FAの生成

```bash
# TOTPシークレットを生成
oneTimeCode='$GEN'

# 既存のTOTP URL
oneTimeCode='otpauth://totp/Example:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Example'
```

#### SSHキーの生成

```bash
# RSA鍵ペアを生成
keyPair='$GEN:rsa'

# EC鍵ペアを生成
keyPair='$GEN:ec'

# Ed25519鍵ペアを生成（推奨）
keyPair='$GEN:ed25519'

# 暗号化された鍵ペアを生成
keyPair='$GEN:ed25519,enc'
```

#### カスタムフィールド <a href="#custom-field" id="custom-field"></a>

```bash
# カスタムテキストフィールド
c.text.Department="Engineering"

# カスタム複数行フィールド
c.multiline.Notes="Line 1\nLine 2\nLine 3"

# カスタムシークレットフィールド（マスク）
c.secret.API_Key="secret-api-key-here"

# カスタム日付フィールド
c.date.Expiration="2024-12-31"
```

### 一般フィールドのリファレンス

#### データ形式

```bash
# Unixタイムスタンプ
date=1668639533

# ISO形式
date="2022-11-16T10:58:53Z"

# 単純な日付
date="2022-11-16"
```

#### 電話番号形式

```bash
phone.Work='$JSON:{"region": "US", "number": "(555) 555-1234", "ext": "123", "type": "Work"}'
phone.Mobile='$JSON:{"number": "(555) 555-1234", "type": "Mobile"}'
```

#### 名前の形式

```bash
name='$JSON:{"first": "John", "middle": "Michael", "last": "Doe"}'
name='$JSON:{"first": "Jane", "last": "Smith"}'
```

#### 住所の形式

```bash
address='$JSON:{"street1": "123 Main St", "street2": "Apt 4B", "city": "New York", "state": "NY", "zip": "10001", "country": "US"}'
```

#### 秘密の質問の形式

```
securityQuestion.Mother='$JSON:[{"question": "What is your mother'\''s maiden name?", "answer": "Smith"}]'
securityQuestion.Pet='$JSON:[{"question": "What was your first pet'\''s name?", "answer": "Fluffy"}]'
```

### 自動消滅型レコード (ワンタイム共有) <a href="#self-destructing-records-one-time-shares" id="self-destructing-records-one-time-shares"></a>

`--self-destruct` オプションを使用すると、一度開くと自動的に削除される一時的なレコードを作成できます。この機能は、一度しか閲覧してほしくない機密情報の共有に最適です。

#### 自動消滅の仕組み

* 指定した時間後に**有効期限が切れる一時的な共有URL**を作成します
* レコードは、共有URLが初めて開かれるまで自分のボルト内に残ります
* URLが開かれてから**5分後に自動的に削除**されます
* 有効期限の最長期間は**6か月**です

#### 構文

```bash
--self-destruct <NUMBER>[(m)inutes|(h)ours|(d)ays]
```

#### 時間単位

自己破壊型レコードや一時的な共有リンクの有効期限には、以下の単位を使用できます。

* `m` または `minutes`: 分 (※単位を省略した場合はデフォルトで分扱い)
* `h` または `hours`: 時間
* `d` または `days`: 日数

#### 使用例

一時的パスワードの共有 (1時間後に失効)

```bash
record-add -t "Temporary Server Access" -rt login \
  login=admin \
  password='$GEN:rand,16' \
  url=https://server.company.com \
  --self-destruct 1h \
  --notes "Emergency access for John Doe"
```

一時的Wi-Fiパスワードの共有 (30分後に失効)

```bash
record-add -t "Guest WiFi Access" -rt wifiCredentials \
  text.ssid="Company-Guest" \
  password=TempPass123 \
  --self-destruct 30m \
  --notes "Visitor access for meeting"
```

一時的なファイル共有 (24時間後に失効)

```bash
record-add -t "Confidential Document" -rt file \
  file='@/path/to/sensitive-doc.pdf' \
  --self-destruct 1d \
  --notes "Contract for review - auto-deletes after viewing"
```

緊急連絡先情報の共有 (2時間後に失効)

```bash
record-add -t "Emergency Contact" -rt contact \
  name='$JSON:{"first": "Emergency", "last": "Contact"}' \
  phone.Mobile='$JSON:{"number": "(555) 911-0000", "type": "Emergency"}' \
  --self-destruct 2h
```

#### 戻り値

`--self-destruct`を使用すると、レコードUIDではなく**共有可能なURL**を返します。

```bash
$ record-add -t "Temp Password" -rt login login=user password=pass123 --self-destruct 1h
https://keepersecurity.com/vault/share/AbCdEf123456...
```

***

## 重要な注意事項

### ⚠️ セキュリティに関する注意点

* URLが鍵です ― URLを知っている人は誰でもレコードにアクセスできます
* 認証不要 ― 共有URLはログイン認証をバイパスします
* 一度きりのアクセス ― レコードは最初の表示から5分後に自動削除されます
* 復元不可 ― 一度削除されるとレコードは元に戻せません

### ⚠️ 制限事項

* 有効期限は最大6か月
* 自動削除レコードは更新不可
* プレビュー不可 ― 作成後にレコードを再確認することはできません
* 即時共有 ― URLは作成直後から有効になります

***

## ベストプラクティス

* URLはすぐにコピーしてください ― 後から取得することはできません
* セキュリティ強化のため、短い有効期限 (数分～数時間) を設定しましょう
* レコードの目的や背景を「ノート」に記録しておきましょう
* URLは安全な方法（暗号化メッセージ、対面など）で共有しましょう
* 一時的なアクセスには `$GEN` を使って強力なパスワードを生成しましょう
* URLの有効期限前に受信者が受け取ったことを確認しましょう

## 活用事例

* システム管理者向けの緊急アクセス認証情報
* 外部委託先やコンサルタント用の一時パスワード
* 機密ファイルの一度きりの文書共有
* 来客用ネットワークのWi-Fi情報共有
* チームメンバー間での安全な情報受け渡し
* 自動化システム間での期限付きシークレット共有

***

## ヒントとベストプラクティス

* コピー＆ペーストには1行のコマンドを使用し、行末のスペースによるエラーを防ぎましょう
* シェルによる解釈を避けるため、JSONの値には引用符を使いましょう
* パスワードをハードコードせず、`$GEN` を使用して安全に生成しましょう
* `$`、`!`、`"`、`'` などシェルで解釈されやすい文字を含むパスワードには、`$BASE64:` を使うとエスケープの手間を減らせます
* 複雑なレコードを作成する前に、まずはシンプルなレコードでテストしましょう
* 標準でないデータにはカスタムフィールド (`c.`) を活用しましょう
* `--folder` パラメータでフォルダ整理を行い、レコードを体系化しましょう
* `--notes` を使ってレコードの背景や目的を記録し、管理しやすくしましょう

### トラブルシューティング (よくある問題と対処法)

**「Expected: =, got: ; Missing =」エラー**

* 複数行コマンドのバックスラッシュの後にスペースを入れないようにしてください
* コピー＆ペーストする際は、1行形式を使用してください

**「Field type not supported」 (対応していないフィールドタイプ)**

* 使用可能なフィールドタイプは `record-add --syntax-help` で確認できます
* 標準外のフィールドには`c.`接頭辞付きのカスタムフィールドを使ってください

**JSON解析エラー**

* JSONが正しく引用されていることを確認してください
* JSON内のシングルクォートは `'\''` のようにエスケープしてください
* JSONオブジェクト内ではダブルクォート ( `"` ) を使用してください

**ファイル添付のエラー**

* ファイルパスの前に `@` を付けてください (例: `file=@/path/to/file.txt`)
* ファイルパスが正しくアクセス可能なことを確認してください
* 相対パスではなく絶対パスの使用を推奨します

### `record-add` と `record-update` の違い

`record-add` は新しいレコードを作成するためのコマンドであり、`record-update` は既存のレコードを編集するために使用します。以下は主な違いの比較です。

|          | record-add   | record-update                 |
| -------- | ------------ | ----------------------------- |
| 目的       | 新規レコードの作成    | 既存レコードの編集                     |
| レコード識別子  | 不要           | **必須** (`-r`または`--record`を指定) |
| レコードタイプ  | 必須 (`-rt`)   | 任意 (変更も可能)                    |
| フィールドの動作 | すべてのフィールドを設定 | 指定したフィールドのみ更新                 |
| メモの動作    | 新規に設定        | `+`接頭辞付きで追記、接頭辞なしで上書き         |

### record-updateの構文

```
record-update --record "RECORD_TITLE_OR_UID" [OPTIONS] [FIELDS...]
```

主な引数

* `--record` / `-r`: レコードのタイトルまたは UID (必須)
* `--title` / `-t`: レコードのタイトルを更新
* `--record-type` / `-rt`: レコードタイプを変更
* `--notes` / `-n`: メモを更新 (先頭に`+`を付けると追記、それ以外は上書き)
* `--force` / `-f`: 警告を無視して実行

### 使用例

#### パスワードとURLを更新

```bash
record-update -r "Gmail Account" \
  password='$GEN:rand,20' \
  url=https://accounts.google.com/new-login
```

#### 既存の連絡先に電話番号を追加

```bash
record-update -r "John Smith" \
  phone.Work='$JSON:{"number": "(555) 987-6543", "type": "Work"}'
```

#### メモに追記 (先頭の + に注意)

```bash
record-update -r "Server Credentials" \
  --notes "+Updated password on 2024-01-15"
```

#### タイトルを変更し、カスタムフィールドを追加

```bash
record-update -r "Old Server Name" \
  --title "Production Web Server" \
  c.text.Environment="Production" \
  c.text.Last_Updated="2024-01-15"
```

#### レコードタイプの変更 (構造を変換)

```bash
record-update -r "Simple Login" \
  --record-type contact \
  name='$JSON:{"first": "John", "last": "Doe"}' \
  email=john.doe@example.com
```

#### 各コマンドの用途

`record-add`

* 新しいレコードを作成するとき
* すべてのフィールドを一から指定したいとき
* 初期のレコード構造を設定するとき

`record-update`

* 既存のレコードを編集したいとき
* 既存のレコードに新しいフィールドを追加するとき
* パスワードや認証情報を更新したいとき
* メモに情報を追記したいとき
* レコードタイプを変換したいとき

#### 重要な注意点

* `record-update` は指定したフィールドのみを変更します
* 指定していない既存のフィールドはそのまま保持されます
* `field=` のように値を空にすると、そのフィールドを消去できます
* メモに `+` を付けると追記、付けない場合は上書きになります

### ヘルプ表示

```bash
# 利用可能なすべてのレコードタイプを表示
record-type-info

# 特定のレコードタイプ (例: login) のフィールドを表示
record-type-info --list-record login

# 特定のフィールドタイプ (例: phone) の情報を表示
record-type-info --list-field phone

# record-add コマンドのフィールド構文ヘルプを表示
record-add --syntax-help

# record-update コマンドのヘルプを表示
record-update --help
```
