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. 既存レコードを更新したい場合は、**一意フィールドを含め**てください

View File

@@ -0,0 +1,32 @@
---
title: FAQをエクスポート
description: データのエクスポートに関するよくある質問
---
<AccordionGroup>
<Accordion title="カスタムオブジェクト、カスタムフィールド、リレーションシップ、メモ、タスク、商談、添付ファイル、ワークフロー、権限、監査履歴など、キャンセル前にすべてのワークスペースデータをエクスポートできますか?">
一部の例外を除き、ワークスペースデータはキャンセル前にエクスポートできます。ダッシュボード、ワークフロー、権限は手動で転送する必要があります。監査ログは転送できません。
</Accordion>
<Accordion title="現在エクスポートまたは移行できない要素はどれですか?">
ほとんどの要素は、いくつかの例外を除いてエクスポートまたは移行できます。
* ワークフロー、ダッシュボード、およびすべての設定 (API キー、Webフック、監査ログ、ユーザー設定など) 手動で移行する必要があります
* アプリ作成されたオブジェクトとフィールドは、別のワークスペースにそのアプリをインストールすることで移行できます。 手動で移行すべきではありません
* ワークフローのバージョンやワークフローの実行などの一部のレコードは、まったく転送できず、失われることが予想されます
* アカウントが接続され定期的に同期されるときに、メッセージやカレンダー関連のオブジェクトのような一部のオブジェクトは作成されるため、エクスポートするべきではありません。 アカウントを接続すると、再度同期されます(アカウントにアクセスできる限り) 会社を離れたチームメンバーのアカウントだったらそのメッセージはエクスポートされなければならない さもないと失われる)
</Accordion>
<Accordion title="自己ホストの移行手順、または支援の移行サービスへの公式クラウドがあるのですか?">
現時点では、公式のクラウド間でホストされた移行手順はありません。 一般的なアイデアは以下の通りです:
* まず、アプリが所有するオブジェクトとフィールドを導入するためのアプリをインストールします
* ユーザーによって追加されたカスタムオブジェクトとフィールドをレプリケートする
* API キーまたは AI ツールを使用したスクリプトを使用して、あるワークスペースから別のワークスペースにすべてのデータを移行します
* 転送できないすべてのオブジェクトは手動で移行する必要があります
以下の点にご注意ください:
* Proプランでは1分間に最大50リクエスト、Organizationプランでは1分間に100リクエストを送信してからリクエスト/分の上限に達することができます。
* 各APIリクエストは最大200件のレコードを持つことができます
* によって作成されたようなフィールドのいくつかのデータ、タイムラインアクティビティと更新されたデータは、システムによってインポートおよび上書きされた際に失われます
</Accordion>
<Accordion title="エクスポートされたファイルはオープンで文書化された形式で提供されますか?">
UI でエクスポートされたファイルは Excel 形式で、すべての API リクエストは JSON 形式で保存できます。
</Accordion>
</AccordionGroup>

View File

@@ -0,0 +1,209 @@
---
title: データをエクスポート
description: Twenty からデータをエクスポートするための完全なステップバイステップガイド。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 概要
バックアップ、レポート作成、または移行のために、ワークスペースのデータを CSV にエクスポートします。
**ユースケース:**
* **定期的なバックアップ** — データのコピーを保持
* **外部レポーティング** — Excel、Google スプレッドシート、BI ツールでデータを分析
* **移行** — データを別のシステムに移す
* **一括更新** — エクスポートして編集し、再インポートしてレコードを更新
## 知っておくべきこと
### エクスポートの制限
* 1 回のエクスポートにつき **最大 20,000 件のレコード**
* **表示されている列**のみがエクスポートされます
* **フィルターで絞り込まれたレコード**のみがエクスポートされます(現在のビューに基づきます)
<Note>大規模なエクスポート(20,000 件超)では、フィルターを使ってバッチに分けてエクスポートするか、[API](/l/ja/developers/extend/api) を使用してください。</Note>
### 権限
データをエクスポートするには **"Export CSV"** 権限が必要です。 このオプションがない場合は、ワークスペース管理者に連絡してください。
## ステップ 1:対象オブジェクトに移動
エクスポートしたいオブジェクトに移動します:
* **People** — 連絡先
* **Companies** — 組織
* **Opportunities** — 商談
* **カスタムオブジェクト** — 作成した任意のオブジェクト
## ステップ 2:ビューを設定
**重要:** エクスポートには現在のビューで表示されているもののみが含まれます。
### 列の追加/削除
1. **Options → Fields** をクリックします(または列の末尾の **+** をクリックします)
2. エクスポートしたいフィールドにチェックを入れる
3. 不要なフィールドのチェックを外す
### レコードをフィルター(任意)
データの一部だけが必要な場合:
1. **Filter** をクリックします
2. フィルター条件を追加します(例:"Created date > January 1, 2024")
3. 条件に一致するレコードのみがエクスポートされます
### レコードを並べ替え(任意)
1. 列ヘッダーをクリックして並べ替えます
2. エクスポートは並べ替え順に従います
<Note>**エクスポート専用のビューを作成しましょう。** エクスポート用に設定したビューを保存しておくと、毎回再設定する必要がありません。</Note>
## ステップ 3:データをエクスポート
1. テーブル右上の **⋮** アイコンをクリックします
2. **Export view** を選択します
3. CSV ファイルの保存場所を選択します
4. ダウンロードの完了を待ちます
## エクスポートされる内容
| 含まれるもの | 含まれないもの |
| ----------------- | ---------------- |
| 表示されているすべての列 | 非表示の列 |
| 現在のフィルターに一致するレコード | フィルターで除外されたレコード |
| カスタムフィールドの値 | ビューに含まれていないフィールド |
| レコード ID | 添付ファイル |
| リレーション ID | 画像 |
### リレーションフィールド
リレーション ID はリレーションシップの **"many" 側** でのみエクスポートされます:
* **People のエクスポート** には `companyId` 列が含まれます(People → Company のリレーション)
* **Companies のエクスポート** には `peopleIds` は含まれません(Companies は "one" 側です)
つまり、People のエクスポートを使用して再インポートすれば Company とのリンクを維持できますが、関係を再作成するには Companies の後に People を再インポートする必要があります。
## 目的別のエクスポート
### バックアップの場合
1. **すべてのフィールド** を表示したビューを作成
2. すべてのフィルターを解除して全レコードを含める
3. 各オブジェクトタイプを個別にエクスポート
4. エクスポートファイルを安全な場所に保管
5. 定期的なリマインダーを設定(毎週/毎月)
### 外部レポーティングの場合
1. 分析に必要なフィールドのみを含める
2. フィルターを適用して関連データに絞り込む
3. 分析対象のフィールドで並べ替えることを検討
### 一括更新の場合
1. 更新したいレコードをエクスポート
2. 一意の識別子(`email`、`domain`、または `id`)を含める
3. エクスポートしたファイルを編集
4. 再インポートしてレコードを更新します
参照:[既存レコードを更新する方法](/l/ja/user-guide/data-migration/how-tos/update-existing-records-via-import)
### マイグレーションの場合
別のシステムへマイグレーションするためにエクスポートする場合:
1. **各オブジェクトを個別にエクスポート** — People、Companies、Opportunities など
2. **ID フィールドを含める** — 関係の維持に役立ちます
3. **フィールドのマッピングを文書化** — Twenty のフィールドが対象システムにどのように対応するかを記録
## 大規模データセットの扱い(20,000 件超)
エクスポートの上限は 20,000 件です。 より大きなデータセットの場合:
### オプション 1:バッチでエクスポート
1. フィルターを追加(例:"Created date" の範囲)
2. 最初のバッチをエクスポート
3. フィルターを変更
4. 次のバッチをエクスポート
5. スプレッドシートでファイルを結合
**バッチ分割の例となるフィルター:**
* 日付範囲別(1月、2月、3月...)
* 担当者別(チームメンバー A、チームメンバー B...)
* ステータス別(Active、Inactive...)
### オプション 2:API を使用
API にはレコード数の上限がありません:
1. **Settings → Developers** から API キーを取得
2. GraphQL API を使用してレコードをクエリします
3. アプリケーションで結果を処理
参照:[API ドキュメント](/l/ja/developers/extend/api)
## ヒントとベストプラクティス
### エクスポート用ビューを作成
エクスポート用に設定したビューを保存します:
1. 列とフィルターを設定
2. **View options** → **Save as new view** をクリック
3. 名前を "Export - [Purpose]" にします
### エクスポートを安全に管理
エクスポートされたファイルには機密データが含まれる場合があります:
* 安全な場所に保管する
* 不要になった古いエクスポートを削除する
* エクスポートファイルの共有に注意する
### エクスポート前の確認
<Check>正しい列が表示されている</Check>
<Check>フィルターが正しく設定されている(または全件エクスポートのために解除済み)</Check>
<Check>エクスポート権限がある</Check>
## FAQ
<AccordionGroup>
<Accordion title="エクスポートに一部の列が含まれていないのはなぜですか?">
表示されている列のみがエクスポートされます。 エクスポート前に **Options → Fields** から必要な列を追加してください。
</Accordion>
<Accordion title="エクスポートにすべてのレコードが含まれないのはなぜですか?">
フィルターを確認してください。 エクスポートには、現在のビューのフィルターに一致するレコードのみが含まれます。 すべてのレコードをエクスポートするにはフィルターを解除してください。
</Accordion>
<Accordion title="20,000 件を超えるレコードをエクスポートできますか?">
1 回のエクスポートではできません。 フィルターを使ってバッチに分けてエクスポートするか、より大きなデータセットには API を使用してください。
</Accordion>
<Accordion title="エクスポートファイルの形式は何ですか?">
CSV(カンマ区切り形式)です。 Excel、Google スプレッドシート、その他のスプレッドシートアプリで開けます。
</Accordion>
<Accordion title="リレーション ID は含まれますか?">
はい。ただし、リレーションシップの "many" 側のみです。 たとえば、People のエクスポートには `companyId` が含まれますが、Companies のエクスポートには People の ID は含まれません。
</Accordion>
<Accordion title="エクスポートを自動化できますか?">
UI から直接はできません。 API を使用して自動エクスポートのワークフローを構築してください。
</Accordion>
</AccordionGroup>
## 次のステップ
* [既存レコードを更新する方法](/l/ja/user-guide/data-migration/how-tos/update-existing-records-via-import) — エクスポートを編集して再インポート
* [API でデータをインポートする方法](/l/ja/user-guide/data-migration/how-tos/import-data-via-api) — 大規模データセット向け
* [API ドキュメント](/l/ja/developers/extend/api) — カスタムのエクスポートワークフローを構築

View File

