> ## Documentation Index
> Fetch the complete documentation index at: https://docs.get-clara.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# 多対多リレーションを作成する

> ジャンクションオブジェクトを使うことで、両側の多数のレコード同士をリンクできます。

多対多リレーションでは、両側で複数のレコードを相互に接続できます。 例えば、多数の連絡先が多数のプロジェクトで作業でき、各プロジェクトには多数の連絡先が紐づきます。

<Warning>
  **ラボ機能**: ジャンクションリレーションは現在 Lab にあります。 このガイドに進む前に、**Settings → Updates → Lab** で有効にしてください。
</Warning>

<Note>
  この機能を使うには **詳細モード** も有効にする必要があります（Settings の右下にあるトグルで切り替え）。
</Note>

## 多対多を使うタイミング

関係の両側が複数の接続を持ちうる場合に、多対多を使用します。

| 関係           | 例                                                  |
| ------------ | -------------------------------------------------- |
| 連絡先 ↔ プロジェクト | 1 人の連絡先は複数のプロジェクトで作業でき、1 つのプロジェクトには複数のチームメンバーがいます。 |
| 会社 ↔ タグ      | 1 社には複数のタグを付与でき、1 つのタグは複数の会社に適用できます。               |
| 商品 ↔ 注文      | 1 つの商品は複数の注文に含まれ、1 件の注文には複数の商品が含まれます。              |

## 仕組み

Twenty は多対多リレーションに **ジャンクションオブジェクト** パターンを使用します。 ジャンクションオブジェクトは 2 つのオブジェクトの間に位置し、接続を保持します。

```
People ←→ Project Assignments ←→ Projects
```

**Project Assignments** オブジェクト（ジャンクション）には次があります。

* People へのリレーション（多対1）
* Projects へのリレーション（多対1）

ジャンクションリレーションのトグルを有効にすると、Twenty は中間のジャンクションレコードを表示せず、リンクされたレコードを直接表示します。

## 前提条件

1. **Lab で Junction Relations を有効化**: **Settings → Updates → Lab** に移動し、**Junction Relations** を有効にします
2. **詳細モードを有効化**: 設定サイドバーの右下にある **Advanced mode** のトグルをオンにします
3. データモデルを計画する:
   * どの 2 つのオブジェクトを接続しますか？
   * ジャンクションオブジェクトの名称は何にしますか？

## ステップ 1: ジャンクションオブジェクトを作成する

まず、接続を保持する中間オブジェクトを作成します。

1. **設定 → データモデル** に移動します
2. **+ New object** をクリック
3. わかりやすい名前を付けます（例: "Project Assignment"、"Team Member"、"Product Order"）
4. **保存**をクリック

<Tip>
  **命名規則**: "Project Assignment" や "Team Membership" のように、関係を表す名前を使用してください。 これにより、データモデルが理解しやすくなります。
</Tip>

## ステップ 2: ジャンクションオブジェクトからリレーションを作成する

ジャンクションオブジェクトから、接続したい両方のオブジェクトへのリレーションフィールドを追加します。

### 最初のリレーション（ジャンクション → オブジェクト A）

1. **Settings → Data Model** でジャンクションオブジェクトを選択します
2. **+ Add Field** をクリック
3. フィールドタイプとして **Relation** を選択します
4. 最初のオブジェクトを選択します（例: "People"）
5. リレーションタイプを **Many-to-One** に設定します（多数の割り当てが 1 人の連絡先にリンクできます）
6. フィールドに名前を付けます:
   * ジャンクション側のフィールド: 例: "Person"
   * People 側のフィールド: 例: "Project Assignments"
7. **保存**をクリック

### 2 番目のリレーション（ジャンクション → オブジェクト B）

1. 引き続きジャンクションオブジェクトで、**+ Add Field** をクリックします
2. フィールドタイプとして **Relation** を選択します
3. 2 番目のオブジェクトを選択します（例: "Projects"）
4. リレーションタイプを **Many-to-One** に設定します
5. フィールドに名前を付けます:
   * ジャンクション側のフィールド: 例: "Project"
   * Projects 側のフィールド: 例: "Team Members"
6. **保存**をクリック

## ステップ 3: ジャンクションリレーションの表示を設定する

次に、中間のジャンクションオブジェクトを介さずにリンクされたレコードを直接表示するよう、元のオブジェクトを設定します。

1. **設定 → データモデル** に移動します
2. 最初のオブジェクトを選択します（例: "People"）
3. ジャンクションオブジェクトを指すリレーションフィールド（例: "Project Assignments"）を見つけます
4. クリックしてフィールドを編集します
5. **"これはジャンクションオブジェクトへのリレーションです"** を有効にします
6. **Target relation** を選択します（例: "Project" — 反対側を指すジャンクション上のフィールド）
7. **保存**をクリック

もう一方のオブジェクトでも同様に行います:

1. Data Model で "Projects" を選択します
2. "Team Members" のリレーションフィールドを編集します
3. ジャンクションのトグルを有効にします
4. 対象リレーションとして "Person" を選択します
5. 保存

## 結果

設定後:

* **Person** レコードでは、"Project Assignments" フィールドに **Projects** が直接表示されます（割り当てレコードではありません）
* **Project** レコードでは、"Team Members" フィールドに **People** が直接表示されます

ジャンクションオブジェクト自体は存在し接続を保存しますが、UI ではよりすっきりした多対多ビューとして表示されます。

## 例: People ↔ Projects

完全な手順は以下のとおりです:

### ジャンクションオブジェクトを作成する

* 名前: **Project Assignment**
* 説明: "人と、その人が携わっているプロジェクトを関連付けます"

### リレーションを追加する

1. **Project Assignment → People**
   * タイプ: 多対1
   * Assignment 側のフィールド: "Person"
   * People 側のフィールド: "Project Assignments"

2. **Project Assignment → Projects**
   * タイプ: 多対1
   * Assignment 側のフィールド: "Project"
   * Projects 側のフィールド: "Team Members"

### ジャンクションの表示を設定する

1. **People** オブジェクトで:
   * "Project Assignments" フィールドを編集
   * ジャンクションのトグルを有効にする
   * 対象: "Project"

2. **Projects** オブジェクトで:
   * "Team Members" フィールドを編集
   * ジャンクションのトグルを有効にする
   * 対象: "Person"

### 使ってみる

* Person レコードを開く → 紐づく Projects を直接表示
* Project レコードを開く → チームメンバーを直接表示
* どちら側からでも新しい接続を作成できます

## 接続に追加データを持たせる

ジャンクションオブジェクトは実体のあるオブジェクトなので、関係に関する情報を保存するためのカスタムフィールドを追加できます。

* **役割**: "Developer"、"Designer"、"Manager"
* **開始日**: プロジェクトに参加した日
* **割り当て時間**: 当該プロジェクトの週あたりの時間

このデータにアクセスするには、ジャンクションオブジェクトに直接移動するか、API 経由でクエリします。

## 制限事項

* **CSV インポート/エクスポート**: 多対多リレーションの直接インポートには対応していません。 代わりに、ジャンクションオブジェクトにレコードをインポートしてください。
* **フィルター**: 多対多リレーションでのフィルタリングには制限がある場合があります。

## 関連

* [リレーションフィールド](/l/ja/user-guide/data-model/capabilities/relation-fields) — リレーションタイプの解説
* [カスタムオブジェクトの作成](/l/ja/user-guide/data-model/how-tos/create-custom-objects) — オブジェクトの作成方法
* [リレーションフィールドを作成](/l/ja/user-guide/data-model/how-tos/create-relation-fields) — 基本的なリレーションの設定
