syncfusion-react-treegrid について
Syncfusion React TreeGrid の構築とカスタマイズを支援する、階層型テーブルを扱う開発者向けスキルです。データバインドから編集、エクスポート、アクセシビリティまでの設定と実践例をまとめています。
主な機能
- 01階層データと展開・折りたたみ
- 02列・行・セルの設定
- 03編集・ソート・フィルター・検索
- 04仮想スクロールと無限スクロール
- 05PDF・Excel・CSVへのエクスポート
- 06アクセシビリティとローカライズの案内
活用シーン
- 01組織図やファイル階層の表示
- 02TreeGridへの編集と検証の追加
- 03大規模な階層データの処理
- 04階層レコードのファイル出力
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ syncfusion/ react-ui-components-skills --skill syncfusion-react-treegridインストール後、Claude Code で/syncfusion-react-treegridを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/accessibility.mdadaptive-view.mdaggregates.mdcell.mdclipboard.mdcolumn-chooser.mdcolumn-menu.mdcolumn-reorder.mdcolumn-resize.mdcolumn.mdcommand-column.mdcontext-menu.mddata-binding.mdediting.mdevents-reference.mdexcel-export.mdfiltering.mdfrozen-rows-columns.mdglobalization.mdloading-animation.mdmodule.mdpaging.mdpdf-export.mdperformance-optimization.mdprint.mdprogrammatic-api.mdrow.mdscrolling.mdsearching.mdselection.md詳細
Syncfusion React TreeGrid
Syncfusion の React TreeGrid コンポーネントを実装およびカスタマイズするための包括的なスキルです。TreeGrid は、自己参照型の階層データを展開/折りたたみ機能を備えた表形式で可視化し、仮想スクロールなどのエンタープライズ機能や、包括的なエクスポートオプションを提供します。
目次
このスキルを使用する場面
次のような場合に、このスキルを使用します。
- 階層データやツリー構造のデータ(組織図、ファイルシステム、部品表)を表示する
- 適切なデータバインディングと書式設定で列を構成する
- データ編集(セル、行、ダイアログ、バッチ、テンプレートモード)を実装する
- 並べ替え、フィルタリング、検索機能を追加する
- 行やセルの操作(選択、テンプレート、結合)を処理する
- 仮想スクロールや無限スクロールでパフォーマンスを最適化する
- ページングとスクロールの方式を構成する
- データを PDF、Excel、CSV 形式でエクスポートする
- 状態の永続化と集計を実装する
- テーマとスタイルで外観をカスタマイズする
- アクセシビリティと国際化(RTL、ローカライズ)に対応する
TreeGrid の概要
TreeGrid は、自己参照型の階層データを表示するために最適化されており、次の機能を備えています。
- 折りたたみ可能な行の自動展開/折りたたみ機能
- エンタープライズ機能:仮想スクロール、集計、状態の永続化
- モバイルや小さな画面に対応するアダプティブ UI
- 包括的なエクスポート:PDF、Excel、CSV 形式
- 完全なアクセシビリティ:WCAG 準拠、キーボードナビゲーション、ARIA サポート
- 国際化:RTL サポート、ロケールのカスタマイズ
データ構造のルール
ルール 1:階層データでは childMapping が必須です
重要度:🔴 重大 — これがないとグリッドを展開/折りたたみできません
要件:
// ✅ REQUIRED - Must match data property name exactly
<TreeGridComponent
dataSource={data}
childMapping='subtasks'>
<ColumnsDirective>
{/* Columns */}
</ColumnsDirective>
</TreeGridComponent>
// ❌ WRONG - Will not work
<TreeGridComponent
dataSource={data}>
{/* No childMapping = No expansion possible */}
</TreeGridComponent>
データ形式:
// ✅ CORRECT - childMapping matches 'subtasks' property
const data = [
{
TaskID: 1,
TaskName: 'Parent',
subtasks: [ // Must match childMapping value exactly
{ TaskID: 2, TaskName: 'Child' }
]
}
];
例外:フラットな親子構造には idMapping + parentIdMapping を使用します。
// Alternative: Flat structure with parent IDs
<TreeGridComponent
dataSource={flatData}
idMapping='TaskID'
parentIdMapping='ParentID'
hasChildMapping='isParent'>
</TreeGridComponent>
ルール 2:データ型の一致が必須です
重要度:🟠 重要 — 型の不一致はレンダリングや並べ替えの問題を引き起こします
要件:
// ✅ CORRECT - Type matches column definition
const data = [
{
TaskID: 1, // number type
TaskName: 'Planning', // string type
StartDate: new Date(), // Date object for date columns
}
];
// Column definition must match data types
<ColumnsDirective>
<ColumnDirective field='TaskID' headerText='ID' type='number'></ColumnDirective>
<ColumnDirective field='TaskName' headerText='Task' type='string'></ColumnDirective>
<ColumnDirective field='StartDate' headerText='Date' type='date' format='yMd'></ColumnDirective>
</ColumnsDirective>
// ❌ WRONG - Type mismatch
const data = [
{
TaskID: '1', // String instead of number
StartDate: '02/03/2024' // String instead of Date object
}
];
Props の完全なリファレンス
📄 プロパティとメソッド: references/programmatic-api.md
📄 イベントリファレンス 📖 references/events-reference.md
- イベントの完全なリファレンスガイド
- データイベント(actionBegin、actionComplete、actionFailure)
- 編集イベント(cellEdit、cellSave、beforeEdit)
- 選択イベント(rowSelected、rowDeselected、cellSelected)
- 展開/折りたたみイベント
- 列イベント(ドラッグ、ドロップ、サイズ変更、非表示、表示)
- 行イベントとユーティリティ
ドキュメントのナビゲーションガイド
データバインディング
- ローカルとリモートのデータソース
- 自己参照型の親子関係
- DataManager の統合
- 初期展開状態の ExpandStateMapping
- ネストされたオブジェクトの複雑なデータバインディング
列の構成
- 列の定義とフィールドのマッピング
- ツリー列のインデックス設定
- データ型と書式設定
- 列のテンプレートとカスタムレンダリング
- ヘッダーとスタイル設定
- 外部キー列
行の操作
- 行テンプレートとカスタムレンダリング
- 行の高さの設定
- 行の結合
- ネストされたコンテンツの詳細テンプレート
- 行のドラッグ&ドロップ
- インデントとインデント解除の操作
セルの操作
- セル編集
- セルのテンプレート、スタイル、属性
- セルの選択
- セルの書式設定
編集
- セル編集モード
- 行編集モード
- ダイアログ編集
- バッチ編集
- テンプレート編集
- 検証ルールとカスタムバリデーター
- コマンド列の編集
- サーバー側での永続化
並べ替え
- 単一列および複数列での並べ替え
- 初期の並べ替え順序の設定
- カスタムの並べ替え比較関数
- テンプレートを使用した並べ替え
- プログラムによる並べ替え
フィルタリング
- フィルターバーモード
- フィルターメニューモード
- Excel 風のフィルタリング
- カスタムフィルター
- プログラムによるフィルタリング
- フィルターテンプレート
検索
- すべての列を対象としたグローバル検索
- 検索結果のハイライト表示
- プログラムによる検索
- テンプレートを使用した検索
選択
- 行の選択(単一および複数)
- セルの選択
- チェックボックスによる選択
- 選択モードの設定
- プログラムによる選択
- 選択変更イベント
表示とレイアウト(パフォーマンスと表示)
📄 ページング 📖 references/paging.md
- ページャーの設定とオプション
- ページサイズの設定
- 初期ページの設定
- ページャーテンプレートのカスタマイズ
- プログラムによるページネーション
📄 スクロール 📖 references/scrolling.md
- 垂直および水平スクロール
- スクロール高さの設定
- スクロール位置の制御
- ヘッダーの固定
- レスポンシブスクロール
📄 行と列の固定 📖 references/frozen-rows-columns.md
- ヘッダー行の固定
- 列の固定
- 固定方向
- 列のロック
- IsFrozen プロパティの使用
📄 仮想スクロールと無限スクロール 📖 references/virtual-scrolling-infinite-scrolling.md
- 大規模なデータセット向けの仮想スクロール
- 無限スクロールの設定
- 仮想スクロール時の行の高さ
- ViewportIndex と ViewportStartIndex
- 仮想スクロールによるパフォーマンスの最適化
集計
- 標準集計(Sum、Average、Min、Max、Count)
- カスタム集計
- フッター集計
- グループ集計
- 子データの階層集計
状態の永続化
📖 references/state-persistence.md
- グローバル状態の永続化
- ローカル状態の永続化
- ExpandState の追跡
- 並べ替え、フィルター、ページングの永続化
- 再読み込み時の状態復元
ツールバー
- 組み込みツールバー項目
- カスタムツールバー項目
- ツールバー項目の種類(Button、Separator、Dropdown)
- ツールバー項目のクリック処理
- ツールバーテンプレートのカスタマイズ
コンテキストメニュー
- 組み込みコンテキストメニュー項目
- カスタムコンテキストメニュー項目
- メニュー項目のクリック処理
- コピー/編集/削除操作
- ヘッダーのコンテキストメニュー
アダプティブビュー
- 小さい画面向けのアダプティブ UI
- 全画面ダイアログ
- 水平方向の行表示
- レスポンシブな列の調整
- モバイル向けの最適化
読み込みアニメーション
📖 references/loading-animation.md
- 読み込みインジケーターの表示
- カスタム読み込みスピナー
- 読み込み状態の管理
- スピナーアニメーションの制御
エクスポートと印刷
📄 PDF エクスポート 📖 references/pdf-export.md
- PDF エクスポートの設定
- エクスポートオプション(列、形式)
- ヘッダーとフッター
- ページの向きとサイズ
- サーバーサイドでのエクスポート
- 階層データのエクスポート
📄 Excel エクスポート 📖 references/excel-export.md
- Excel エクスポートの設定
- エクスポートオプション(列、書式設定)
- エクスポート時のセルのスタイル設定
- ヘッダーとフッター
- サーバーサイドでのエクスポート
- 階層レベルのエクスポート
📄 印刷 📖 references/print.md
- 印刷の設定
- カスタムレイアウトでの印刷
- 特定範囲の印刷
- 階層レベルの印刷
- 印刷プレビュー
クリップボード
- セルの内容をクリップボードにコピー
- 行全体のコピー
- 貼り付け操作
- レベルを含む階層のコピー
- クリップボードイベントの処理
列の機能(高度)
📄 列の並べ替え 📖 references/column-reorder.md
- 列のドラッグ&ドロップによる並べ替えを有効にする
- 特定の列が並べ替えられないようにする
- 並べ替えイベントとコールバック
- プログラムによる列の並べ替え
📄 列のサイズ変更 📖 references/column-resize.md
- 列のドラッグによるサイズ変更を有効にする
- コンテンツに合わせて列を自動調整する
- 列幅の制約(最小/最大)
- サイズ変更イベント
- プログラムによる幅の変更
- 列幅の保存/復元
📄 列メニュー 📖 references/column-menu.md
- 組み込みの列メニュー項目
- メニューからの並べ替え、フィルタリング、列の選択
- カスタムメニュー項目
- メニューイベントとハンドラー
- 条件付きメニュー項目
📄 列選択メニュー 📖 references/column-chooser.md
- 列の表示/非表示を切り替える
- 列選択ダイアログの設定
- プログラムによる列の表示/非表示
- 列の表示状態イベント
- 列の表示状態の保存/復元
📄 コマンド列 📖 references/command-column.md
- 組み込みのコマンドボタン(編集、削除、保存、キャンセル)
- カスタムコマンドボタン
- コマンドクリックハンドラー
- アイコンのカスタマイズ
- 行アクションのパターン
サーバー連携
📖 references/server-integration.md
- DataManager を使用したリモートデータバインディング
- サーバー側の CRUD 操作
- サーバー側のフィルタリングと並べ替え
- サーバー側のページング
- カスタムのリクエスト/レスポンス処理
- エラー処理の方針
- バッチ操作
検証パターン
📖 references/validation-patterns.md
- 列の検証ルール
- カスタム検証ロジック
- フィールド間の検証
- 非同期検証(API 呼び出し)
- サーバー側の検証
- ダイアログフォームの検証
- 条件付き検証
- エラーメッセージの表示
パフォーマンスの最適化
📖 references/performance-optimization.md
- 大規模なデータセット(10 万行以上)向けの仮想スクロール
- キャッシュを使用した無限スクロール
- バンドルサイズの最適化
- 不要な機能の無効化
- サーバー側操作の最適化
- メモ化とレンダリングの最適化
- テンプレートの最適化
- イベントハンドラーの最適化
- ベンチマークとパフォーマンスの監視
- パフォーマンスチェックリスト
カスタマイズ
📖 references/styling-appearance.md
- CSS クラスのカスタマイズ
- テーマの選択(Material、Bootstrap、Fluent、Tailwind)
- CSS 変数の上書き
- コンポーネント固有のスタイル設定
- ダークモードのサポート
- 行のスタイル設定
- セルのスタイル設定
グローバリゼーション
- 国際化(i18n)
- UI テキストのローカライズ(l10n)
- 右から左への(RTL)表示のサポート
- ロケールに応じた日付の書式設定
- ロケールに応じた数値の書式設定
- 通貨のローカライズ
アクセシビリティ
- WCAG 2.1 レベル AA 準拠
- キーボード操作(すべてのショートカット)
- ARIA 属性とスクリーンリーダーのサポート
- 展開/折りたたみのキーボードショートカット
- 編集時のキーボード操作
- 選択用ショートカット
クイックスタートの例
import React from 'react';
import { TreeGridComponent, ColumnsDirective, ColumnDirective, Inject, Page } from '@syncfusion/ej2-react-treegrid';
import { DataManager, UrlAdaptor } from '@syncfusion/ej2-data';
interface ITreeData {
TaskID?: number;
TaskName?: string;
parentID: number | null;
Children?: ITreeData[];
}
export default function App() {
const data: ITreeData[] = [
{
TaskID: 1,
TaskName: 'Planning',
parentID: null,
Children: [{ TaskID: 2, TaskName: 'Plan timeline', parentID: 1 }]
}
];
return (
<TreeGridComponent
dataSource={data}
childMapping="Children"
treeColumnIndex={1}
height="auto"
allowPaging={true}
>
<ColumnsDirective>
<ColumnDirective field="TaskID" headerText="Task ID" width={80} />
<ColumnDirective field="TaskName" headerText="Task Name" width={160} />
</ColumnsDirective>
<Inject services={[Page]} />
</TreeGridComponent>
);
}
コア設定
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
dataSource | Array | DataManager | [] | TreeGrid のデータソース |
childMapping | string | null | 子レコードのプロパティ名(例:「Children」) |
idMapping | string | null | 一意の ID のプロパティ名(フラットデータ) |
parentIdMapping | string | null | 親 ID のプロパティ名(フラットデータ) |
hasChildMapping | string | null | 遅延読み込みインジケーターのプロパティ |
treeColumnIndex | number | 0 | ツリー展開アイコンを表示する列のインデックス |
expandStateMapping | string | null | 初期展開状態のプロパティ |