snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
---
title: エラー処理と検証
description: 確定する前に、UI 上でインポートエラーを確認して修正します。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## インポート前の検証
ファイルをアップロードしてフィールドをマッピングした後、Twenty はインポートする**前**にデータを検証します。 これにより、既存のデータに影響を与えることなく、エラーを検出して修正できます。
## 仕組み
1. **CSV ファイルをアップロード**
2. **列を Twenty のフィールドにマッピング**
3. **黄色で強調表示された潜在的なエラーを確認**
4. **UI で直接エラーを修正**
5. **インポートを確定**
<VimeoEmbed videoId="1145273857" title="デモ動画" />
## エラーの表示
問題のある行は **黄色** で強調表示されます。 次のことができます:
* **セルを直接編集**してエラーを修正
* **行を削除**して完全にスキップ
このインライン編集により時間を節約できます。スプレッドシートに戻ってエラーを修正し、再アップロードする必要はありません。
## よくあるエラーの種類
### 重複した値
**原因**: 一意のフィールド(メール、ドメイン)が Twenty に既に存在するか、ファイル内で 2 回出現しています。
**対処**:
* インポート UI で重複値を編集
* 重複行のいずれかを削除
一意性の適用方法の詳細は[一意性制約](/l/ja/user-guide/data-migration/capabilities/uniqueness-constraints)を参照してください。
### 無効な形式
**原因**: データが期待される形式に一致していません(例: 無効なメールアドレス、日付形式の誤り)。
**対処**: セルを編集して正しい形式にする。
各フィールドタイプの期待される形式は[フィールドマッピング](/l/ja/user-guide/data-migration/capabilities/field-mapping)を参照してください。
### 必須フィールドの欠落
**原因**: 必須フィールドが空です。
**対処**: 必須フィールドに値を入力するか、その行を削除する。
### リレーションが見つかりません
**原因**: 参照しているレコードが存在しません(例: インポートされていない会社のドメイン)。
**対処**:
* まず親レコードをインポートする
* または参照値を修正する
正しいインポート順序とレコードの関連付け方法は[リレーションのインポート](/l/ja/user-guide/data-migration/capabilities/import-relations)を参照してください。
## エラーを減らすためのヒント
1. **テンプレートをダウンロード**して、ファイルをインポートする前に期待されるフォーマットを確認してください
2. まず**スプレッドシートでデータをクリーンアップ**
3. **正しい順序でファイルをインポート**してリレーションを取り込む(会社 → 人 → 商談)
4. **小さなバッチでテスト**してから全量インポート
5. **アップロード前に重複を確認**
6. **各ファイルを10,000レコードに制限**

View File

