---
pkg: "@nocobase/plugin-action-import-pro"
title: "インポート Pro 操作"
description: "インポート Pro 操作：高度なインポート機能、カスタムテンプレート、マルチテーブルインポート、データ検証をサポートします。"
keywords: "インポート Pro,ImportPro,高度なインポート,カスタムテンプレート,インターフェースビルダー,NocoBase"
---
# インポート Pro

## 紹介

インポート Pro プラグインは、通常のインポート機能に加えて、さらに強化された機能を提供します。

## インストール

このプラグインは非同期タスク管理プラグインに依存しています。使用する前に、非同期タスク管理プラグインを有効にする必要があります。

## 機能強化

![20251029172052](https://static-docs.nocobase.com/20251029172052.png)



- 非同期インポート操作に対応しており、独立したスレッドで実行されるため、大量のデータをインポートできます。

![20251029172129](https://static-docs.nocobase.com/20251029172129.png)

- 高度なインポートオプションに対応しています。


## 利用ガイド

### 非同期インポート

インポートを実行すると、インポート処理はユーザーの手動設定なしに、独立したバックグラウンドスレッドで実行されます。ユーザーインターフェースでは、インポート操作を開始した後、右上に現在実行中のインポートタスクが表示され、リアルタイムでタスクの進捗状況を確認できます。

![index-2024-12-30-09-21-05](https://static-docs.nocobase.com/index-2024-12-30-09-21-05.png)

インポートが完了した後、インポートタスクからインポート結果を確認できます。

#### 並行処理について

非同期タスクの並行実行によるシステムリソースの消費を制限したい場合は、以下の環境変数を使用して制御できます。

- `ASYNC_TASK_MAX_CONCURRENCY` 

非同期タスクの並行実行数を制限します。デフォルト値は 3 です。

- `ASYNC_TASK_CONCURRENCY_MODE` 

並行実行の制限モードを指定します。選択可能な値は `app` と `process` で、デフォルトは `app` です。

この環境変数の値が `app` の場合、各サブアプリケーションの最大並行非同期タスク実行数を `ASYNC_TASK_MAX_CONCURRENCY` で指定した値に制限します。

この環境変数の値が `process` の場合、プロセス内のすべてのサブアプリケーションの並行タスク実行数の合計が `ASYNC_TASK_MAX_CONCURRENCY` で指定した値を超えないように制限します。

- `ASYNC_TASK_WORKER_MAX_OLD` と `ASYNC_TASK_WORKER_MAX_YOUNG`

非同期タスクを実行する worker スレッドに割り当て可能な最大オールド世代ヒープメモリ（MB）とヤング世代ヒープメモリ（MB）を制限します。

#### パフォーマンスについて

大規模なデータインポートのパフォーマンスを評価するため、さまざまなシナリオ、フィールドタイプ、トリガー設定で比較テストを実施しました（サーバーやデータベースの構成によって結果は異なる場合がありますので、あくまで参考としてください）：

| データ量 | フィールドタイプ | インポート設定 | 処理時間 |
|------|---------|---------|---------|
| 100万件 | 文字列、数値、日付、メールアドレス、長文テキスト | ・ワークフローをトリガー：なし<br>・重複識別子：なし | 約1分 |
| 50万件 | 文字列、数値、日付、メールアドレス、長文テキスト、多対多 | ・ワークフローをトリガー：なし<br>・重複識別子：なし | 約16分|
| 50万件 | 文字列、数値、日付、メールアドレス、長文テキスト、多対多、多対一 | ・ワークフローをトリガー：なし<br>・重複識別子：なし | 約22分 |
| 50万件 | 文字列、数値、日付、メールアドレス、長文テキスト、多対多、多対一 | ・ワークフローをトリガー：非同期トリガー通知<br>・重複識別子：なし | 約22分 |
| 50万件 | 文字列、数値、日付、メールアドレス、長文テキスト、多対多、多対一 | ・ワークフローをトリガー：非同期トリガー通知<br>・重複識別子：重複を更新、5万件の重複データあり | 約3時間 |

上記のパフォーマンステスト結果と既存の設計に基づき、影響要因について以下の説明と提案があります：

1. **重複レコードの処理メカニズム**：「**重複レコードを更新**」または「**重複レコードのみを更新**」オプションを選択すると、システムはレコードを 1 件ずつ検索・更新するため、インポート効率が著しく低下します。Excel ファイルに不要な重複データが含まれている場合、インポート速度にさらに大きな影響を与えるため、インポート前に Excel ファイル内の不要な重複データをクリーンアップ（例：専門の重複排除ツールを使用）してからシステムにインポートすることをおすすめします。これにより、無駄な時間を省くことができます。

2. **リレーションフィールドの処理効率**：システムがリレーションフィールドを処理する際、関連付けを 1 件ずつ検索する実装方式を採用しているため、大量データのシナリオではパフォーマンスのボトルネックとなる可能性があります。シンプルなリレーション構造（例：2 つのテーブル間の一対多関連）の場合、段階的なインポート戦略をおすすめします。まずメインテーブルの基本データをインポートし、完了後にテーブル間のリレーションを確立します。ビジネス要件によりリレーションデータを同時にインポートする必要がある場合は、上記の表のパフォーマンステスト結果を参考に、インポート時間を適切に計画してください。

3. **ワークフローの処理メカニズム**：大規模なデータインポートのシナリオでワークフロートリガーを有効にすることは推奨されません。主な理由は以下の 2 点です：
   - インポートタスクのステータスが 100% と表示されても、すぐに終了するわけではありません。システムはワークフロー実行計画の作成に追加の時間を必要とします。この段階では、システムはインポートされた各データに対応するワークフロー実行計画を生成し、インポートスレッドを占有しますが、すでにインポートされたデータの使用には影響しません。
   - インポートタスクが完全に完了した後、大量のワークフローが並行実行されることでシステムリソースが逼迫し、システム全体の応答速度やユーザー体験に影響を与える可能性があります。

上記 3 つの影響要因については、今後さらなる最適化を検討していきます。

### インポート設定

#### インポートオプション - ワークフローをトリガーするかどうか

![20251029172235](https://static-docs.nocobase.com/20251029172235.png)

インポート時にワークフローをトリガーするかどうかを選択できます。このオプションをチェックし、そのデータテーブルがワークフロー（データテーブルイベント）にバインドされている場合、インポートは各行に対してワークフローの実行をトリガーします。

#### インポートオプション - 重複レコードの識別

![20251029172421](https://static-docs.nocobase.com/20251029172421.png)

このオプションをチェックし、対応するモードを選択すると、インポート時に重複レコードが識別され、処理されます。

インポート設定のオプションはデフォルト値として適用されます。管理者は、アップロード者がこれらのオプション（ワークフローをトリガーするオプションを除く）を変更することを許可するかどうかを制御できます。

**アップロード者の権限設定**

![20251029172516](https://static-docs.nocobase.com/20251029172516.png)


- アップロード者がインポートオプションを変更することを許可する

![20251029172617](https://static-docs.nocobase.com/20251029172617.png)

- アップロード者がインポートオプションを変更することを禁止する

![20251029172655](https://static-docs.nocobase.com/20251029172655.png)

##### モードの説明

- 重複レコードをスキップ：「識別フィールド」の内容に基づいて既存のレコードを検索し、レコードがすでに存在する場合はその行をスキップします。存在しない場合は、新しいレコードとしてインポートします。
- 重複レコードを更新：「識別フィールド」の内容に基づいて既存のレコードを検索し、レコードがすでに存在する場合はそのレコードを更新します。存在しない場合は、新しいレコードとしてインポートします。
- 重複レコードのみを更新：「識別フィールド」の内容に基づいて既存のレコードを検索し、レコードがすでに存在する場合はそのレコードを更新します。存在しない場合はスキップします。

##### 識別フィールド

システムはこのフィールドの値に基づいて、行が重複レコードであるかどうかを識別します。


- [連携ルール](/interface-builder/actions/action-settings/linkage-rule)：ボタンの動的な表示 / 非表示
- [ボタンの編集](/interface-builder/actions/action-settings/edit-button)：ボタンのタイトル、タイプ、アイコンの編集
