---
title: 多対多リレーションを作成する
description: ジャンクションオブジェクトを使うことで、両側の多数のレコード同士をリンクできます。
---
多対多リレーションでは、両側で複数のレコードを相互に接続できます。 例えば、多数の連絡先が多数のプロジェクトで作業でき、各プロジェクトには多数の連絡先が紐づきます。
**ベータ機能**: ジャンクションリレーションは現在ベータ版です。 このガイドに進む前に、**Settings → Community → Features** で有効にしてください。
この機能を使うには **Advanced mode** も有効にする必要があります(Settings の左下にあるトグルで切り替え)。
## 多対多を使うタイミング
関係の両側が複数の接続を持ちうる場合に、多対多を使用します。
| 関係 | 例 |
| ------------ | -------------------------------------------------- |
| 連絡先 ↔ プロジェクト | 1 人の連絡先は複数のプロジェクトで作業でき、1 つのプロジェクトには複数のチームメンバーがいます。 |
| 会社 ↔ タグ | 1 社には複数のタグを付与でき、1 つのタグは複数の会社に適用できます。 |
| 商品 ↔ 注文 | 1 つの商品は複数の注文に含まれ、1 件の注文には複数の商品が含まれます。 |
## 仕組み
Twenty は多対多リレーションに **ジャンクションオブジェクト** パターンを使用します。 ジャンクションオブジェクトは 2 つのオブジェクトの間に位置し、接続を保持します。
```
People ←→ Project Assignments ←→ Projects
```
**Project Assignments** オブジェクト(ジャンクション)には次があります。
* People へのリレーション(多対1)
* Projects へのリレーション(多対1)
ジャンクションリレーションのトグルを有効にすると、Twenty は中間のジャンクションレコードを表示せず、リンクされたレコードを直接表示します。
## 前提条件
1. **ベータ機能で Junction Relations を有効化**: **Settings → Community → Features** に移動し、**Junction Relations** を有効にします
2. **Advanced mode を有効化**: 設定サイドバーの左下にある **Advanced mode** のトグルをオンにします
3. データモデルを計画する:
* どの 2 つのオブジェクトを接続しますか?
* ジャンクションオブジェクトの名称は何にしますか?
## ステップ 1: ジャンクションオブジェクトを作成する
まず、接続を保持する中間オブジェクトを作成します。
1. **設定 → データモデル** に移動します
2. **+ オブジェクトを追加**をクリックします
3. わかりやすい名前を付けます(例: "Project Assignment"、"Team Member"、"Product Order")
4. "Name フィールドの作成をスキップ" をオンに切り替えます
5. **保存**をクリック
**命名規則**: "Project Assignment" や "Team Membership" のように、関係を表す名前を使用してください。 これにより、データモデルが理解しやすくなります。
## 手順 2: オブジェクトとジャンクションの間にリレーションを作成する
2 つのオブジェクトそれぞれに、ジャンクションオブジェクトへのリレーションフィールドを追加します。
### 最初のリレーション(オブジェクト A → ジャンクション)
1. **Settings → Data Model** で最初のオブジェクトを選択します
2. **+ Add Relation** をクリック
3. ジャンクションオブジェクトを選択します(例: "Project Assignments")
4. リレーションタイプを **One-To-Many** に設定します(1 人の連絡先は複数の割り当てにリンクできます)
5. フィールドに名前を付けます:
* People 側のフィールド: 例: "Project Assignments"
* ジャンクション側のフィールド: 例: "Person"
6. **保存**をクリック
### 2 番目のリレーション(オブジェクト B → ジャンクション)
1. **Settings → Data Model** で 2 番目のオブジェクトを選択します
2. **+ Add Relation** をクリック
3. ジャンクションオブジェクトを選択します(例: "Project Assignments")
4. リレーションタイプを **1対多** に設定します(1 つのプロジェクトは複数の割り当てにリンクできます)
5. **"これはジャンクションオブジェクトへのリレーションです"** を有効にします
6. フィールドに名前を付けます:
* ジャンクション側のフィールド: 例: "Project"
* Projects 側のフィールド: 例: "Team Members"
7. **保存**をクリック
## ステップ 3: ジャンクションリレーションの表示を設定する
次に、中間のジャンクションオブジェクトを介さずにリンクされたレコードを直接表示するよう、元のオブジェクトを設定します。
1. **設定 → データモデル** に移動します
2. 最初のオブジェクトを選択します(例: "People")
3. ジャンクションオブジェクトを指すリレーションフィールド(例: "Project Assignments")を見つけます
4. クリックしてフィールドを編集します
5. **"これはジャンクションオブジェクトへのリレーションです"** を有効にします
6. **Target relation** を選択します(例: "Project" — 反対側を指すジャンクション上のフィールド)
7. **保存**をクリック
## 結果
設定後:
* **Person** レコードでは、"Project Assignments" フィールドに **Projects** が直接表示されます(割り当てレコードではありません)
* **Project** レコードでは、"Team Members" フィールドに **People** が直接表示されます
ジャンクションオブジェクト自体は存在し接続を保存しますが、UI ではよりすっきりした多対多ビューとして表示されます。
## 例: People ↔ Projects
完全な手順は以下のとおりです:
### ジャンクションオブジェクトを作成する
* 名前: **Project Assignment**
* 説明: "人と、その人が携わっているプロジェクトを関連付けます"
### リレーションを追加する
1. **People → Project Assignment**
* タイプ: 1対多
* People 側のフィールド: "Project Assignments"
* Assignment 側のフィールド: "Person"
2. **Projects → Project Assignment**
* タイプ: 1対多
* Projects 側のフィールド: "Team Members"
* Assignment 側のフィールド: "Project"
### ジャンクションの表示を設定する
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) — 基本的なリレーションの設定