@@ -0,0 +1,198 @@
---
title: フィールドマッピング
description: データインポート時のフィールドマッピングの仕組み。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## フィールドマッピングの仕組み
ファイルをアップロードすると、Twenty が列を解析し、既存のフィールドに一致させようとします。
### 自動マッピング
Twenty は次の基準に基づいて列を照合します:
* 列ヘッダー名(完全一致または類似一致)
* データ型の検出(日付、数値、メールアドレス)
* 一般的なフィールドのパターン
<Note>**クイックヒント:** インポートしたいオブジェクトから数行をエクスポートしてください。 エクスポートしたファイルには、Twenty が想定する正確な列名が含まれているため、インポート時の自動マッピングがスムーズになります。</Note>
### 手動マッピングのオプション
各列に対して、次の操作ができます:
* **フィールドにマップ**:ドロップダウンから一致する Twenty のフィールドを選択します
* **マップしない**:その列をスキップします(データはインポートされません)
<Note>**フィールドはインポート前に存在している必要があります。** インポートで作成されるのはフィールドではなくレコードです。 インポート前に **Settings → Data Model** でカスタムフィールドを作成してください。</Note>
## フィールドタイプの互換性
Data Model で利用可能なすべてのフィールドタイプはインポートに対応しています。
`id` 値をインポートして、新規レコードに特定の ID を割り当てるか、既存レコードを更新することもできます。
<img src="/images/user-guide/fields/all-field-types.png" style={{width:'100%'}} />
## データ形式の要件
<Note>**一部のフィールドには特別な書式があります。** インポートの準備をする前にサンプルファイルをダウンロードし、各フィールドタイプに期待される書式を確認することをおすすめします。</Note>
### 住所フィールド
住所は複数の列を持つネストされたフィールドです。 一部は空欄のままにできます。
* **Address / Address 1**:住所の1行目
* **Address / Address 2**:住所の2行目
* **Address / City**:市区町村名
* **Address / State**:州または都道府県
* **Address / Country**:国名
* **Address / Post Code**:郵便番号/ZIP コード
### 配列フィールド
次の形式を使用します:
```
["value1","value2"]
```
### ブール型フィールド
`TRUE` または `FALSE`(大文字)を使用します。`true` や `false` は使用しません
### 通貨フィールド
通貨は 2 列からなるネストされたフィールドで、**両方を必ず入力** する必要があります:
* **Amount / Amount**:数値(例:`1234.56`)
* **Amount / Currency**:通貨コード(例:`USD`、`EUR`)
### 日付フィールド
サポートされている形式:
* `YYYY-MM-DD`(推奨)
* `MM/DD/YYYY`
* `DD/MM/YYYY`
* ISO 8601 形式
### ドメインフィールド
* 重複作成を避けるため、`https://domain.com` の形式を使用することを推奨します。これは、メールボックスおよびカレンダーの同期で作成される Companies オブジェクトでも使用される形式です
* `Domain Label` と `Domain URL` を入力できます。ベストプラクティスは、ラベルには `domain.com`、URL には `https://domain.com` を入力することです
* Companies オブジェクト内でドメインは一意である必要があります
* **インポートするファイル内でもドメインは一意である必要があります**
### メールアドレスフィールド
* 有効なメールアドレス形式である必要があります
* People オブジェクト内でメールアドレスは一意である必要があります
* **インポートするファイル内でもメールアドレスは一意である必要があります**
* 追加のメールアドレスについて:メインのメールには **Emails / Primary Email** を使用し、**Emails / Additional Emails** には次の形式を使用します:
```
["jane@twenty.com","jane.doe@twenty.com"]
```
### IDフィールド
インポート時に `id` を指定するかどうかは任意です。 指定しない場合は、Twenty が自動生成します。
`id` 列をマッピングするユースケース:
* **特定の ID を設定**:新規作成されるレコードの UUID を指定します
* **既存レコードを更新**:既存レコードに照合して、重複を作成せずに更新します。 その場合、他の一意なフィールドはマッピングしないことを推奨します。唯一の一意フィールドのみをマッピングすることで、よりスムーズにインポートできます。
<Note>`id` を指定する場合は UUID 形式(例:`c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)である必要があります。</Note>
### JSON フィールド
有効な JSON 形式を使用します:
```
{"key":"value","key2":"value2"}
```
### リンクフィールド
ドメインフィールドと同様に:
* ラベル列と URL 列の両方を入力します:**Links / Link URL** と **Links / Link Label**
* 完全な URL 形式(`https://example.com`)を使用します
* セカンダリリンクには **Links / Secondary Links** 列を使用し、次の形式で入力します:
```
[{"url":"https://twenty.com","label":"Twenty"}]
```
### マルチセレクトフィールド
表示ラベルではなく **API 名** を使用し、次の形式で指定します:
```
["VALUE1","VALUE2"]
```
API 名の確認方法は[こちら](#finding-api-names-for-select-fields)をご覧ください。
<Note>新しい選択肢はインポートによって自動作成されません。 インポート前に **Settings → Data Model** で追加する必要があります。</Note>
<Warning>
**インポートする上書き; 追加しません。**
レコードにすでに `VALUE2` と `VALUE3` が選択されている状態で `["VALUE1"]` をインポートすると、インポート後そのレコードは `VALUE1` のみになります。 以前の選択は結合されず、置き換えられます。
</Warning>
### 数値フィールド
* 数値のみ
* 小数点はピリオドを使用:`1234.56`
* 桁区切りは使用しないでください
### 電話番号フィールド
電話は複数の列からなるネストされたフィールドで、**必ず入力** する必要があります
* **Phones / Primary Phone Number**:電話番号(例:`4159095555`)
* **Phones / Primary Phone Country Code**:国コード(例:`US`)
* **Phones / Primary Phone Calling Code**:ダイヤルコード(例:`+1`)
### 評価フィールド
API 名の形式(`RATING_1`、`RATING_2`、`RATING_3`、`RATING_4`、`RATING_5`)を使用します
### リレーションフィールド
詳細は専用記事「[オブジェクト間のリレーションのインポート](/l/ja/user-guide/data-migration/capabilities/import-relations)」をご覧ください
### 選択フィールド
表示ラベルではなく、オプションの **API 名** を使用します:
```
VALUE1
```
API 名の見つけ方は[こちら](#finding-api-names-for-select-fields)を参照してください。
<Note>新しい Select オプションは、インポートによって自動的に作成されません。 インポート前に **設定 → データモデル** で追加する必要があります。</Note>
### テキストフィールド
* 特別な書式設定は不要です
* 先頭と末尾の空白は削除されます
## API 名の見つけ方
事前定義されたオプションを持つ Select、Multi-Select、Array フィールドでは、表示ラベルではなく、必ず **API 名** を使用してください。
### API 名の確認方法
1. **設定 → データモデル** に移動する
2. オブジェクトとフィールドを選択する
3. **詳細モード** を有効にする(設定ページの右下にあるトグル)
4. 各オプションの API 名を確認する
<VimeoEmbed videoId="1144910809" title="デモ動画" />

View File

@@ -0,0 +1,48 @@
---
title: 対応ファイル形式
description: Twenty でのデータインポートで対応しているファイル形式。
---
## 対応形式
Twenty はインポート用に 3 種類のファイル形式に対応しています:
| 形式 | 拡張子 | ノート |
| ---------------- | ----- | ------------ |
| **CSV** | .csv | 推奨(最も互換性が高い) |
| **Excel** | .xlsx | 現行の Excel 形式 |
| **Excel (レガシー)** | .xls | 旧 Excel 形式 |
## ファイル要件
| 要件 | 値 |
| ------------ | --------------------- |
| **エンコーディング** | UTF-8 を推奨 |
| **レコード数の上限** | 1 ファイルあたり 10,000 レコード |
| **構造** | 先頭行には列ヘッダーを含める必要があります |
| **コンテンツ** | 1 ファイルにつき 1 種類のオブジェクト |
## CSV ベストプラクティス
* **区切り文字**: カンマ (`,`) またはセミコロン (`;`) を使用
* **テキスト囲み文字**: カンマを含むテキストには二重引用符 (`"`) を使用
* **改行コード**: Windows (CRLF) または Unix (LF) のどちらにも対応
* **空の値**: セルは空のままにし、"NULL" や "N/A" は使用しないでください
## Excel ベストプラクティス
Excel からエクスポートする場合:
* 数式を削除 (値のみをエクスポート),
* 末尾の空行を削除
* 結合セルがないことを確認
* 最初のシートのみを使用
## 大規模データセット
10,000 レコードを超えるデータセットの場合:
* 複数のファイルに分割
* または、無制限のレコードに対応する [API インポート](/l/ja/user-guide/data-migration/how-tos/import-data-via-api) を使用
<Note>非常に大規模な移行 (100,000 レコード以上) の場合、API は CSV インポートよりも大幅に高速で信頼性も高くなります。</Note>

View File

@@ -0,0 +1,148 @@
---
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>

View File

@@ -0,0 +1,72 @@
---
title: 一意性の制約
description: Twenty によるインポート時のデータ一意性の確保方法。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 概要
Twenty は、重複レコードを防ぎデータの整合性を確保するため、特定のフィールドに一意性を強制します。 これらの制約を理解することは、インポートを成功させるうえで不可欠です。
## デフォルトの一意のフィールド
| オブジェクト | 一意のフィールド |
| -------------- | -------------- |
| **連絡先** | `id`, `email` |
| **会社** | `id`, `domain` |
| **カスタムオブジェクト** | `id` のみ(デフォルト) |
<Note>`id` フィールドは Twenty の内部識別子で、各レコードに対して自動生成されます。 UUID 形式を使用します(例: `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)。</Note>
## カスタムの一意フィールド
追加の一意フィールドは **設定 → データモデル** で定義できます:
1. **設定 → データモデル** に移動します
2. オブジェクトを選択する
3. フィールドをクリックする
4. フィールド設定で **Unique** を有効化する
### カスタムの一意フィールドのユースケース
* **外部 ID**: 他システムの ID を保存(Salesforce ID、HubSpot ID)
* **ビジネス識別子**: 従業員番号、顧客コード
* **代替連絡先情報**: LinkedIn プロフィール、電話番号
<Note>フィールド名 `id` は Twenty の内部 ID 用に予約されています。 外部識別子には `externalId` や `legacyId` など別の名前を使用してください。</Note>
## インポート時の動作
### 新規レコードの作成
一意フィールドの値が存在しない場合は、新しいレコードが作成されます。
### 既存レコードの更新
一意フィールドの値が既存レコードに一致する場合、そのレコードは新しいデータで**更新**されます。
<Warning>**既存レコードを更新**する場合は、**一意フィールドを 1 つのみに限定して照合**することを推奨します。</Warning>
### ソフト削除済みレコード
<Warning>
**削除済みレコードは一意性の判定に含まれます。**
ソフト削除されたレコード(コマンドメニュー → 削除済みレコードを表示 で表示可能)は、一意性チェックに含まれます。 削除済みレコードと同じ一意の値を持つレコードをインポートすると、その削除済みレコードが新しいデータで**復元**されます。
</Warning>
## インポート時の重複検出
検証フェーズ中:
* ファイル内の重複は黄色でハイライト表示されます
* インポートを開始する前に、UI から重複行を編集または削除できます
<VimeoEmbed videoId="1145246326" title="デモ動画" />
## ベストプラクティス
1. インポート前にファイルから**重複を削除**してください
2. インポート前に Twenty で**既存レコードを確認**してください
3. 他のシステムから移行する場合は、**外部 ID を使用**してください
4. 既存レコードを更新したい場合は、**一意フィールドを含め**てください