# ブロック拡張の概要

NocoBase 2.0では、ブロック拡張の仕組みが大幅に簡素化されました。開発者は、対応する **FlowModel** 基底クラスを継承し、関連するインターフェースメソッド（主に `renderComponent()` メソッド）を実装するだけで、ブロックを素早くカスタマイズできます。

## ブロックの分類

NocoBaseでは、ブロックが3つのカテゴリに分類され、設定画面でグループごとに表示されます。

- **データブロック（Data blocks）**：`DataBlockModel` または `CollectionBlockModel` を継承するブロック
- **フィルターブロック（Filter blocks）**：`FilterBlockModel` を継承するブロック
- **その他のブロック（Other blocks）**：`BlockModel` を直接継承するブロック

> ブロックのグループ分けは、対応する基底クラスによって決定されます。分類ロジックは継承関係に基づいており、追加の設定は不要です。

## 基底クラスの説明

システムは、拡張のために4つの基底クラスを提供しています。

### BlockModel

**基本ブロックモデル**は、最も汎用的なブロック基底クラスです。

- 純粋な表示のみでデータに依存しないブロックに適しています。
- **その他のブロック** グループに分類されます。
- 個別化されたシナリオに適用できます。

### DataBlockModel

**データブロックモデル（データテーブルにバインドしない）**は、カスタムデータソースを持つブロック向けです。

- データテーブルに直接バインドされず、データ取得ロジックをカスタマイズできます。
- **データブロック** グループに分類されます。
- 外部APIの呼び出し、カスタムデータ処理、統計グラフなどのシナリオに適用できます。

### CollectionBlockModel

**コレクションブロックモデル**は、データテーブルにバインドする必要があるブロック向けです。

- データテーブルモデルの基底クラスへのバインドが必要です。
- **データブロック** グループに分類されます。
- リスト、フォーム、カンバンボードなど、特定のデータテーブルに明確に依存するブロックに適用できます。

### FilterBlockModel

**フィルターブロックモデル**は、フィルター条件を構築するためのブロックです。

- フィルター条件を構築するためのモデル基底クラスです。
- **フィルターブロック** グループに分類されます。
- 通常、データブロックと連携して動作します。

## 基底クラスの選択方法

基底クラスを選択する際は、以下の原則に従ってください。

- **特定のデータテーブルにバインドする必要がある場合**：`CollectionBlockModel` を優先的に選択します。
- **カスタムデータソースを使用する場合**：`DataBlockModel` を選択します。
- **フィルター条件を設定し、データブロックと連携する場合**：`FilterBlockModel` を選択します。
- **どのように分類すればよいか不明な場合**：`BlockModel` を選択します。

## クイックスタート

カスタムブロックの作成は、たった3つのステップで完了します。

1. 対応する基底クラス（例：`BlockModel`）を継承します。
2. `renderComponent()` メソッドを実装し、Reactコンポーネントを返します。
3. プラグインにブロックモデルを登録します。

詳細な例については、[ブロックプラグインの作成](./write-a-block-plugin) を参照してください。