メインコンテンツへスキップ

概要

Twenty は、CSV インポート時にオブジェクト間のリレーションのインポートをサポートしています。 これにより、データ移行の一環としてレコードをリンクできます(例:連絡先を会社に関連付ける)。
現在インポートでサポート:各側が単一のオブジェクトタイプを指す一対多リレーション(例:連絡先 → 会社)。 複数のオブジェクトタイプを指すリレーションは、現時点ではインポート/エクスポートに対応していません。

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

1 対多 / 多対 1

Twenty は、1 件のレコードが複数のレコードにリンクする標準的なリレーションをサポートしています:
  • 1 社 → 複数の連絡先:1 つの会社には複数の従業員が所属できますが、各連絡先は 1 つの会社に所属します
  • 1 社 → 複数の商談:1 つの会社は複数の商談を持てますが、各商談は 1 つの会社に属します

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

一部のリレーションは、異なる種類のオブジェクトに接続できます。 これは 2 つのパターンで機能します: パターン 1:異なるオブジェクトタイプからの多数のレコードが、それぞれ 1 件のレコードにリンクする場合 複数のメモ、タスク、またはアクティビティは、それぞれ同時に複数のオブジェクトタイプに関連付けることができます:
  • メモは、連絡先 1 件、会社 1 社、商談 1 件に同時にリンクできます
  • タスクは、連絡先 1 件、会社 1 社、商談 1 件に同時にリンクできます
ここでは、メモ/タスクが「多」の側です。 それぞれがオブジェクトタイプごとに 1 件のレコードへリンクします。 パターン 2:1 件のレコードが、異なるオブジェクトタイプの多数のレコードからリンクを受け取る場合 プロジェクトは、異なるオブジェクトタイプにわたる複数のレコードからリンクを受け取ることができます:
  • プロジェクトには、多数の連絡先がリンクされ、多数の会社がリンクされ、多数のメモが添付される可能性があります
ここでは、プロジェクトが「1」の側です。 異なるオブジェクトの複数のレコードが、同じプロジェクトにすべてリンクできます。
インポート/エクスポートの制限:複数のオブジェクトタイプを指すリレーション(例:メモ → 連絡先/会社/商談)は、CSV のインポートやエクスポートではまだサポートされていません
  • インポート:各側が単一のオブジェクトタイプを指す一対多のリレーションのみインポートできます
  • エクスポート:複数のオブジェクトタイプを指すリレーションの列は、現在空のままになります
これはロードマップにあります。

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

多対多リレーションはまだ利用できません。 たとえば、現在は次のようなリレーションを作成できません:
  • 多数の連絡先が多数のプロジェクトにリンクされる
多対多リレーションは 2026 年上半期に提供予定です。

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

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

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

まず、どのオブジェクトがリレーションの「1」の側で、どのオブジェクトが「多」の側かを特定します。 :
  • 会社が「1」の側(1 つの会社に多くの従業員がいる)
  • 連絡先が「多」の側(各人は 1 つの会社に所属する)

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

「多」の側をインポートする前に、「1」の側のレコードが Twenty に既に存在している必要があります。
  • まず「1」の側のレコード(例:会社)をインポートまたは作成します
  • それらの一意の識別子を検証します。 これは次のいずれかです:
    • id(Twenty の UUID)
    • 一意に設定されたフィールド(例:会社の domain、または以前のシステムの外部 ID)
存在しないレコードを参照している場合、インポートは失敗します。

ステップ 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 が各レコードを一致する親に自動でリンクします。

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

オブジェクト利用可能な一意フィールド
会社iddomain、任意のカスタム一意フィールド
連絡先idemail、任意のカスタム一意フィールド
ワークスペースメンバーidemail(名前ではありません)
その他の標準オブジェクトおよびカスタムオブジェクトid、一意としてマークされた任意のフィールド
ワークスペースメンバーへのリンク:リレーションの参照先がワークスペースメンバー(Twenty にログインするあなたのチーム)の場合、名前ではなくメールアドレスで参照してください。
会社には domain、連絡先には email を使用することをおすすめします。これらは人間が読みやすく、スプレッドシートでの管理も容易です。
リマインダー:ソフト削除されたレコード(コマンドメニュー → 削除済みレコードを表示 で確認可能)は、一意性の判定に含まれます。 削除済みレコードと同じ一意の値を持つレコードをインポートすると、その削除済みレコードが復元されます。 詳細は一意性制約を参照してください。

インポート順のルール

必ず「1」の側を先にインポートしてください!
  1. 会社を最初に(依存関係なし)
  2. 連絡先を次に(会社にリンク)
  3. 商談を 3 番目に(会社/連絡先にリンク)
  4. カスタムオブジェクトは依存関係に従って
参照する前に、親レコードが存在している必要があります。