--- title: CSV でオブジェクト間のリレーションをインポートする description: CSV インポート時にレコードを関連付けるための完全なステップバイステップガイド。 --- ## 概要 本ガイドでは、オブジェクト間のリレーションをインポートする手順を説明します(例:連絡先を会社にリンク、または商談を連絡先にリンク)。 **インポート可能なもの:** 単一のオブジェクトタイプを指す 1 対多のリレーションのみ。 複数のオブジェクトタイプを指すリレーション(例:メモが連絡先と会社の双方にリンク)は、現時点ではインポートに対応していません。 ## リレーションの理解 ### 「1 対多」リレーションとは? 1 対多のリレーションでは: * **1 つの**会社には**多数の**連絡先(従業員)がいる * **1 つの**会社には**多数の**商談がある * **1 つの**連絡先には**多数の**タスクがある 「1」の側は**親**です。 「多」の側は**子**です。 ### Twenty における一般的なリレーション | リレーション | 「1」の側(親) | 「多」の側(子) | | --------- | -------- | -------- | | 会社 → 連絡先 | 会社 | 人物 | | 会社 → 商談 | 会社 | 商談 | | 連絡先 → タスク | 人物 | タスク | | 連絡先 → メモ | 人物 | ノート | ## ステップ 1: 「1」と「多」の側を特定する インポート前に、どのオブジェクトが親で、どれが子かを判断します。 **自問:** 「1 つの [オブジェクト A] は多数の [オブジェクト B] を持つか?」 * 1 つの会社 → 多数の連絡先 ✓(会社が親) * 1 人 → 多数の会社 ✗(誤りです—1 人は 1 社に所属) ## ステップ 2: まず親レコードをインポートする 参照する前に、親(「1」の側)が Twenty に存在している必要があります。 **インポート順:** 1. **会社**を最初に(依存関係なし) 2. **連絡先**を次に(会社にリンク) 3. **商談**を 3 番目に(会社や連絡先にリンク) 4. **タスク/メモ**(上記のいずれかにリンク) **親レコードが存在しない場合、インポートは失敗します。** 会社参照を含む連絡先をインポートする前に、必ず会社がインポート済みであることを確認してください。 ## ステップ 3: 親の一意識別子を控える 親レコードは**一意の識別子**で参照する必要があります。 利用可能な選択肢: | 親オブジェクト | 利用可能な一意識別子 | | --------------- | ----------------------------------------- | | **会社** | `id`(UUID)、`domain`(推奨)、または任意のカスタム一意フィールド | | **連絡先** | `id`(UUID)、`email`、または任意のカスタム一意フィールド | | **ワークスペースメンバー** | `id`(UUID)、`email`(名前ではありません) | | **カスタムオブジェクト** | `id`(UUID)、または一意としてマークされた任意のフィールド | **推奨:** 会社には `domain`、連絡先には `email` を使用してください。 これらは人間が読みやすく、スプレッドシートで簡単に確認できます。 ### 識別子の見つけ方 `id` が必要な場合: 1. 親レコードを Twenty からエクスポートする 2. エクスポートには `id` 列が含まれます 3. これらの ID を子レコードのファイルで使用する ## ステップ 4: リレーションフィールドが存在することを確認する インポート前に、オブジェクト間のリレーションフィールドが存在することを確認します。 **確認・作成方法:** 1. **設定 → データモデル** に移動する 2. 子オブジェクト(例:連絡先)を選択する 3. 親(例:会社)を指すリレーションフィールドを探す 4. 存在しない場合は作成する: * **+ Add field** をクリック * **Relation** タイプを選択 * 親オブジェクトを選択 ## ステップ 5: CSV ファイルを準備する 子側の CSV に、親を一意の識別子で参照する列を追加します。 ### 例:連絡先を会社にリンクする **連絡先の CSV:** ```csv firstName,lastName,email,jobTitle,companyDomain John,Smith,john@acme.com,CEO,https://acme.com Jane,Doe,jane@widgets.co,CTO,https://widgets.co Bob,Johnson,bob@techstart.io,Developer,https://techstart.io ``` `companyDomain` 列は会社のドメインを参照します。 ### 形式要件 | 識別子 | 形式 | 例 | | ---- | ----------- | -------------------------------------- | | ドメイン | URL 形式 | `https://acme.com` | | メール | 標準的なメールアドレス | `john@acme.com` | | ID | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` | **ドメインの形式が重要です!** `https://domain.com` を使用してください(`domain.com` だけではありません)。 これは Twenty が会社のドメインを保存する方法に一致し、照合エラーを防ぎます。 ### 重要なルール 1. **完全一致が必要** — 値は親レコードと完全に一致している必要があります 2. **一意の識別子は 1 つだけマッピング** — `companyId` と `companyDomain` の両方を含めないでください 3. **大文字小文字を区別** — `Acme.com` ≠ `acme.com` ## ステップ 6: リレーションをアップロードしてマッピングする 1. 子オブジェクト(例:連絡先)に移動 2. **⋮** → **Import records** をクリック 3. CSV ファイルをアップロード 4. フィールドマッピングのステップで: * リレーション列(例:`companyDomain`)を見つける * それを**会社**のリレーションフィールドにマッピングする 5. 残りのマッピングを完了する 6. エラーを確認して確定する Twenty が各子レコードを一致する親に自動でリンクします。 ## ステップ 7: インポートを確認する インポート後: 1. いくつかの子レコード(例:連絡先)を開く 2. リレーションフィールドに正しい親(例:会社)が表示されていることを確認する 3. 親レコードを開き、関連レコードのセクションを確認する ## 避けるべき一般的なミス | ミス | 問題 | 解決策 | | ------------------ | ------------------------------------------- | ----------------------------- | | **インポート順の誤り** | 会社より先に連絡先をインポートしている | 常に親を先に、次に子をインポートする | | **ドメイン形式の誤り** | `https://acme.com` ではなく `acme.com` を使用している | `https://` を含む完全な URL 形式を使用する | | **複数の一意フィールド** | `companyId` と `companyDomain` の両方をマッピングしている | 一意の識別子は 1 つだけマッピングする | | **リレーションフィールドがない** | データモデルにリレーションフィールドが存在しない | インポート前に **設定 → データモデル** で作成する | | **存在しないレコード** | 親レコードが Twenty に存在しない | 先に親レコードをインポートするか、タイプミスを確認する | | **大文字小文字の不一致** | ファイルでは `Acme.com`、Twenty では `acme.com` | 大文字小文字が完全に一致していることを確認する | ## ワークスペースメンバーへのリンク ワークスペースメンバー(あなたのチーム)にリンクする場合: * 名前ではなく**メールアドレス**を使用する * 例:`owner@yourcompany.com`、"John Smith" ではなく ```csv taskName,assignedTo Follow up with client,john@yourcompany.com Review proposal,jane@yourcompany.com ``` ## FAQ 次の 2 つの選択肢があります: 1. Twenty の `id` を使用する(親レコードをエクスポートして ID を取得) 2. データモデルにカスタムの一意フィールドを作成し、以前のシステムの外部 ID を保存する はい! 子レコードの一意の識別子(例:連絡先なら `email`)と新しいリレーションの値を含めてください。 インポートによってリレーションが更新されます。 多対多のリレーションは、現時点ではインポートに対応していません。 これは 2026 年上期に対応予定です。 複数のオブジェクトタイプを指すリレーションは、現時点ではインポート/エクスポートに対応していません。 これはロードマップにあります。 その行に対してエラーが表示されます。 次のいずれかを行うことができます。 * 先に親レコードをインポートしてから再インポートする * 参照値を修正する * インポート対象からその行を削除する よくある原因: * 形式の誤り(ドメインには `https://domain.com` を使用) * 大文字小文字の不一致(綴りを正確に確認) * 親が存在しない(先に親をインポート) * 複数の識別子をマッピングしている(1 つだけを使用) **注意: 論理削除されたレコードも一意性の判定に含まれます。** 「not found」エラーが出るのにレコードが存在するように見える場合は、Command Menu → See deleted records を確認してください。 親が論理削除されている可能性があります。 ## トラブルシューティング お困りですか? 次を確認してください: * [インポートエラーを解決する方法](/l/ja/user-guide/data-migration/how-tos/fix-import-errors) * [リレーションのインポート機能](/l/ja/user-guide/data-migration/capabilities/import-relations) * [一意性制約](/l/ja/user-guide/data-migration/capabilities/uniqueness-constraints)