--- 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) — 基本的なリレーションの設定