@@ -0,0 +1,430 @@
---
title: インポートエラーの修正
description: CSV のインポートエラーを解決するための包括的なトラブルシューティングガイド。
---
## 概要
インポートがうまくいきませんか? このガイドでは、一般的なインポートエラーを段階的に特定して修正する方法を説明します。
## インポート検証の仕組み
ファイルをアップロードして列をマッピングすると、Twenty がデータを検証します。
1. **検証の実行** — Twenty が各行にエラーがないか確認します
2. **エラーをハイライト** — 問題のある行は**黄色**で表示されます
3. **その場で修正可能** — インポート UI でセルを直接編集できます
4. **行を削除** — 問題のあるレコードをまるごとスキップします
<Note>**エラーは UI で修正できます。** スプレッドシートに戻る必要はありません。 インポート中にセルを直接編集して時間を節約しましょう。</Note>
## ステップごとのトラブルシューティング
### ステップ 1: エラーの種類を特定する
ハイライトされた行をクリックすると、具体的なエラーメッセージを確認できます。 よくあるエラーの種類:
| エラーメッセージ | 意味 |
| ------------------------------------------------------------------- | -------------------------------------- |
| 重複する値が黄色でハイライト | その値は Twenty に既に存在するか、ファイル内で 2 回出現しています |
| `{field} is not a valid {type}`(黄色のセルにカーソルを合わせる) | データが想定される形式と一致していません |
| 必須フィールドがハイライト表示 | 必須フィールドが空です |
| `Can't connect to {object}. No unique record found...`(インポートは失敗します) | 参照されているレコードが存在しません |
| `Too many records. Up to 10000 allowed`(アップロードがブロックされます) | ファイルのレコード数が 10,000 を超えています |
### ステップ 2: エラーを修正する
各エラータイプに応じて、以下の手順に従ってください。
---
## エラー:重複する値
### あなたが見るもの
インポート開始前に、重複する値がある行はインポート UI で**黄色でハイライト表示**されます。
### 意味
一意のフィールド(email、domain)が次のいずれかに該当しています:
* Twenty に既に存在する
* ファイル内で 2 回出現している
### 解決方法
**オプション 1:重複している値を編集**
1. エラーのあるセルをクリック
2. 一意の値に変更
3. インポートを続行
**オプション 2:重複行を削除**
1. 行の横にある X をクリック
2. その行はインポート時にスキップされます
**オプション 3:Twenty に既存レコードの更新を任せる**
1. ファイルに一意の識別子(`email`、`domain`、または `id`)が含まれていることを確認する
2. 一意の識別子フィールドをマッピングする
3. Twenty は重複を作成せず、既存のレコードを更新します
<Note>
一意のフィールドも更新できます。
* `id` を保持して `email` を変更すると → メールアドレスが更新されます
* `email` を保持して `id` を変更すると → ID が更新されます
いずれか 1 つの一意の識別子が一致していれば、Twenty がレコードを更新します。
</Note>
### このエラーの防止策
インポート前:
1. スプレッドシートを一意のフィールドで並べ替える
2. 重複行を削除する
3. レコードが Twenty に既に存在するか確認する
<Warning>
**論理削除されたレコードも一意性の判定に含まれます。**
コマンドメニューを確認 → 削除済みレコードを表示。 そこにあるレコードにも一意性制約が適用されます。 完全に削除するか、復元して更新します。
</Warning>
詳細はこちら: [一意性制約](/l/ja/user-guide/data-migration/capabilities/uniqueness-constraints)
---
## エラー:無効な形式
### あなたが見るもの
セルの値が黄色でハイライト表示されます。 カーソルを合わせるとエラーメッセージが表示されます:
```
{field name} is not a valid {field type}
```
### 意味
データがそのフィールドタイプの想定形式と一致していません。
### 解決方法 — フィールドタイプ別
#### メール
**問題:** 無効なメール形式
**解決策:** `name@domain.com` 形式を使用する
```
❌ john.smith@
❌ john smith@acme.com
✓ john.smith@acme.com
```
#### ドメイン
**問題:** 形式の不一致は重複の原因になります
**解決策:** `https://domain.com` 形式を使用(推奨)
```
⚠️ acme.com (valid, but not recommended)
⚠️ www.acme.com (valid, but not recommended)
✅ https://acme.com (recommended)
```
<Note>すべての形式は有効ですが、メール/カレンダー同期で使用される形式と一致するため、`https://domain.com` を推奨します。 他の形式を使用すると、会社が重複して作成される場合があります。</Note>
#### 日付
**問題:** 認識できない日付形式
**解決策:** ファイル全体で`YYYY-MM-DD`形式を一貫して使用する
```
✓ 2024-03-15 (YYYY-MM-DD)
❌ 03/15/2024 (MM/DD/YYYY)
❌ 15/03/2024 (DD/MM/YYYY)
```
#### 電話
**問題:** 必須列が不足
**解決策:** すべての電話関連の列を含める
| 列 | 例 |
| --------------------------------------- | ------------ |
| **Phones / Primary Phone Number** | `4159095555` |
| **Phones / Primary Phone Country Code** | `US` |
| **Phones / Primary Phone Calling Code** | `+1` |
#### ブール型
**問題:** 不正なブール値
**解決策:** 大文字の `TRUE` または `FALSE` を使用する
```
❌ true
❌ yes
❌ 1
✓ TRUE
✓ FALSE
```
#### セレクト/マルチセレクト
**問題:** 値が既存のオプションと一致しない
**解決策:** 表示ラベルではなく、**API 名**を使用する
API 名の確認方法:
1. **設定 → データモデル** に移動する
2. オブジェクトとフィールドを選択する
3. **詳細モード** を有効にする(右下のトグル)
4. API 名を使用する(例:`OPTION_1`。"Option 1" ではありません)
```
❌ High Priority
✓ HIGH_PRIORITY
```
#### 通貨
**問題:** 金額または通貨コードが欠落
**解決策:** 両方の列を入力する
| 列 | 例 |
| --------------------- | --------- |
| **Amount / Amount** | `1234.56` |
| **Amount / Currency** | `USD` |
#### 数
**問題:** 数値以外の文字を含む
**解決策:** 数字のみを使用し、小数はピリオドを使用する
```
❌ $1,234.56
❌ 1,234.56
✓ 1234.56
```
完全な形式のリファレンス: [フィールドマッピング](/l/ja/user-guide/data-migration/capabilities/field-mapping)
---
## エラー:必須フィールドが未入力
### あなたが見るもの
必須フィールドのセルがマークされ、その行が黄色でハイライト表示されます。
### 意味
この行で必須フィールドが未入力です。
### 解決方法
**オプション 1:値を入力**
1. 空のセルをクリック
2. 値を入力する
3. インポートを続行
**オプション 2:行を削除**
1. データがない場合は、X をクリックしてその行をスキップ
### このエラーの防止策
インポート前に、必須フィールドを確認してください:
1. **設定 → データモデル** に移動する
2. 対象のオブジェクトを選択する
3. どのフィールドが必須としてマークされているか確認する
---
## エラー:リレーションが見つかりません
### あなたが見るもの
このエラーは**インポート開始後**に発生します — 次のようなメッセージとともにインポートが失敗します:
```
Can't connect to company. No unique record found with condition: id = 7776ee49-f608-4a77-8cc8-6fe96ae1e43f
```
これは、その特定の識別子を持つ会社が Twenty に存在しないことを意味します。
<Note>他のエラーと異なり、このエラーはデータレビューの段階では検出されません。 インポートは開始されますが、欠落しているリレーションに遭遇すると失敗します。</Note>
### 意味
Twenty に存在しないレコードへリンクしようとしています。
### 解決方法
**オプション 1:まず親レコードをインポート**
1. 現在のインポートをキャンセル
2. 親レコード(例:会社)をインポート
3. その後、子レコード(例:連絡先)をインポート
**オプション 2:参照値を修正**
1. ファイル内の参照値を確認
2. 既存のレコードと完全一致していることを確認
3. 形式を確認:ドメインは `https://domain.com` にする
**オプション 3:リレーションを削除**
1. セルを空にして、リレーションなしでインポート
2. 後で手動でリレーションを追加
### このエラーの防止策
1. **正しい順序でインポートする:**
* まず会社
* 次に連絡先(会社の参照付き)
* 最後に商談
2. **参照値を検証する:**
* 親レコードをエクスポートして正確な識別子を取得
* ドメイン形式は `https://domain.com` を使用
* 入力ミスや大文字・小文字の相違を確認
<Warning>
**存在しないレコードを参照している場合、インポートは失敗します。**
必ず子オブジェクトの前に親オブジェクトをインポートしてください。
</Warning>
詳細はこちら: [リレーションのインポート](/l/ja/user-guide/data-migration/capabilities/import-relations)
---
## エラー:ファイルが大きすぎます
### あなたが見るもの
このエラーは**ファイルのアップロード時**に表示され、アップロードは完全にブロックされます:
```
Too many records. Up to 10000 allowed
```
ファイルサイズを減らすまで、データレビューの段階に進むことはできません。
### 意味
ファイルのレコード数が 10,000 を超えています。
### 解決方法
**オプション 1:複数のファイルに分割**
1. データを 10,000 レコード以下のファイルに分割する
2. 各ファイルを個別にインポートする
3. インポートの順序を維持する(連絡先の前に会社)
**オプション 2:API インポートを使用**
非常に大きなデータセットには、レコード数の制限がない API を使用してください。
参照:[API でデータをインポートする方法](/l/ja/user-guide/data-migration/how-tos/import-data-via-api)
---
## エラー:フィールドが認識されません
### 意味
ファイル内の列をマッピングできません。該当フィールドが Twenty に存在しないためです。
### 解決方法
1. **設定 → データモデル** に移動する
2. インポート対象のオブジェクトを選択する
3. **+ Add field** をクリック
4. 適切なタイプでカスタムフィールドを作成する
5. ファイルを再アップロードする
<Note>CSV インポートで作成されるのはレコードであり、フィールドではありません。 すべてのフィールドは、インポート前に存在している必要があります。</Note>
---
## エラー:ユーザーのリレーションが空
### 意味
レコードをユーザー(所有者、担当者)に割り当てようとしていますが、そのリレーションがマッピングされていません。
### よくある原因
1. **ユーザーが招待を受諾していない** — そのユーザーはまだ Twenty に存在していません
2. **旧システムのユーザー ID を使用している** — Twenty は他システムの ID を照合できません
3. **メール形式が不正** — 入力されたメールがユーザーの Twenty アカウントと一致していません
### 解決方法
1. すべてのユーザーが Twenty ワークスペースへの**招待を受諾**していることを確認する
2. ユーザーの**メールアドレス**を使用する(名前や旧システムの ID ではなく)
3. Twenty に参加した際と同じメールアドレスを使用する
<Warning>
**インポート前に、ユーザーは招待を受諾している必要があります。**
ユーザーが招待を受諾していない場合、そのユーザーを参照するレコードのユーザーリレーションは空になります。
</Warning>
---
## インポート前チェックリスト
インポート前に次を確認し、エラーを回避してください:
### ファイル要件
<Check>ファイル形式が CSV、XLSX、または XLS</Check>
<Check>レコード数が 10,000 未満</Check>
<Check>UTF-8 エンコードを使用</Check>
### データ品質
<Check>メールの重複なし(連絡先)</Check>
<Check>ドメインの重複なし(会社)</Check>
<Check>すべての日付が一貫した形式</Check>
<Check>すべてのドメインが `https://domain.com` 形式</Check>
### フィールドの形式
<Check>ブール型フィールドは `TRUE` または `FALSE`(大文字)を使用</Check>
<Check>セレクト型フィールドは表示ラベルではなく API 名を使用</Check>
<Check>電話フィールドに必要な列がすべて揃っている</Check>
<Check>通貨フィールドに金額と通貨コードの両方がある</Check>
### 関連
<Check>親レコードを子レコードより先にインポート</Check>
<Check>リレーション列が既存レコードを参照している</Check>
<Check>ドメイン形式が Twenty の形式と完全一致</Check>
### データモデル
<Check>すべてのカスタムフィールドが 設定 → データモデル に存在</Check>
<Check>インポート前にセレクトの選択肢が作成済み</Check>
---
## まだ問題がありますか?
上記の解決策を試しても解決しない場合:
1. **サンプルファイルをダウンロード** — Twenty が想定する正確な形式を確認
2. **既存レコードをエクスポート** — ファイルを動作しているデータと比較
3. **少量でテスト** — まず 5〜10 行で試す
4. **参考記事を確認:**
* [フィールドマッピング](/l/ja/user-guide/data-migration/capabilities/field-mapping)
* [一意性制約](/l/ja/user-guide/data-migration/capabilities/uniqueness-constraints)
* [リレーションのインポート](/l/ja/user-guide/data-migration/capabilities/import-relations)
* [エラー処理](/l/ja/user-guide/data-migration/capabilities/error-handling)

View File

