---
title: CSV でオブジェクト間のリレーションをインポートする
description: CSV インポート時にレコードを関連付けるための完全なステップバイステップガイド。
---

## 概要

本ガイドでは、オブジェクト間のリレーションをインポートする手順を説明します（例：連絡先を会社にリンク、または商談を連絡先にリンク）。

<Note>**インポート可能なもの:** 単一のオブジェクトタイプを指す 1 対多のリレーションのみ。 複数のオブジェクトタイプを指すリレーション（例：メモが連絡先と会社の双方にリンク）は、現時点ではインポートに対応していません。</Note>

## リレーションの理解

### 「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. **タスク/メモ**（上記のいずれかにリンク）

<Warning>
**親レコードが存在しない場合、インポートは失敗します。**

会社参照を含む連絡先をインポートする前に、必ず会社がインポート済みであることを確認してください。
</Warning>

## ステップ 3: 親の一意識別子を控える

親レコードは**一意の識別子**で参照する必要があります。 利用可能な選択肢:

| 親オブジェクト         | 利用可能な一意識別子                                |
| --------------- | ----------------------------------------- |
| **会社**          | `id`（UUID）、`domain`（推奨）、または任意のカスタム一意フィールド |
| **連絡先**         | `id`（UUID）、`email`、または任意のカスタム一意フィールド      |
| **ワークスペースメンバー** | `id`（UUID）、`email`（名前ではありません）             |
| **カスタムオブジェクト**  | `id`（UUID）、または一意としてマークされた任意のフィールド         |

<Note>**推奨:** 会社には `domain`、連絡先には `email` を使用してください。 これらは人間が読みやすく、スプレッドシートで簡単に確認できます。</Note>

### 識別子の見つけ方

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

<Warning>
**ドメインの形式が重要です！**

`https://domain.com` を使用してください（`domain.com` だけではありません）。 これは Twenty が会社のドメインを保存する方法に一致し、照合エラーを防ぎます。
</Warning>

### 重要なルール

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

<AccordionGroup>
  <Accordion title="親レコードにドメインやメールがない場合はどうすればよいですか？">
    次の 2 つの選択肢があります：
    1. Twenty の `id` を使用する（親レコードをエクスポートして ID を取得）
    2. データモデルにカスタムの一意フィールドを作成し、以前のシステムの外部 ID を保存する
  </Accordion>

  <Accordion title="既存レコードのリレーションを更新できますか？">
    はい! 子レコードの一意の識別子（例：連絡先なら `email`）と新しいリレーションの値を含めてください。 インポートによってリレーションが更新されます。
  </Accordion>

  <Accordion title="多対多のリレーションをインポートできますか？">
    多対多のリレーションは、現時点ではインポートに対応していません。 これは 2026 年上期に対応予定です。
  </Accordion>

  <Accordion title="複数のオブジェクトタイプ（例：メモを連絡先と会社の双方）にリンクできますか？">
    複数のオブジェクトタイプを指すリレーションは、現時点ではインポート/エクスポートに対応していません。 これはロードマップにあります。
  </Accordion>

  <Accordion title="親レコードが存在しない場合はどうなりますか？">
    その行に対してエラーが表示されます。 次のいずれかを行うことができます。
    * 先に親レコードをインポートしてから再インポートする
    * 参照値を修正する
    * インポート対象からその行を削除する
  </Accordion>

  <Accordion title="リレーションが正しくリンクされないのはなぜですか？">
    よくある原因：
    * 形式の誤り（ドメインには `https://domain.com` を使用）
    * 大文字小文字の不一致（綴りを正確に確認）
    * 親が存在しない（先に親をインポート）
    * 複数の識別子をマッピングしている（1 つだけを使用）
  </Accordion>
</AccordionGroup>

<Warning>
**注意: 論理削除されたレコードも一意性の判定に含まれます。**

「not found」エラーが出るのにレコードが存在するように見える場合は、Command Menu → See deleted records を確認してください。 親が論理削除されている可能性があります。
</Warning>

## トラブルシューティング

お困りですか？ 次を確認してください:

* [インポートエラーを解決する方法](/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)
