---
title: オブジェクト間のリレーションをインポートする
description: CSV を使ってレコード間のリレーションをインポートします。
---

## 概要

Twenty は、CSV インポート時にオブジェクト間のリレーションのインポートをサポートしています。 これにより、データ移行の一環としてレコードをリンクできます（例：連絡先を会社に関連付ける）。

<Note>**現在インポートでサポート**：各側が単一のオブジェクトタイプを指す一対多リレーション（例：連絡先 → 会社）。 複数のオブジェクトタイプを指すリレーションは、現時点ではインポート/エクスポートに対応していません。</Note>

## Twenty におけるリレーションの仕組み

### 1 対多 / 多対 1

Twenty は、1 件のレコードが複数のレコードにリンクする標準的なリレーションをサポートしています:

* **1 社 → 複数の連絡先**：1 つの会社には複数の従業員が所属できますが、各連絡先は 1 つの会社に所属します
* **1 社 → 複数の商談**：1 つの会社は複数の商談を持てますが、各商談は 1 つの会社に属します

### 複数のオブジェクトタイプを指すことができるリレーション

一部のリレーションは、異なる種類のオブジェクトに接続できます。 これは 2 つのパターンで機能します:

**パターン 1：異なるオブジェクトタイプからの多数のレコードが、それぞれ 1 件のレコードにリンクする場合**

複数のメモまたはタスクは、それぞれ複数のオブジェクトタイプに一度にアタッチできます。

* **メモ**は、連絡先 1 件、会社 1 社、商談 1 件に同時にリンクできます
* **タスク**は、連絡先 1 件、会社 1 社、商談 1 件に同時にリンクできます

ここでは、メモ/タスクが「多」の側です。 それぞれがオブジェクトタイプごとに 1 件のレコードへリンクします。

<img src="/images/user-guide/fields/many-to-one-morph.png" style={{width:'100%'}} />

**パターン 2：1 件のレコードが、異なるオブジェクトタイプの多数のレコードからリンクを受け取る場合**

プロジェクトは、異なるオブジェクトタイプにわたる複数のレコードからリンクを受け取ることができます:

* **プロジェクト**には、多数の連絡先がリンクされ、多数の会社がリンクされ、多数のメモが添付される可能性があります

ここでは、プロジェクトが「1」の側です。 異なるオブジェクトの複数のレコードが、同じプロジェクトにすべてリンクできます。

<img src="/images/user-guide/fields/one-to-many-morph.png" style={{width:'100%'}} />

<Warning>
**インポート/エクスポートの制限**：複数のオブジェクトタイプを指すリレーション（例：メモ → 連絡先/会社/商談）は、CSV のインポートやエクスポートでは**まだサポートされていません**。

* **インポート**：各側が単一のオブジェクトタイプを指す一対多のリレーションのみインポートできます
* **エクスポート**：複数のオブジェクトタイプを指すリレーションの列は、現在空のままになります

これはロードマップにあります。
</Warning>

### 現在サポートされていないもの

**多対多リレーション**はまだ利用できません。 たとえば、現在は次のようなリレーションを作成できません：

* 多数の連絡先が多数のプロジェクトにリンクされる

<Note>H22026年には多くの関係が予定されています。</Note>

## インポート時にレコードをリンクする

<Note>**リマインダー**：各側が単一のオブジェクトタイプを指す一対多のリレーションのみインポートできます（例：連絡先 → 会社）。 複数のオブジェクトタイプを指すリレーション（例：メモ → 連絡先/会社/商談）は、まだサポートされていません。</Note>

### ステップ 1: 「1」と「多」の側を特定する

まず、どのオブジェクトがリレーションの「1」の側で、どのオブジェクトが「多」の側かを特定します。

**例**:

* **会社**が「1」の側（1 つの会社に多くの従業員がいる）
* **連絡先**が「多」の側（各人は 1 つの会社に所属する）

### ステップ 2: 「1」の側のレコードが存在することを確認する

「多」の側をインポートする前に、「1」の側のレコードが Twenty に既に存在している必要があります。

* まず「1」の側のレコード（例：会社）をインポートまたは作成します
* それらの一意の識別子を検証します。 これは次のいずれかです:
  * `id`（Twenty の UUID）
  * 一意に設定されたフィールド（例：会社の `domain`、または以前のシステムの外部 ID）

<Warning>存在しないレコードを参照している場合、インポートは失敗します。</Warning>

### ステップ 3: CSV ファイルを準備する

「多」の側の CSV ファイルに、「1」の側のレコードを参照する列を追加します。

**例**：会社にリンクする連絡先の CSV ファイルの場合:

```
firstName,lastName,email,companyDomain
John,Smith,john@acme.com,https://acme.com
Jane,Doe,jane@widgets.co,https://widgets.co
```

**重要**:

* 値は会社レコード上の一意フィールドと**完全に一致**している必要があります
* ドメインの場合は、ドメインラベルではなく、**ドメイン URL**（例：`https://acme.com`）を使用してください
* リレーションごとに**1 つ**の一意の識別子のみをマッピングしてください。そうすることで、よりスムーズにインポートできます

### ステップ 4: リレーションフィールドが存在することを確認する

ファイルをアップロードする前に、オブジェクト間にリレーションフィールドが存在することを確認してください。

存在しない場合は:

1. **設定 → データモデル** に移動
2. オブジェクト（例：連絡先）を選択する
3. 対象オブジェクト（例：会社）を指すリレーションフィールドを作成する

### ステップ 5: リレーションをアップロードしてマッピングする

1. インポート UI から CSV ファイルをアップロードする
2. フィールドのマッピング手順で、リレーション列（例：`companyDomain`）を見つける
3. それをリレーションフィールド（例：会社）にマッピングする
4. Twenty が各レコードを一致する親に自動でリンクします。

### リレーションで利用可能な一意フィールド

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

<Note>**ワークスペースメンバーへのリンク**：リレーションの参照先がワークスペースメンバー（Twenty にログインするあなたのチーム）の場合、名前ではなく**メールアドレス**で参照してください。</Note>

<Note>会社には `domain`、連絡先には `email` を使用することをおすすめします。これらは人間が読みやすく、スプレッドシートでの管理も容易です。</Note>

<Note>**リマインダー**：ソフト削除されたレコード（コマンドメニュー → 削除済みレコードを表示 で確認可能）は、一意性の判定に含まれます。 削除済みレコードと同じ一意の値を持つレコードをインポートすると、その削除済みレコードが復元されます。 詳細は[一意性制約](/l/ja/user-guide/data-migration/capabilities/uniqueness-constraints)を参照してください。</Note>

## インポート順のルール

<Warning>
**必ず「1」の側を先にインポートしてください！**

1. **会社**を最初に（依存関係なし）
2. **連絡先**を次に（会社にリンク）
3. **商談**を 3 番目に（会社/連絡先にリンク）
4. **カスタムオブジェクト**は依存関係に従って

参照する前に、親レコードが存在している必要があります。
</Warning>