@@ -0,0 +1,201 @@
---
title: CSV ファイルで会社をインポートする
description: Twenty に会社をインポートするための完全なステップバイステップガイド。
---
## 概要
このガイドでは、会社を Twenty にインポートする手順を説明します。 **まず Companies をインポートしてください**。People と Opportunities は Companies にリンクします。
## 始める前に
### 事前準備チェックリスト
<Check>
ファイル形式が CSV、XLSX、または XLS である
</Check>
<Check>
ファイルのレコード数が 10,000 未満
</Check>
<Check>
ファイル内に重複するドメインがない
</Check>
<Check>
すべてのカスタムフィールドが **Settings → Data Model** に存在する
</Check>
<Note>
10,000 社を超えてインポートする必要がありますか? 複数のファイルに分割するか、[API インポート](/l/ja/user-guide/data-migration/how-tos/import-data-via-api) を使用します。
</Note>
## ステップ 1: 会社データを準備する
### 必須および推奨フィールド
| フィールド | 必須? | 形式 | ノート |
| ------------- | --- | -------------------- | --------------------- |
| **Name** | 推奨 | テキスト | 会社の表示名 |
| **ドメイン** | 推奨 | `https://domain.com` | 一意の識別子 |
| **住所** | 任意 | 複数の列 | 以下を参照 |
| **従業員** | 任意 | 数 | 従業員数 |
| **カスタムフィールド** | 任意 | 項目により異なる | データモデル内に存在している必要があります |
### ドメイン形式
<Warning>
**ドメインには `https://domain.com` の形式を使用してください。**
これは、メール/カレンダー同期から Companies が自動作成される際に使用される形式と一致し、後の重複を防ぎます。
</Warning>
**ドメイン列:**
* **Domain / Domain Label**: `acme.com`
* **Domain / Domain URL**: `https://acme.com`
### 住所形式
住所は複数の列を必要とする**ネストされたフィールド**です:
```
Address / Address 1,Address / City,Address / State,Address / Country,Address / Post Code
123 Main Street,San Francisco,CA,USA,94105
```
### CSV のサンプル構造
```csv
name,Domain / Domain URL,Domain / Domain Label,Address / City,Address / Country,employees
Acme Corp,https://acme.com,acme.com,San Francisco,USA,250
Widget Co,https://widgets.co,widgets.co,New York,USA,50
```
<Note>
**プロのヒント:** インポート中に **Download sample file** をクリックして、Twenty が想定する正確な列名を確認してください。
</Note>
## ステップ 2: インポート機能にアクセスする
**オプション 1: Companies ビューから**
1. 左側のサイドバーで **Companies** に移動します
2. 右上の **⋮** アイコンをクリックします
3. **Import records** を選択します
**オプション 2: Command メニューを使用**
1. `Cmd + K`(Mac)または`Ctrl + K`(Windows)を押します
2. "import" と入力します
3. **Import records** を選択します
4. **Companies** を選択します
## ステップ 3: ファイルをアップロードする
1. **Select file** をクリックします
2. CSV、XLSX、または XLS ファイルを選択します
3. Twenty がファイルを解析するまで待ちます
## ステップ 4: 列をマッピングする
Twenty は列をフィールドに自動的に照合しようとします。 確認して調整します:
1. **自動マッピングを確認** — 正しいことを検証します
2. **誤ったマッピングを修正** — ドロップダウンをクリックして正しいフィールドを選択します
3. **列をスキップ** — インポートしたくない列には **Do not map** を選択します
### 重要なマッピングルール
* **Domain**: **Domain / Domain URL** にマップします(Domain Label ではありません)
* **住所**: 各項目を対応する列(City、State など)にマップします
* **Select フィールド**: 値は既存のオプションと一致している必要があります(次のステップでマッピングすることもできます)
<img src="/images/user-guide/import-export-data/match-columns.png" style={{width:'100%'}} />
## ステップ 5: Select フィールドの値をマッピングする
Select または Multi-Select フィールドがある場合:
1. Twenty は、既存のオプションと並べて値を表示します
2. ファイル内の各値を Twenty のオプションに対応付けます
3. 必要に応じて新しいオプションを作成します
<Note>
Select のオプションは表示ラベルではなく、**API 名**を使用します。 API 名を確認するには、**Settings → Data Model** で **Advanced mode** を有効にします。
</Note>
## ステップ 6: エラーを確認して修正
インポートを完了する前に、Twenty がデータを検証します:
1. **Next Steps** をクリックします
2. エラーのある行は **黄色** で強調表示されます
3. **エラーを直接修正** — セルをクリックして値を編集します
4. **問題のある行を削除** — その行をスキップするには X をクリックします
### 一般的な会社インポートのエラー
| エラー | 原因 | 解決策 |
| -------------- | -------------------- | --------------------------- |
| **重複したドメイン** | ドメインが Twenty に既に存在する | ファイルから削除するか、既存のレコードを更新します |
| **無効なドメイン形式** | 形式の誤り | `https://domain.com` を使用します |
| **必須フィールドの欠落** | 必須フィールドが空です | 値を入力するか、その行を削除します |
## ステップ 7: インポートを完了する
1. インポートの概要を確認します
2. インポートするには **Confirm** をクリックします
3. インポートが完了するまで待ちます
4. いくつかのレコードを確認して検証します
## 会社をインポートした後
これで、Companies にリンクするレコードをインポートできます:
1. **[People をインポート](/l/ja/user-guide/data-migration/how-tos/import-contacts-via-csv)** — ドメインを使って Companies にリンクします
2. **Opportunities をインポート** — Companies にリンクします
3. **インポートを検証** — データが正しいことを確認するために、いくつかのレコードを抜き取り確認します
## 既存の会社を更新する
新規作成ではなく会社を更新するには:
1. ファイルに `domain` または `id` 列を含めます
2. Twenty はこの一意の識別子でレコードを照合します
3. 既存の会社は更新され、新規は作成されます
詳細は [既存レコードを更新する方法](/l/ja/user-guide/data-migration/how-tos/update-existing-records-via-import) を参照してください。
## FAQ
<AccordionGroup>
<Accordion title="なぜ 2 社が同じドメインを持つことはできないのですか?">
ドメインは Twenty における一意の識別子です。 これにより会社の重複を防ぎ、メール同期でメールが正しい会社にリンクされるようになります。
</Accordion>
<Accordion title="ドメインのない会社がある場合はどうすればよいですか?">
ドメインは空のままでもかまいません。 ただし、データ品質を高め自動メールリンクのため、可能であればドメインの追加を推奨します。
</Accordion>
<Accordion title="People にリンクされていない会社をインポートできますか?">
はい! 最初に会社をインポートし、その後に People をインポートして、会社のドメインを使用して関連付けることができます。
</Accordion>
<Accordion title="既に存在するドメインをインポートした場合はどうなりますか?">
既存の会社と一致する一意の識別子(ドメインまたは id)を含めた場合、Twenty は重複を作成せず、その会社を更新します。
</Accordion>
<Accordion title="「duplicate domain」エラーはどのように修正しますか?">
ファイルから重複を削除するか、代わりに会社の `id` を含めて既存のレコードを更新してください。
</Accordion>
</AccordionGroup>
## トラブルシューティング
お困りですか? 次を確認してください:
* [インポートエラーを解決する方法](/l/ja/user-guide/data-migration/how-tos/fix-import-errors)
* [フィールドマッピングのリファレンス](/l/ja/user-guide/data-migration/capabilities/field-mapping)
* [一意性制約](/l/ja/user-guide/data-migration/capabilities/uniqueness-constraints)

View File

@@ -0,0 +1,242 @@
---
title: CSV ファイルで連絡先をインポートする
description: Twenty に連絡先(People)をインポートするための完全なステップバイステップガイド。
---
## 概要
このガイドでは、連絡先(People)を Twenty にインポートする手順を説明します。
## 始める前に
### 事前準備チェックリスト
<Check>
ファイル形式が CSV、XLSX、または XLS である
</Check>
<Check>
ファイルのレコード数が 10,000 未満
</Check>
<Check>
ファイル内に重複するメールアドレスがない
</Check>
<Check>
**会社を先にインポート**(People を会社に関連付ける場合)
</Check>
<Check>
すべてのカスタムフィールドが **Settings → Data Model** に存在する
</Check>
<Warning>
**People の前に会社をインポート**
People を会社に関連付けたい場合は、まず会社をインポートしてください。 参照する前に、その会社が存在している必要があります。
</Warning>
## ステップ 1: 連絡先データを準備する
### 必須および推奨フィールド
| フィールド | 必須? | 形式 | ノート |
| ------------- | --- | ----------------- | --------------------- |
| **メール** | 推奨 | `name@domain.com` | 一意である必要があります |
| **名** | 推奨 | テキスト | |
| **姓** | 推奨 | テキスト | |
| **会社** | 任意 | ドメインまたは ID | 既存の会社にリンクします |
| **電話** | 任意 | 複数の列 | 以下を参照 |
| **職種** | 任意 | テキスト | |
| **カスタムフィールド** | 任意 | 項目により異なる | データモデル内に存在している必要があります |
### メール形式
* 有効なメール形式である必要があります: `name@domain.com`
* **一意である必要があります** — ファイル内や Twenty 内に重複がないこと
* 追加のメールには、**Emails / Additional Emails** 列を使用してください:
```
["jane@twenty.com","jane.doe@twenty.com"]
```
### 電話番号の形式
電話番号は複数の列を必要とする**ネストされたフィールド**です:
| 列 | 例 |
| --------------------------------------- | ------------ |
| **Phones / Primary Phone Number** | `4159095555` |
| **Phones / Primary Phone Country Code** | `US` |
| **Phones / Primary Phone Calling Code** | `+1` |
### 会社への関連付け
会社の一意の識別子を含む列を追加します:
| 列名 | 形式 | 例 |
| --------------- | ------ | -------------------------------------- |
| `companyDomain` | URL 形式 | `https://acme.com` |
| `companyId` | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
<Note>
**ドメインの URL 形式**(`https://acme.com`)を使用し、ラベルは使用しないでください。 これは Twenty における会社の保存方式に一致します。
</Note>
### CSV のサンプル構造
```csv
firstName,lastName,email,jobTitle,companyDomain,Phones / Primary Phone Number,Phones / Primary Phone Country Code
John,Smith,john@acme.com,CEO,https://acme.com,4159095555,US
Jane,Doe,jane@widgets.co,CTO,https://widgets.co,2125551234,US
```
<Note>
**プロのヒント:** インポート中に **Download sample file** をクリックするか、既存の People をいくつかエクスポートして、Twenty が想定する正確な列名を確認してください。
</Note>
## ステップ 2: インポート機能にアクセスする
**オプション 1: People ビューから**
1. 左側のサイドバーで **People** に移動します
2. 右上の **⋮** アイコンをクリックします
3. **Import records** を選択します
**オプション 2: Command メニューを使用**
1. `Cmd + K`(Mac)または`Ctrl + K`(Windows)を押します
2. "import" と入力します
3. **Import records** を選択します
4. **People** を選択します
## ステップ 3: ファイルをアップロードする
1. **Select file** をクリックします
2. CSV、XLSX、または XLS ファイルを選択します
3. Twenty がファイルを解析するまで待ちます
## ステップ 4: 列をマッピングする
Twenty は列をフィールドに自動的に照合しようとします。 確認して調整します:
1. **自動マッピングを確認** — 正しいことを検証します
2. **誤ったマッピングを修正** — ドロップダウンをクリックして正しいフィールドを選択します
3. **列をスキップ** — インポートしたくない列には **Do not map** を選択します
### 重要なマッピングルール
| 列の種類 | マッピング先 | ノート |
| ------ | ------------------------------ | ------------------------------------ |
| 会社参照 | **会社** の関連フィールド | ドメインまたは ID のいずれか一方を使用し、両方は使用しないでください |
| メール | **メール** | プライマリメールアドレス |
| 追加のメール | **Emails / Additional Emails** | 配列形式 |
| 電話 | 別々の列 | 番号、国コード、Calling Code |
<img src="/images/user-guide/import-export-data/match-columns.png" style={{width:'100%'}} />
### 会社リレーションのマッピング
会社列をマッピングする際:
1. 会社参照列(例: `companyDomain`)を見つけます
2. それを **会社** の関連フィールドにマッピングします
3. Twenty は各 People レコードを対応する会社にリンクします
<Warning>
**リレーションには一意の識別子を必ず1つだけマッピングしてください。**
`companyId` と `companyDomain` の両方をマッピングしないでください。 どちらか一方を選択してください—人間が読みやすいので、可能であればドメインを推奨します。
</Warning>
## ステップ 5: Select フィールドの値をマッピングする
Select または Multi-Select フィールド(例: リードソース)がある場合:
1. Twenty は、既存のオプションと並べて値を表示します
2. ファイル内の各値を Twenty のオプションに対応付けます
3. 必要に応じて新しいオプションを作成します
<Note>
Select のオプションは表示ラベルではなく、**API 名**を使用します。 API 名を確認するには、**Settings → Data Model** で **Advanced mode** を有効にします。
</Note>
## ステップ 6: エラーを確認して修正
インポートを完了する前に、Twenty がデータを検証します:
1. **Next Steps** をクリックします
2. エラーのある行は **黄色** で強調表示されます
3. **エラーを直接修正** — セルをクリックして値を編集します
4. **問題のある行を削除** — その行をスキップするには X をクリックします
### 一般的な連絡先インポートのエラー
| エラー | 原因 | 解決策 |
| ------------------ | ------------------------------- | --------------------------- |
| **重複したメールアドレス** | メールアドレスが Twenty またはファイルに既に存在します | 重複を削除するか、既存のレコードを更新します |
| **無効なメールアドレス形式** | メールアドレスの形式が正しくありません | `name@domain.com` の形式に修正します |
| **リレーションが見つかりません** | 会社が存在しません | 先に会社をインポートするか、参照を修正します |
| **必須フィールドの欠落** | 必須フィールドが空です | 値を入力するか、その行を削除します |
## ステップ 7: インポートを完了する
1. インポートの概要を確認します
2. インポートするには **Confirm** をクリックします
3. インポートが完了するまで待ちます
4. いくつかのレコードを確認し、それらの Company リンクをチェックして検証します
## 連絡先をインポートした後
連絡先は Twenty に追加されました! 次のステップ:
1. **会社リンクを確認** — いくつかの People レコードを開き、正しい会社にリンクされていることを確認します
2. **Opportunities をインポート** — 必要に応じて、People や Companies にリンクします
3. **メール同期を設定** — メールボックスを接続して、連絡先レコード上でメール履歴を確認します
## 既存の連絡先を更新する
新規作成ではなく連絡先を更新するには:
1. ファイルに `email` または `id` 列を含めます
2. Twenty はこの一意の識別子でレコードを照合します
3. 既存の連絡先は更新され、新規は作成されます
詳細は [既存レコードを更新する方法](/l/ja/user-guide/data-migration/how-tos/update-existing-records-via-import) を参照してください。
## FAQ
<AccordionGroup>
<Accordion title="なぜ 2人の People が同じメールアドレスを持つことはできないのですか?">
メールアドレスは Twenty における一意の識別子です。 これにより連絡先の重複を防ぎ、メール同期でメールが正しい人物にリンクされるようになります。
</Accordion>
<Accordion title="メールアドレスのない人がいる場合はどうすればよいですか?">
メールアドレスは空のままでもかまいません。 ただし、データ品質とメール同期機能を高めるため、可能であればメールアドレスの追加を推奨します。
</Accordion>
<Accordion title="インポート中に People を Companies にリンクするにはどうすればよいですか?">
Company のドメイン(例: `https://acme.com`)または ID の列を追加します マッピング時に、この列を Company のリレーションフィールドに関連付けます。
</Accordion>
<Accordion title="Company がまだ存在しない場合はどうすればよいですか?">
まず Companies をインポートし、その後 People をインポートします。 参照する前に、その Company が存在している必要があります。
</Accordion>
<Accordion title="以前の CRM の ID をインポートできますか?">
はい! 外部 ID を保存するために、データモデルで "unique" に指定したカスタムフィールドを作成します。 注意: フィールド名 `id` は Twenty の内部 ID 用に予約されています。
</Accordion>
<Accordion title="「relation not found」エラーはどのように修正しますか?">
参照している Company が存在しません。 Company を先にインポートするか、ドメイン/ID が既存の Company と完全に一致しているか確認してください。
</Accordion>
</AccordionGroup>
## トラブルシューティング
お困りですか? 次を確認してください:
* [インポートエラーを解決する方法](/l/ja/user-guide/data-migration/how-tos/fix-import-errors)
* [リレーションをインポートする方法](/l/ja/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
* [フィールドマッピングのリファレンス](/l/ja/user-guide/data-migration/capabilities/field-mapping)

View File

@@ -0,0 +1,176 @@
---
title: API でデータをインポートする
description: 大規模なデータインポートに Twenty の API をいつ・どのように使用するか。
---
## 概要
Twenty は、プログラムによるデータインポートのために **GraphQL** と **REST API** の両方を提供しています。 CSV インポートがデータ量の観点で現実的でない場合、または自動化された定期的なインポートが必要な場合は、API を使用してください。
## API インポートを使うべきタイミング
| シナリオ | 推奨アプローチ |
| ------------- | ----------------- |
| 1 万件未満 | CSVインポート |
| 1 万〜5 万件 | CSVインポート(ファイルに分割) |
| **5 万件以上** | **API インポート** |
| 一度きりの移行 | どちらでも可(データ量に応じて) |
| **定期的なインポート** | **API インポート** |
| **リアルタイム同期** | **API インポート** |
| **他システムとの統合** | **API インポート** |
<Note>数十万件規模のデータセットでは、複数回の CSV インポートよりも API の方が大幅に高速で信頼性があります。</Note>
## API レートリミット
Twenty では、システムの安定性を確保するためにレート制限を設けています:
| 制限 | 値 |
| -------------------- | ------------- |
| **1 分あたりのリクエスト数** | 100 |
| **バッチ呼び出しあたりのレコード数** | 60 |
| **最大スループット** | ~6,000 レコード/分 |
<Warning>
**これらの制限を前提にインポート計画を立ててください。**
最大スループットで 100,000 レコードの場合、インポート時間は約 17 分になります。 エラー処理や再試行のための余裕時間を確保してください。
</Warning>
## 始めに
### ステップ 1: API キーを取得する
1. **設定 → 開発者** に移動
2. **+ API キーを作成** をクリック
3. キーにわかりやすい名前を付ける
4. API キーをすぐにコピーします(再表示されません)
5. 安全に保管する
<Warning>
**API キーは秘密にしてください。**
API キーを知っている人は誰でも、あなたのワークスペースのデータにアクセス・変更できます。 コードリポジトリにコミットしたり、公開で共有したりしないでください。
</Warning>
### ステップ 2: API を選択する
Twenty は 2 種類の API をサポートしています:
| API | 最適な用途 | ドキュメント |
| ----------- | ------------------------------ | ------------------------------------ |
| **GraphQL** | 柔軟なクエリ、関連データの取得、複雑な操作に最適 | [API ドキュメント](/l/ja/developers/extend/api) |
| **REST** | シンプルな CRUD 操作、馴染みのある REST パターン | [API ドキュメント](/l/ja/developers/extend/api) |
両方の API でサポートされる内容:
* レコードの作成、読み取り、更新、削除
* **バッチ操作** — 1 回の呼び出しで最大 60 レコードを作成または更新
**インポートではバッチ操作を使用**し、レート制限内でスループットを最大化してください。
### ステップ 3: インポート順序を計画する
CSV インポートと同様に、リレーションでは**順序が重要**です:
1. **会社**を最初に(依存関係なし)
2. 2 番目に **連絡先**(会社にリンク可能)
3. 3 番目に **商談**(会社および連絡先にリンク可能)
4. **タスク/メモ**(上記のいずれにもリンク可能)
5. **カスタムオブジェクト**(依存関係に従って)
## ベストプラクティス
### リクエストをバッチ化する
* レコードを 1 件ずつ送信しない
* 1 回の API 呼び出しにつき**最大 60 レコード**にまとめる
* これにより、レート制限内でスループットを最大化できます
### レート制限への対応
* リクエスト間に遅延を入れる(継続的なインポートでは最小 600ms)
* 制限に達したら指数バックオフを使用する
* 429(Too Many Requests)応答を監視する
### まずデータを検証する
* インポート前にデータをクリーンアップし、検証する
* 必須フィールドが入力されていることを確認する
* 形式が Twenty の要件に合致していることを確認する([フィールドマッピング](/l/ja/user-guide/data-migration/capabilities/field-mapping) を参照)
### すべてをログに記録する
* インポートしたすべてのレコード(ID を含む)を記録する
* エラーをコンテキスト情報とともに記録する
* これにより、問題のデバッグと完了確認が容易になります
### まずテストする
* 少量のバッチ(10〜20 レコード)でテストする
* Twenty にデータが正しく表示されることを確認する
* その後、フルインポートを実行する
### 重複を避けるためにアップサートを使用する
GraphQL API は **バッチ アップサート**をサポートしています — レコードが存在する場合は更新、存在しない場合は作成します。 これにより、インポートを再実行しても重複を防止できます。
## オブジェクト名とフィールド名の確認方法
利用可能なオブジェクトとフィールドを確認するには:
1. **設定 → API と Webhook** に移動
2. **Metadata API** を参照
3. すべての標準およびカスタムオブジェクトとそのフィールドを表示
ドキュメントには、すべての標準およびカスタムオブジェクト、そのフィールド、および期待されるデータ型が示されています。
## プロフェッショナルサービス
複雑な API 移行については、パートナーがお手伝いします:
| サービス | 提供内容 |
| ------------ | ------------------- |
| **データモデル設計** | 最適なデータ構造を設計 |
| **移行スクリプト** | インポート用スクリプトの作成と実行 |
| **データ変換** | 複雑なマッピングとクリーンアップに対応 |
| **検証と QA** | 移行が完了していることを検証 |
**最適な用途:**
* 10 万件以上のレコードの移行
* 複雑なデータ変換
* 厳しいスケジュール
* 開発リソースのないチーム
[contact@twenty.com](mailto:contact@twenty.com) までお問い合わせいただくか、[導入支援サービス](/l/ja/user-guide/getting-started/capabilities/implementation-services)をご覧ください。
## FAQ
<AccordionGroup>
<Accordion title="GraphQL と REST の違いは何ですか?">
GraphQL は、1 回のクエリで必要なデータだけを正確に要求でき、複雑な操作に適しています。 REST は標準的な HTTP メソッド(GET、POST、PUT、DELETE)を使用しており、従来の API を扱ったことがある場合は馴染みやすいでしょう。
</Accordion>
<Accordion title="API で既存のレコードを更新できますか?">
はい! 更新用ミューテーション(GraphQL)またはレコードの `id` を用いた PUT/PATCH リクエスト(REST)を使用してください。
</Accordion>
<Accordion title="重複にはどう対処すればよいですか?">
一意の識別子(メール、ドメイン)を使用して、まず既存のレコードをクエリします。 存在すれば更新、なければ作成します。
</Accordion>
<Accordion title="API でレコードを削除できますか?">
はい、削除用ミューテーション(GraphQL)または DELETE リクエスト(REST)を使用します。
</Accordion>
<Accordion title="Python や Node.js の SDK はありますか?">
現時点ではありませんが、どちらの API もあらゆる言語の任意の HTTP クライアントで利用できます。
</Accordion>
</AccordionGroup>
## API ドキュメント
実装の詳細、コード例、スキーマリファレンスについては次を参照してください:
* [API ドキュメント](/l/ja/developers/extend/api)

View File

@@ -0,0 +1,225 @@
---
title: CSV でオブジェクト間のリレーションをインポートする
description: CSV インポート時にレコードを関連付けるための完全なステップバイステップガイド。
---
## 概要
本ガイドでは、オブジェクト間のリレーションをインポートする手順を説明します(例:連絡先を会社にリンク、または商談を連絡先にリンク)。
<Note>**インポート可能なもの:** 単一のオブジェクトタイプを指す 1 対多のリレーションのみ。 複数のオブジェクトタイプを指すリレーション(例:メモが連絡先と会社の双方にリンク)は、現時点ではインポートに対応していません。</Note>
## リレーションの理解
### 「1 対多」リレーションとは?
1 対多のリレーションでは:
* **1 つの**会社には**多数の**連絡先(従業員)がいる
* **1 つの**会社には**多数の**商談がある
* **1 つの**連絡先には**多数の**タスクがある
「1」の側は**親**です。 「多」の側は**子**です。
### Twenty における一般的なリレーション
| リレーション | 「1」の側(親) | 「多」の側(子) |
| --------- | -------- | -------- |
| 会社 → 連絡先 | 会社 | 人物 |
| 会社 → 商談 | 会社 | 商談 |
| 連絡先 → タスク | 人物 | タスク |
| 連絡先 → メモ | 人物 | ノート |
## ステップ 1: 「1」と「多」の側を特定する
インポート前に、どのオブジェクトが親で、どれが子かを判断します。
**自問:** 「1 つの [オブジェクト A] は多数の [オブジェクト B] を持つか?」
* 1 つの会社 → 多数の連絡先 ✓(会社が親)
* 1 人 → 多数の会社 ✗(誤りです—1 人は 1 社に所属)
## ステップ 2: まず親レコードをインポートする
参照する前に、親(「1」の側)が Twenty に存在している必要があります。
**インポート順:**
1. **会社**を最初に(依存関係なし)
2. **連絡先**を次に(会社にリンク)
3. **商談**を 3 番目に(会社や連絡先にリンク)
4. **タスク/メモ**(上記のいずれかにリンク)
<Warning>
**親レコードが存在しない場合、インポートは失敗します。**
会社参照を含む連絡先をインポートする前に、必ず会社がインポート済みであることを確認してください。
</Warning>
## ステップ 3: 親の一意識別子を控える
親レコードは**一意の識別子**で参照する必要があります。 利用可能な選択肢:
| 親オブジェクト | 利用可能な一意識別子 |
| --------------- | ----------------------------------------- |
| **会社** | `id`(UUID)、`domain`(推奨)、または任意のカスタム一意フィールド |
| **連絡先** | `id`(UUID)、`email`、または任意のカスタム一意フィールド |
| **ワークスペースメンバー** | `id`(UUID)、`email`(名前ではありません) |
| **カスタムオブジェクト** | `id`(UUID)、または一意としてマークされた任意のフィールド |
<Note>**推奨:** 会社には `domain`、連絡先には `email` を使用してください。 これらは人間が読みやすく、スプレッドシートで簡単に確認できます。</Note>
### 識別子の見つけ方
`id` が必要な場合:
1. 親レコードを Twenty からエクスポートする
2. エクスポートには `id` 列が含まれます
3. これらの ID を子レコードのファイルで使用する
## ステップ 4: リレーションフィールドが存在することを確認する
インポート前に、オブジェクト間のリレーションフィールドが存在することを確認します。
**確認・作成方法:**
1. **設定 → データモデル** に移動する
2. 子オブジェクト(例:連絡先)を選択する
3. 親(例:会社)を指すリレーションフィールドを探す
4. 存在しない場合は作成する:
* **+ Add field** をクリック
* **Relation** タイプを選択
* 親オブジェクトを選択
## ステップ 5: CSV ファイルを準備する
子側の CSV に、親を一意の識別子で参照する列を追加します。
### 例:連絡先を会社にリンクする
**連絡先の CSV:**
```csv
firstName,lastName,email,jobTitle,companyDomain
John,Smith,john@acme.com,CEO,https://acme.com
Jane,Doe,jane@widgets.co,CTO,https://widgets.co
Bob,Johnson,bob@techstart.io,Developer,https://techstart.io
```
`companyDomain` 列は会社のドメインを参照します。
### 形式要件
| 識別子 | 形式 | 例 |
| ---- | ----------- | -------------------------------------- |
| ドメイン | URL 形式 | `https://acme.com` |
| メール | 標準的なメールアドレス | `john@acme.com` |
| ID | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
<Warning>
**ドメインの形式が重要です!**
`https://domain.com` を使用してください(`domain.com` だけではありません)。 これは Twenty が会社のドメインを保存する方法に一致し、照合エラーを防ぎます。
</Warning>
### 重要なルール
1. **完全一致が必要** — 値は親レコードと完全に一致している必要があります
2. **一意の識別子は 1 つだけマッピング** — `companyId` と `companyDomain` の両方を含めないでください
3. **大文字小文字を区別** — `Acme.com` ≠ `acme.com`
## ステップ 6: リレーションをアップロードしてマッピングする
1. 子オブジェクト(例:連絡先)に移動
2. **⋮** → **Import records** をクリック
3. CSV ファイルをアップロード
4. フィールドマッピングのステップで:
* リレーション列(例:`companyDomain`)を見つける
* それを**会社**のリレーションフィールドにマッピングする
5. 残りのマッピングを完了する
6. エラーを確認して確定する
Twenty が各子レコードを一致する親に自動でリンクします。
## ステップ 7: インポートを確認する
インポート後:
1. いくつかの子レコード(例:連絡先)を開く
2. リレーションフィールドに正しい親(例:会社)が表示されていることを確認する
3. 親レコードを開き、関連レコードのセクションを確認する
## 避けるべき一般的なミス
| ミス | 問題 | 解決策 |
| ------------------ | ------------------------------------------- | ----------------------------- |
| **インポート順の誤り** | 会社より先に連絡先をインポートしている | 常に親を先に、次に子をインポートする |
| **ドメイン形式の誤り** | `https://acme.com` ではなく `acme.com` を使用している | `https://` を含む完全な URL 形式を使用する |
| **複数の一意フィールド** | `companyId` と `companyDomain` の両方をマッピングしている | 一意の識別子は 1 つだけマッピングする |
| **リレーションフィールドがない** | データモデルにリレーションフィールドが存在しない | インポート前に **設定 → データモデル** で作成する |
| **存在しないレコード** | 親レコードが Twenty に存在しない | 先に親レコードをインポートするか、タイプミスを確認する |
| **大文字小文字の不一致** | ファイルでは `Acme.com`、Twenty では `acme.com` | 大文字小文字が完全に一致していることを確認する |
## ワークスペースメンバーへのリンク
ワークスペースメンバー(あなたのチーム)にリンクする場合:
* 名前ではなく**メールアドレス**を使用する
* 例:`owner@yourcompany.com`、"John Smith" ではなく
```csv
taskName,assignedTo
Follow up with client,john@yourcompany.com
Review proposal,jane@yourcompany.com
```
## FAQ
<AccordionGroup>
<Accordion title="親レコードにドメインやメールがない場合はどうすればよいですか?">
次の 2 つの選択肢があります:
1. Twenty の `id` を使用する(親レコードをエクスポートして ID を取得)
2. データモデルにカスタムの一意フィールドを作成し、以前のシステムの外部 ID を保存する
</Accordion>
<Accordion title="既存レコードのリレーションを更新できますか?">
はい! 子レコードの一意の識別子(例:連絡先なら `email`)と新しいリレーションの値を含めてください。 インポートによってリレーションが更新されます。
</Accordion>
<Accordion title="多対多のリレーションをインポートできますか?">
多対多のリレーションは、現時点ではインポートに対応していません。 これは 2026 年上期に対応予定です。
</Accordion>
<Accordion title="複数のオブジェクトタイプ(例:メモを連絡先と会社の双方)にリンクできますか?">
複数のオブジェクトタイプを指すリレーションは、現時点ではインポート/エクスポートに対応していません。 これはロードマップにあります。
</Accordion>
<Accordion title="親レコードが存在しない場合はどうなりますか?">
その行に対してエラーが表示されます。 次のいずれかを行うことができます。
* 先に親レコードをインポートしてから再インポートする
* 参照値を修正する
* インポート対象からその行を削除する
</Accordion>
<Accordion title="リレーションが正しくリンクされないのはなぜですか?">
よくある原因:
* 形式の誤り(ドメインには `https://domain.com` を使用)
* 大文字小文字の不一致(綴りを正確に確認)
* 親が存在しない(先に親をインポート)
* 複数の識別子をマッピングしている(1 つだけを使用)
</Accordion>
</AccordionGroup>
<Warning>
**注意: 論理削除されたレコードも一意性の判定に含まれます。**
「not found」エラーが出るのにレコードが存在するように見える場合は、Command Menu → See deleted records を確認してください。 親が論理削除されている可能性があります。
</Warning>
## トラブルシューティング
お困りですか? 次を確認してください:
* [インポートエラーを解決する方法](/l/ja/user-guide/data-migration/how-tos/fix-import-errors)
* [リレーションのインポート機能](/l/ja/user-guide/data-migration/capabilities/import-relations)
* [一意性制約](/l/ja/user-guide/data-migration/capabilities/uniqueness-constraints)

View File

@@ -0,0 +1,289 @@
---
title: 他のCRMからの移行
description: 任意の CRM から Twenty へデータを移行するためのステップバイステップガイド。
---
## 概要
このガイドでは、任意の CRM から Twenty へデータを移行する手順を説明します。 このプロセスには、データの監査、Twenty ワークスペースの準備、現在のシステムからのエクスポート、および Twenty へのインポートが含まれます。
<Note>移行後、ビュー、ワークフロー、権限は手動で再作成する必要があります。 この構成作業のための時間を確保してください。</Note>
## ステップ 1: 現在のデータを監査する
移行は新たなスタートの好機です。 不要なデータは持ち込まないでください。
**保持するもの:**
* アクティブな連絡先と会社
* 進行中の商談やディール
* 重要なメモとアクティビティ
* 実際に使用しているカスタムフィールド
**除外するもの:**
* 古い連絡先(2年以上アクティビティがないもの)
* 重複レコード
* テストデータ
* 未使用のカスタムフィールド
## ステップ 2: データモデルをマッピングする
現在の CRM と Twenty の間のマッピングドキュメントを作成します:
| お使いの CRM | Twenty |
| ---------- | ------------------ |
| アカウント / 組織 | **会社** |
| 連絡先 / 人 | **連絡先** |
| ディール / 商談 | **商談** |
| アクティビティ | **タスク** または **メモ** |
| カスタムオブジェクト | **カスタムオブジェクト** |
**各フィールドごとに、次を記録します:**
* ソースフィールド名
* 移行先の Twenty フィールド
* 必要な形式変換(例:日付、電話番号など)
<Note>インポート中はこのマッピングドキュメントを手元に置いてください—列のマッピング時に参照します。</Note>
## ステップ 3: Twenty ワークスペースを設定する
データをインポートする前に、Twenty ワークスペースを準備します:
### カスタムオブジェクトとフィールドを作成
1. **設定 → データモデル** に移動
2. 必要なカスタムオブジェクトを作成する
3. 標準オブジェクトおよびカスタムオブジェクトにカスタムフィールドを追加する
4. フィールドの設定(一意、必須、選択肢など)を構成する
<Warning>
**インポート前にフィールドが存在している必要があります。**
CSV インポートはレコードを作成します。フィールドは作成しません。 インポート前に **設定 → データモデル** でカスタムフィールドをすべて作成してください。
</Warning>
### チームを招待
<Warning>
**重要: データをインポートする前にユーザーを招待してください。**
データにユーザー参照(アカウント所有者、担当者など)が含まれる場合、それらのユーザーはインポート前に Twenty 上に存在している必要があります。 そうでない場合、それらのリレーションはマッピングできません。
</Warning>
1. **設定 → メンバー** に移動
2. すべてのチームメンバーを招待する
3. **全員が招待を受諾するのを待つ**
4. メンバー一覧にすべてのユーザーが表示されていることを確認する
## ステップ 4: 現在の CRM からエクスポートする
現在の CRM からデータをエクスポートします:
1. 通常は設定、データ管理、管理の下にある **エクスポート** 機能を探します
2. 可能であれば **CSV 形式** でエクスポートする
3. 各オブジェクトタイプを個別にエクスポートする(会社、連絡先、商談など)
4. 移行したいすべてのフィールドを含める
**次のオブジェクトをエクスポートします(この順序で):**
1. 会社 / アカウント / 組織
2. 連絡先 / 人
3. ディール / 商談
4. メモとアクティビティ
5. カスタムオブジェクト
## ステップ 5: データをクリーンアップして整形する
エクスポートした各 CSV を表計算アプリで開き、Twenty 用に準備します。
### 重複を削除
1. 一意のフィールドで並べ替える(連絡先はメール、会社はドメイン)
2. 重複行を削除または統合する
3. Twenty にすでに重複が存在しないことを確認する
### フィールドの形式を正しく整える
| フィールドタイプ | 必須の形式 |
| ----------- | ------------------------------- |
| **ドメイン** | `https://domain.com` |
| **メール** | `name@domain.com`(一意である必要があります) |
| **日付** | `YYYY-MM-DD` |
| **電話** | 3 列: 番号、国コード、Calling Code |
| **ブール型** | `TRUE` または `FALSE`(大文字) |
| **選択フィールド** | 表示ラベルではなく API 名を使用する |
<Warning>
**ドメインの形式は重要です。**
`https://domain.com` を使用してください(`domain.com` や `www.domain.com` ではありません)。 これは Twenty の形式に一致し、メール/カレンダー同期を接続した際の重複を防ぎます。
</Warning>
すべてのフィールドタイプに関する完全な書式要件は、[CSV ファイルを準備する方法](/l/ja/user-guide/data-migration/how-tos/prepare-your-csv-files) を参照してください。
### リレーション列を追加
レコードをリンクするには(例:連絡先を会社にリンク)、親の一意の識別子を含む列を追加します。
**例:会社リンク付きの連絡先 CSV**
```csv
firstName,lastName,email,companyDomain
John,Smith,john@acme.com,https://acme.com
Jane,Doe,jane@widgets.co,https://widgets.co
```
レコードをリンクする手順の詳細は、[リレーションをインポートする方法](/l/ja/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) を参照してください。
### ユーザー参照を更新
データにユーザーの割り当て(所有者、担当者)が含まれる場合:
1. **ユーザーのメールアドレス** の列を追加する(古いシステムの ID だけでは不可)
2. ユーザーが Twenty のワークスペースに参加した際に使用したものと同じメールアドレスを使用してください。
完全な書式ガイドは、[CSV ファイルを準備する方法](/l/ja/user-guide/data-migration/how-tos/prepare-your-csv-files) を参照してください。
## ステップ 6: Twenty にインポートする
<Warning>
**インポート順は重要です!**
必ずこの順序でインポートします:
1. 最初に **会社**(依存関係なし)
2. 次に **連絡先**(会社にリンク)
3. 3 番目に **商談**(会社/連絡先にリンク)
4. **メモとタスク**(レコードにリンク)
5. **カスタムオブジェクト**(依存関係に従って)
参照する前に、親レコードが存在している必要があります。
</Warning>
### 各オブジェクトをインポート
各 CSV ファイルについて、順番に実行します:
1. Twenty の対象オブジェクトに移動します
2. **⋮ → Import records** をクリックします
3. CSV ファイルをアップロードします
4. 列をフィールドにマッピングします:
* ユーザーのメールアドレス列を適切なリレーションフィールドにマッピングします
* リレーション列(`companyDomain` など)をリレーションフィールドにマッピングします
5. UI でエラーを確認して修正します
6. インポートを確定します
7. 次のファイルに進む前に、いくつかのレコードを確認します
**詳細ガイド:**
* [会社をインポートする方法](/l/ja/user-guide/data-migration/how-tos/import-companies-via-csv)
* [連絡先をインポートする方法](/l/ja/user-guide/data-migration/how-tos/import-contacts-via-csv)
* [リレーションをインポートする方法](/l/ja/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
## ステップ 7: 大規模な移行(5 万件以上のレコード)
大規模な移行の場合:
| 件数 | 推奨アプローチ |
| -------- | ----------------- |
| 1 万件未満 | 単一の CSV インポート |
| 1 万〜5 万件 | 複数の CSV ファイルに分割する |
| 5 万件以上 | API を使用する |
**API でのインポートについて:**
* 大規模データセットでは高速で信頼性が高い
* バッチ処理に対応(1 回の呼び出しで最大 60 レコード)
* 詳細は [API でデータをインポートする方法](/l/ja/user-guide/data-migration/how-tos/import-data-via-api) を参照
## ステップ 8: 移行後のセットアップ
データのインポート後、ワークスペースの設定を完了します:
### ビューを再作成
* フィルター、並べ替え、列の構成を含む保存済みビューを設定します
* 必要なカンバンビューやカレンダービューを作成します
### ワークフローを再作成
* **設定 → ワークフロー** で自動化を再構築します
* 最も重要なワークフローから開始する
* 運用に入れる前に各ワークフローをテストします
### 役割と権限の設定
* **設定 → メンバー → 役割** で役割を設定します
* ユーザーに適切な役割を割り当てます
### メールとカレンダーの連携
* 各ユーザーは **設定 → アカウント** で自分のアカウントを接続します
* Twenty がメールを連絡先レコードと同期し始めます
* [メールとカレンダー](/l/ja/user-guide/calendar-emails/overview) を参照
### チームのトレーニング
* 新しいインターフェースを一緒に確認する
* チーム固有のプロセスを文書化する
## 一般的な問題と解決策
| 問題 | 原因 | 解決策 |
| ------------------ | ---------------- | -------------------------------------------- |
| **重複エラー** | メール/ドメインがすでに存在する | ファイルから重複を削除するか、一意の識別子を含めて既存のレコードを更新する |
| **リレーションが見つかりません** | 親レコードが存在しない | 親オブジェクトを先にインポートする(連絡先の前に会社) |
| **不足しているフィールド** | カスタムフィールドが存在しない | インポート前に **設定 → データモデル** でフィールドを作成する |
| **選択フィールドのエラー** | 表示ラベルを使用している | API 名を使用する(設定で詳細モードを有効にして確認) |
| **ユーザーのリレーションが空** | ユーザーが招待を受諾していない | データをインポートする前に、すべてのユーザーが招待を受諾していることを確認してください。 |
詳細なトラブルシューティング手順は、[インポートエラーを解決する方法](/l/ja/user-guide/data-migration/how-tos/fix-import-errors) を参照してください。
## ポスト移行チェックリスト
### データの整合性
<Check>すべてのレコードがインポートされた(ソースシステムの件数と比較)</Check>
<Check>リレーションが正常に機能している(連絡先が会社にリンク)</Check>
<Check>ユーザーの割り当てが正しくマッピングされている(所有者、担当者)</Check>
<Check>カスタムフィールドが入力されている</Check>
<Check>想定外の重複がない</Check>
### 構成
<Check>ビューを再作成済み</Check>
<Check>ワークフローを再作成しテスト済み</Check>
<Check>役割と権限を設定済み</Check>
<Check>メール/カレンダー同期を接続済み</Check>
### チームの準備状況
<Check>新しいシステムについてチームをトレーニング済み</Check>
<Check>旧 CRM のアクセス計画を決定(参照用に保持する? いつ無効化するか?)</Check>
## FAQ
<AccordionGroup>
<Accordion title="ワークフローを自動的に移行できますか?">
現時点ではできません。 ワークフローは Twenty で手動で再作成する必要があります。
</Accordion>
<Accordion title="ファイル添付はどうなりますか?">
CSV のエクスポートにはファイル添付は含まれません。 手動で再アップロードするか、API で移行するか、サポートが必要な場合は弊社チームにご連絡ください。
</Accordion>
<Accordion title="移行中に両方のシステムを稼働させておけますか?">
はい、移行が完了したことを確認するまでは、旧 CRM を稼働させておくことを推奨します。 ただし、両方の環境で新しいデータを作成しないよう注意してください。
</Accordion>
<Accordion title="移行には通常どれくらい時間がかかりますか?">
データの量と複雑さによります。 小規模な移行(1 万件未満)は数時間で完了します。 大規模な移行は、データのクリーンアップやテストを含め、数日かかる場合があります。
</Accordion>
</AccordionGroup>
## ヘルプが必要ですか?
<Tip>
移行についてサポートが必要ですか? [認定済みの Twenty パートナーを探す](https://twenty.com/partners/list?categories=SOLUTIONING\&ref=docs-migrate-crm)ことで、データ、パイプライン、ユーザーの移行を最初から最後まで任せられます。
</Tip>

View File

@@ -0,0 +1,173 @@
---
title: セルフホストからクラウドへの移行
description: Twenty のセルフホストのインスタンスを Twenty Cloud に移行するためのステップバイステップガイド。
---
## 概要
このガイドでは、Twenty のセルフホストのインスタンスから Twenty Cloud へデータを移行する手順を説明します。 クラウドのワークスペースをセットアップし、データをエクスポートしてから再インポートする流れです。
<Note>移行後、ビュー、ワークフロー、役割は手動で再作成する必要があります。 この構成作業のための時間を確保してください。</Note>
## ステップ 1: クラウドワークスペースを作成する
1. [app.twenty.com](https://app.twenty.com) にアクセスし、新しいワークスペースを作成します
2. 初期セットアップウィザードを完了します
3. 新しいワークスペースの URL を控えておきます
## ステップ 2: データモデルを再作成する
データをインポートする前に、カスタムオブジェクトとフィールドを再作成してください:
1. クラウドのインスタンスで **設定 → データモデル** に移動します
2. セルフホスト環境の設定に一致するカスタムオブジェクトを作成します
3. 標準オブジェクトおよびカスタムオブジェクトにカスタムフィールドを追加します
4. フィールドの設定(一意、必須など)を行います
<Note>参照用にセルフホスト環境のデータモデルのスクリーンショットを撮るか、両方のインスタンスを並べて開いたままにしておきましょう。</Note>
## ステップ 3: すべてのユーザーを招待する
<Warning>
**重要: データをインポートする前にユーザーを招待してください。**
ユーザーを参照するレコード(例: Account Owner フィールド)をインポートする前に、ユーザーは招待を受諾している必要があります。 ユーザーがまだ存在しない場合、それらのリレーションはマッピングできません。
</Warning>
1. クラウドのインスタンスで **設定 → メンバー** に移動します
2. セルフホストでアカウントを持っていたチームメンバー全員を招待します
3. **全員が招待を受諾するのを待ちます**
4. メンバー一覧にすべてのユーザーが表示されていることを確認します
## ステップ 4: セルフホストからデータをエクスポートする
セルフホストのインスタンスから各オブジェクトをエクスポートします:
1. 各オブジェクト(会社、連絡先、商談など)に移動します
2. 移行したい**すべての列**が表示されるようにビューを設定します
3. **⋮ → Export view** をクリックします
4. 各 CSV ファイルをわかりやすい名前で保存します(例: `companies-export.csv`)
インポート時の参照のため、**この順序でエクスポート**してください:
1. 会社
2. 人物
3. 商談
4. カスタムオブジェクト(依存関係に従って)
5. タスク、メモ
## ステップ 5: ワークスペースのメンバー参照を更新する
エクスポートした CSV には、セルフホストのインスタンスのユーザー ID が含まれています。 これらの ID はクラウドのインスタンスと一致しないため、メールアドレスに置き換える必要があります。
**ユーザー参照(Owner、Assignee など)がある各 CSV ファイルについて:**
1. CSV をスプレッドシートアプリで開きます
2. 各ユーザー ID 列の隣に新しい列を追加します(例: `accountOwnerId` の隣に `accountOwnerEmail`)
3. 各ユーザーの**メールアドレス**を入力します
4. 古い ID 列は削除しても残しても構いません(インポート時にスキップされます)
**例:**
以前:
```csv
name,domain,accountOwnerId
Acme Corp,https://acme.com,old-uuid-123
```
以降:
```csv
name,domain,accountOwnerEmail
Acme Corp,https://acme.com,john@yourcompany.com
```
<Note>クラウドのワークスペース招待を受諾した際にユーザーが使用したものと同じメールアドレスを使用してください。</Note>
## ステップ 6: インポート順序を計画する
リレーションを維持するため、正しい順序でファイルをインポートします:
1. 最初に**会社**(依存関係なし)
2. 次に**連絡先**(会社にリンク)
3. 3 番目に**商談**(会社および連絡先にリンク)
4. **カスタムオブジェクト**(依存関係に従って)
5. 最後に**タスクとメモ**(他のレコードにリンク)
リレーションの維持方法の詳細は、[リレーションをインポートする方法](/l/ja/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) を参照してください。
## ステップ 7: クラウドにインポートする
各 CSV ファイルについて、順番に実行します:
1. クラウドのインスタンスで対象のオブジェクトに移動します
2. **⋮ → Import records** をクリックします
3. CSV ファイルをアップロードします
4. 列をフィールドにマッピングします:
* ユーザーのメールアドレス列を適切なリレーションフィールドにマッピングします
* その他の列は通常どおりマッピングします
5. エラーを確認して修正します
6. インポートを確認します
7. 次のファイルに進む前に、いくつかのレコードを確認します
## ステップ 8: 設定を再作成する
データのインポート後、次の項目を手動で再作成します:
### ビュー
* フィルター、並べ替え、列の構成を含む保存済みビューを再作成します
* カンバンビューやカレンダービューを設定します
### ワークフロー
* **設定 → ワークフロー** で自動化を再作成します
* 運用に入れる前に各ワークフローをテストします
### 役割と権限
* **設定 → メンバー → 役割** で役割を設定します
* ユーザーに適切な役割を割り当てます
### 統合
* 各ユーザーのメールおよびカレンダーの同期を再接続します
* 新しい API キーで各種 API 連携を再設定します
## ポスト移行チェックリスト
<Check>すべてのデータが正常にインポートされている</Check>
<Check>オブジェクト間のリレーションが正しく機能している</Check>
<Check>ユーザーの割り当て(Owner、Assignee)が正しくマッピングされている</Check>
<Check>ビューを再作成済み</Check>
<Check>ワークフローを再作成し、テスト済み</Check>
<Check>役割と権限を構成済み</Check>
<Check>メール/カレンダーの同期を再接続済み</Check>
<Check>API 連携を新しいキーで更新済み</Check>
## FAQ
<AccordionGroup>
<Accordion title="ワークフローを自動的に移行できますか?">
現時点ではできません。 ワークフローはクラウドのインスタンスで手動で再作成する必要があります。
</Accordion>
<Accordion title="ファイルの添付や画像はどうなりますか?">
CSV のエクスポートにはファイルの添付は含まれません。 添付ファイルは手動で再アップロードするか、API で移行するか、大規模な移行については弊社チームにご連絡ください。
</Accordion>
<Accordion title="移行中に両方のインスタンスを稼働させておけますか?">
はい、クラウドへの移行が完了したことを確認するまでは、セルフホストのインスタンスを稼働させておくことを推奨します。 ただし、両方の環境で新しいデータを作成しないようご注意ください。
</Accordion>
<Accordion title="ユーザーがまだ招待を受諾していない場合はどうなりますか?">
そのユーザーを参照するレコードはインポートに失敗するか、リレーションが空になります。 データをインポートする前に、すべてのユーザーが招待を受諾していることを確認してください。
</Accordion>
</AccordionGroup>
## ヘルプが必要ですか?
<Tip>
大規模または複雑なワークスペースを移行しますか? 移行作業を最初から最後まで任せられる、[認定済みの Twenty パートナー](https://twenty.com/partners/list?categories=HOSTING\&ref=docs-migrate-cloud)を利用しましょう。 *(または、私たちのチームを CC してください: [contact@twenty.com](mailto:contact@twenty.com)。)*
</Tip>

View File

@@ -0,0 +1,267 @@
---
title: CSV ファイルを準備する
description: Twenty へのインポート用にデータをフォーマットするための、完全なステップバイステップガイド。
---
## 概要
このガイドは、インポートを成功させるための CSV ファイルの準備方法を順を追って説明します。 エラーを避けるために、次の手順に従ってください。
## ステップ 1: ファイル要件を確認する
開始する前に、ファイルが次の要件を満たしていることを確認してください。
| 要件 | 詳細 |
| ------------ | --------------------- |
| **形式** | CSV、XLSX、または XLS |
| **サイズ上限** | 1 ファイルあたり 10,000 レコード |
| **エンコーディング** | UTF-8 推奨 |
| **構造** | ファイルごとに 1 つのオブジェクトタイプ |
<Note>10,000 レコードを超えるデータセットは、複数のファイルに分割するか、[API インポート](/l/ja/user-guide/data-migration/how-tos/import-data-via-api)を使用してください。</Note>
## ステップ 2: サンプルファイルをダウンロードする
**これは最も重要なステップです。** サンプルファイルには、Twenty が想定する正確な列名と形式が示されています。
1. オブジェクトビュー(People、Companies など)に移動します。
2. 「**⋮**」→「**Import records**」をクリックします。
3. 「**Download sample file**」をクリックします。
4. このファイルをテンプレートとして使用してください。
<Note>**プロのヒント:** 代わりに、既存のレコードを少数エクスポートします。 これにより、データのあるべきフォーマットの実例が得られ、インポート時に列名が自動的にマッピングされます。</Note>
## ステップ 3: 重複値を削除する
Twenty は一部のフィールドに一意性を強制します。 重複はインポートエラーの原因になります。
| オブジェクト | 一意のフィールド |
| -------------- | ------------------------ |
| **People** | `id`, `email` |
| **会社** | `id`, `domain` |
| **カスタムオブジェクト** | `id` に加え、一意に設定した任意のフィールド |
**インポート前に:**
1. スプレッドシートを一意フィールド(email または domain)で並べ替えます。
2. 重複行を削除または統合します。
3. Twenty に既に存在する重複がないか確認します。
<Warning>**ソフト削除されたレコードも一意性の判定に含まれます。** Command Menu → See deleted records にあるレコードは重複エラーの原因になります。 それらを完全に削除するか、復元して更新してください。</Warning>
## ステップ 4: 各フィールドタイプを正しくフォーマットする
フィールドタイプごとに必要な形式が異なります。 完全なリファレンスは次のとおりです。
### テキストフィールド
* 特別なフォーマットは不要です
* 先頭/末尾の空白は自動的にトリムされます
### メールフィールド
* 有効なメール形式である必要があります: `name@domain.com`
* 一意である必要があります(ファイル内および Twenty 内に重複がないこと)
* 追加のメールについては、**Emails / Additional Emails** 列で次の形式を使用します:
```
["jane@twenty.com","jane.doe@twenty.com"]
```
### ドメインフィールド
* **推奨形式**: `https://domain.com`
* これはメールボックス/カレンダーの同期で使用される形式と一致します(重複を防止)
* 両方の列を入力してください。
* **Domain / Domain Label**: `domain.com`
* **Domain / Domain URL**: `https://domain.com`
* ファイル内および Twenty 内で一意である必要があります
### 電話番号フィールド
電話番号は、複数の列を必要とする**ネストされたフィールド**です:
| 列 | 例 |
| --------------------------------------- | ------------ |
| **Phones / Primary Phone Number** | `4159095555` |
| **Phones / Primary Phone Country Code** | `US` |
| **Phones / Primary Phone Calling Code** | `+1` |
### 住所フィールド
住所は複数列からなる **入れ子のフィールド** です(空欄のままでよい列もあります):
* **Address / Address 1**: 住所の 1 行目(番地など)
* **Address / Address 2**: 住所の 2 行目(任意)
* **Address / City**: 市区町村名
* **Address / State**: 州または都道府県
* **Address / Country**: 国名
* **Address / Post Code**: 郵便番号(ZIP コード)
### 日付フィールド
ファイル全体で形式を統一してください:
* `YYYY-MM-DD`(推奨): `2024-03-15`
* ISO 8601: `2024-03-15T10:30:00Z`
### 数値フィールド
* 数値のみ(テキスト不可)
* 小数点はピリオドを使用: `1234.56`
* 桁区切りを使用しない(`1,234.56` は不可)
### 通貨フィールド
通貨は **2 列を要する入れ子のフィールド** で、**両方に入力が必要** です:
| 列 | 例 |
| --------------------- | --------- |
| **Amount / Amount** | `1234.56` |
| **Amount / Currency** | `USD` |
### ブール値フィールド
大文字を使用: `TRUE` または `FALSE`
<Warning>小文字の `true` や `false` は動作しません。</Warning>
### 選択フィールド
表示ラベルではなく、オプションの **API 名** を使用してください。
**API 名の見つけ方:**
1. **設定 → データモデル** に移動する
2. オブジェクトとフィールドを選択
3. **高度なモード** を有効化(右下のトグル)
4. API 名をコピー(例: `OPTION_1`。"Option 1" ではありません)
<Note>新しい選択肢は自動的に作成されません。 インポート前に **設定 → データモデル** で追加してください。</Note>
### 複数選択フィールド
API 名を配列形式で記述します:
```
["VALUE1","VALUE2"]
```
### 配列フィールド
JSON 配列形式を使用します:
```
["value1","value2"]
```
### 評価フィールド
次の形式を使用: `RATING_1`、`RATING_2`、`RATING_3`、`RATING_4`、または `RATING_5`
### リンク/URL フィールド
両方の列を入力:
* **Links / Link Label**: `Twenty`
* **Links / Link URL**: `https://twenty.com`
二次リンクは **Links / Secondary Links** 列を使用します:
```
[{"url":"https://twenty.com","label":"Twenty"}]
```
### JSON フィールド
有効な JSON 形式を使用します:
```
{"key":"value","key2":"value2"}
```
### ID フィールド
* **任意**: 指定がない場合、Twenty が ID を自動生成します
* **形式**: UUID(例: `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)
* **用途**: 新規作成ではなく既存レコードを更新する場合は ID を含めます
## 手順5: リレーション列を追加(レコードをリンクする場合)
レコードを他のオブジェクトにリンクするには(例: People を Companies にリンク)、関連レコードの一意の識別子を含む列を追加します。
**例**: People を Companies にリンク
People の CSV に列を追加:
```
firstName,lastName,email,companyDomain
John,Smith,john@acme.com,https://acme.com
Jane,Doe,jane@widgets.co,https://widgets.co
```
**リレーションに関する重要なルール:**
* 親レコードは事前に Twenty に存在している必要があります
* ラベルではなく **ドメイン URL** 形式(`https://domain.com`)を使用してください
* 一意の識別子は 1 つだけマッピングしてください(`companyId` と `companyDomain` を両方含めない)
* ワークスペースメンバーには **メールアドレス**(氏名ではなく)を使用してください
<Warning>
**インポート順序は重要です!**
「1」側を「多」側より先にインポートしてください:
1. **会社** を先に
2. **People** を 2 番目(会社参照付き)
3. **商談** を 3 番目に
参照する前に親レコードが存在している必要があります。
</Warning>
詳細な手順については、[リレーションをインポートする方法](/l/ja/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)を参照してください。
## 手順6: Twenty にフィールドが存在することを確認
インポートで作成されるのはフィールドではなくレコードです。 インポートしたいフィールドはすべて、あらかじめデータモデルに存在している必要があります。
**インポート前に:**
1. **設定 → データモデル** に移動する
2. 対象オブジェクトを選択する
3. 必要なカスタムフィールドを作成する
4. フィールド名の正確な表記を控える(列ヘッダーと一致している必要があります)
## 手順7: 最終チェックリスト
ファイルをアップロードする前に、次を確認してください:
<Check>ファイル形式が CSV、XLSX、または XLS である</Check>
<Check>ファイルのレコード数が 10,000 未満である</Check>
<Check>エンコーディングが UTF-8 である</Check>
<Check>(People)では重複するメールがなく、(Companies)では重複するドメインがない</Check>
<Check>日付の形式が全体で統一されている</Check>
<Check>ドメインが `https://domain.com` 形式である</Check>
<Check>ブール値フィールドは `TRUE` または `FALSE`(大文字)を使用している</Check>
<Check>選択フィールドは表示ラベルではなく API 名を使用している</Check>
<Check>すべてのカスタムフィールドが 設定 → データモデル に存在する</Check>
<Check>子レコードより先に親レコードをインポートしている</Check>
<Check>リレーション列が既存レコードを参照している</Check>
## 避けるべき一般的なミス
| 誤り | 解決策 |
| -------------------------------- | --------------------------------------- |
| `TRUE` の代わりに `true` を使用している | ブール値は大文字である必要があります |
| 選択フィールドで表示ラベルを使用している | 設定で API 名を確認して使用する |
| Companies より先に People をインポートしている | 常に親オブジェクトから先にインポートする |
| 通貨フィールドで通貨コードが欠けている | Amount と Currency の両方の列を入力する |
| ドメインの形式が誤っている | `https://domain.com` を一貫して使用する |
| リレーションで複数の一意フィールドをマッピングしている | 1 つだけをマッピングする(domain か id のどちらかで、両方は不可) |
## 次のステップ
ファイルの準備ができました! 次へ:
* [会社をインポート](/l/ja/user-guide/data-migration/how-tos/import-companies-via-csv)(これを先にインポート)
* [コンタクトをインポート](/l/ja/user-guide/data-migration/how-tos/import-contacts-via-csv)
* [インポートエラーを修正](/l/ja/user-guide/data-migration/how-tos/fix-import-errors)

View File

@@ -0,0 +1,198 @@
---
title: インポートで既存のレコードを更新する
description: CSV インポートを使用したレコードの一括更新のための完全なステップバイステップガイド。
---
## 概要
多数のレコードを一度に更新する必要がありますか? 1 件ずつ編集する代わりに、CSV インポートを使って既存のレコードを一括更新しましょう。
**ユースケース:**
* 複数の連絡先の役職を更新する
* 会社情報を一括で変更する
* 新しいカスタムフィールドにデータを追加する
* 多数のレコードにわたるデータの誤りを修正する
## 仕組み
既存のレコードと一致する**一意の識別子**を含むファイルをインポートすると、Twenty は重複を作成せず、そのレコードを更新します。
| 一意の識別子が... | Twenty は... |
| ------------- | ------------------------ |
| 既存のレコードに一致する | 既存のレコードを**更新** |
| どのレコードにも一致しない | 新しいレコードを**作成** |
| ファイルに含まれていない | 新しいレコードを**作成**(ID は自動生成) |
<Warning>
**複数選択フィールドはマージではなく上書きされます。**
あるレコードで `Option A` と `Option B` が選択されている状態で `["Option C"]` をインポートすると、インポート後はそのレコードには `Option C` のみが残ります。 インポートは以前の選択をすべて置き換えます—追加はされません。
既存の値を保持するには、インポートにすべて含めてください: `["Option A","Option B","Option C"]`
</Warning>
## ステップ 1: 現在のデータをエクスポートする
まず、更新したいレコードをエクスポートします。
1. オブジェクト(連絡先、会社など)に移動します。
2. **必要な列を追加** — 更新したいフィールドを表示するには **Options → Fields** をクリックします
3. **必要に応じてフィルター** — 更新対象のレコードのみに絞り込みます
4. **⋮** → **Export view** をクリック
5. CSV ファイルを保存します
<Note>**なぜ最初にエクスポートするのか?** エクスポートされたファイルは正しい形式で、一意の識別子を含み、インポート時に自動でマッピングされます。</Note>
### エクスポートされる内容
* 現在のビューで表示されているすべての列
* レコードの一意の識別子(`id`、`email`、`domain`)
* 変更可能な現在のフィールド値
## ステップ 2: CSV ファイルを編集する
エクスポートしたファイルを表計算アプリ(Excel、Google スプレッドシートなど)で開きます。
1. **一意の識別子の列は残す** — `id`、`email`、`domain` は削除しないでください
2. 変更したい列の値を**更新**します
3. **更新が不要な列は削除**(任意ですが、その方がすっきりします)
4. **一意の識別子の値は変更しないでください** — 変更すると Twenty が新しいレコードを作成します
### 例:役職の更新
**エクスポートしたファイル:**
```csv
id,email,firstName,lastName,jobTitle
550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Sales Rep
550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Sales Rep
550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Sales Rep
```
**編集後:**
```csv
id,email,firstName,lastName,jobTitle
550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Account Executive
550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Senior Account Executive
550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Account Executive
```
<Warning>
**一意の識別子の値は変更しないでください。**
`john@acme.com` を `john.smith@acme.com` に変更すると、Twenty は既存のレコードを更新せずに新しいレコードを作成します。
</Warning>
## ステップ 3: 更新したファイルをインポートする
1. 対象のオブジェクトに移動します
2. **⋮** → **Import records** をクリック
3. 編集した CSV ファイルをアップロードします
4. **一意の識別子がマッピングされていることを確認** — `email`、`domain`、または `id` が正しくマッピングされているか検証します
5. フィールドのマッピングを確認します
6. エラーがないか確認します
7. **Confirm** をクリック
Twenty は一意の識別子でレコードを照合し、新しい値で更新します。
## 適切な一意の識別子の選び方
| オブジェクト | 推奨 | 代替 | ノート |
| -------------- | ---------- | ---- | ----------------- |
| **連絡先** | `メール` | `id` | メールアドレスは人間が読みやすい |
| **会社** | `ドメイン` | `id` | ドメインは人間が読みやすい |
| **カスタムオブジェクト** | 任意の一意フィールド | `id` | カスタムの一意フィールドを使用する |
<Note>**一意の識別子は 1 つだけ使用してください。** `email` と `id` の両方をマッピングしないでください。 これは混乱やエラーの原因になります。</Note>
### カスタムの一意フィールドを使用する
一意としてマークされたカスタムフィールド(他システムの外部 ID など)がある場合:
1. そのフィールドをエクスポートとインポートに含めます
2. インポート時にマッピングします
3. Twenty はそのフィールドで照合します
## ステップ 4: 更新内容を確認する
インポート後:
1. 更新されたレコードをいくつか開きます
2. 変更が反映されていることを確認します
3. 重複レコードが作成されていないことを確認します
## ファイルに含まれていないフィールドはどうなりますか?
**インポートファイルに含まれていないフィールドは変更されません。**
| ファイルに含まれている項目... | 結果 |
| -------------------------- | -------------------------------- |
| `email`、`jobTitle` | `jobTitle` のみ更新され、他のフィールドはそのままです |
| `email`、`jobTitle`、`phone` | `jobTitle` と `phone` が更新されます |
つまり、変更したいフィールド(+一意の識別子)だけを含めれば十分です。
## 更新と新規レコードの併用
同じインポートで既存レコードの更新と新規作成の両方が可能です。
```csv
email,firstName,lastName,jobTitle
john@acme.com,John,Smith,Senior Manager ← Updates existing (email matches)
newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match)
```
## 避けるべき一般的なミス
| ミス | 問題 | 結果 | 解決策 |
| -------------- | --------------------------------------------------------- | ------------------- | -------------------------------- |
| **一意の識別子の変更** | `john@acme.com` を `john.smith@acme.com` に変更した | 更新ではなく新しいレコードが作成される | 一意の識別子は変更しない |
| **複数の一意フィールド** | `email` と `id` の両方をマッピングしている | 照合の競合が発生する可能性 | 一意の識別子は 1 つだけマッピングする |
| **一意の識別子なし** | ファイルには `firstName`、`lastName`、`jobTitle` しかない | すべての行で新しいレコードが作成される | `email`、`domain`、または `id` を必ず含める |
| **大文字小文字の不一致** | ファイルは `John@acme.com` だが、Twenty では `john@acme.com` になっている | 新しいレコードを作成する | 正確な値を取得するには Twenty からエクスポートする |
## FAQ
<AccordionGroup>
<Accordion title="一部のレコードがまだ存在しない場合はどうなりますか?">
一意の識別子が既存レコードと一致しないレコードは新規レコードとして作成されます。 これにより、同じインポートで更新と新規作成の両方が可能になります。
</Accordion>
<Accordion title="フィールドの値をクリア(空に)できますか?">
はい、CSV のセルを空白のままにしてください。 インポートにより、既存レコードのそのフィールド値がクリアされます。
</Accordion>
<Accordion title="インポートに含めなかったフィールドはどうなりますか?">
インポートファイルにないフィールドは、既存レコード上で変更されません。 含めたフィールドのみが更新されます。
</Accordion>
<Accordion title="リレーションフィールド(Company など)を更新できますか?">
はい! リレーションの一意の識別子(例:`companyDomain`)を含め、リレーションフィールドにマッピングします。 リレーションが更新されます。
</Accordion>
<Accordion title="どのレコードが更新され、どれが作成されるかはどのようにわかりますか?">
インポートの確認ステップで、一意の識別子の一致に基づき、更新と作成の件数を Twenty が表示します。
</Accordion>
<Accordion title="一括更新を元に戻せますか?">
自動で元に戻す機能はありません。 一括更新の前に、バックアップとしてデータをエクスポートすることをお勧めします。
</Accordion>
</AccordionGroup>
## ベストプラクティス
1. **まずエクスポート** — 正しい形式を確実にするため、必ずエクスポートから始める
2. **更新前にバックアップ** — 大量の変更を行う前にデータをエクスポートする
3. **少数のレコードでテスト** — 大規模に実行する前に、まず 5~10 件で更新を試す
4. **人間が読みやすい識別子を使用** — `id` よりも `email` と `domain` の方が検証しやすい
5. **必要な列のみを含める** — 列が少ないほどエラーの可能性が減ります
## トラブルシューティング
お困りですか? 次を確認してください:
* [インポートエラーを解決する方法](/l/ja/user-guide/data-migration/how-tos/fix-import-errors)
* [一意性制約](/l/ja/user-guide/data-migration/capabilities/uniqueness-constraints)
* [フィールドマッピングのリファレンス](/l/ja/user-guide/data-migration/capabilities/field-mapping)

View File

@@ -0,0 +1,83 @@
---
title: データ移行
description: CSVファイルまたはAPIを使用してCRMデータをインポートおよびエクスポートできます。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## インポート方法
Twenty では、データのインポート方法として主に次の2つをサポートしています。
| メソッド | 最適用途 | 件数上限 |
| ------------ | ------------- | --------------- |
| **CSVインポート** | 標準的な移行や定期的な更新 | 1ファイルあたり10,000件 |
| **APIインポート** | 大規模な移行や自動化 | 無制限 |
<Note>非常に大きなデータセット(数十万件のレコード)の場合は、API を使用してください。 必要に応じて、当社の[実装パートナー](/l/ja/user-guide/getting-started/capabilities/implementation-services)がこれらのスクリプトの実行を支援できます。</Note>
## CSVインポートの基本
CSV、XLSX、または XLS ファイルを使用して、任意のオブジェクトのデータをインポートできます。 各ファイルには、**1種類のオブジェクトのみ**を含めてください(例:People レコードのみ)。
<Note>**インポート前にフィールドが存在している必要があります。** CSV をアップロードするとレコードは作成されますが、フィールドは作成されません。 カスタムフィールドが必要な場合は、まず**Settings → Data Model**で作成してください。</Note>
### 手順
1. データをインポートする対象のオブジェクトに移動します。
2. 右上の**⋮**アイコン(コマンドメニュー)をクリックし、**Import records**をクリックします。
3. テンプレートファイルをダウンロードし、データが想定された形式になっていることを確認します。
4. フォーマット済みのCSVファイルをアップロードします。
5. 列を Twenty のフィールドにマッピングします。
6. エラー(黄色でハイライト)を確認し、UI 上で直接編集して修正します。
7. インポートを確定します。
### オブジェクト間のリレーションをインポートする
CSV インポート機能を使用して、オブジェクト間のリレーションをインポートできます。 関連オブジェクトは、一意のフィールドを使って参照します。使用できる例:`id`、People と Workspace Members では `email`、Companies では `domain`、そのほかのオブジェクトではデータモデルで一意に設定した任意のフィールド。
<Note>**削除済みレコードも一意性に含まれます。** ソフト削除されたレコード(Command Menu → See deleted records で表示可能)も一意性チェックに含まれます。 削除済みレコードと同じ一意値のレコードをインポートすると、その削除済みレコードが復元されます。</Note>
<Warning>
**インポートの順序が重要です!**
関連オブジェクトをインポートする場合は、次の順序でファイルをアップロードしてください。
1. **Companies** を最初に(リレーションの「one」側)
2. **連絡先**を次に(companyId を介して会社にリンク)
3. **商談**を 3 番目に(会社/連絡先にリンク)
4. リレーションのある **Custom objects** は最後に
なぜですか? 1対多のリレーションでは、「one」側が参照される前に存在している必要があります。 例えば、その会社のIDを持つ Person をインポートする前に、Company レコードが存在している必要があります。
</Warning>
手順の詳細については、[こちらの記事](/l/ja/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)を参照してください。
## データをエクスポート
バックアップ、レポーティング、または移行のためにワークスペースのデータをエクスポートします。
### 手順
1. エクスポートしたいオブジェクトに移動します。
2. 必要な列を含むようにビューを設定します。
3. **⋮** → **Export view** をクリックします。
4. CSV ファイルを保存します。
<Note>**表示されている列のみがエクスポートされます。** CSV ファイルには、現在のビューに表示されている列だけが含まれます。 どのデータを含めるかを制御するために、エクスポート前に列を追加または非表示にしてください。</Note>
<Note>**エクスポートの上限**: 1回のエクスポートにつき最大20,000件。</Note>
## 権限
データのインポートとエクスポートには特定の権限が必要です。
* **Import**: "Import CSV" 権限が必要
* **Export**: "Export CSV" 権限が必要
これらの権限がない場合は、ワークスペース管理者に連絡してください。
## 次のステップ
* [CSV ファイルの準備](/l/ja/user-guide/data-migration/how-tos/prepare-your-csv-files)
* [オブジェクト間の関係をインポート](/l/ja/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
* [大規模データセットをAPIでインポート](/l/ja/user-guide/data-migration/how-tos/import-data-via-api)