# FlowEngine とは何ですか？

FlowEngine は、NocoBase 2.0 で新たに導入された、フロントエンド向けのノーコード・ローコード開発エンジンです。モデル（Model）とフロー（Flow）を組み合わせることで、フロントエンドのロジックを簡素化し、再利用性と保守性を向上させます。また、Flowの持つ設定可能な特性を活用することで、フロントエンドのコンポーネントやビジネスロジックに、ノーコードでの設定・オーケストレーション機能を提供します。

## なぜ FlowEngine と呼ばれるのですか？

FlowEngine では、コンポーネントのプロパティやロジックは静的に定義されるのではなく、**フロー（Flow）** によって駆動・管理されるためです。

*   **Flow** はデータストリームのように、ロジックを順序付けられたステップ（Step）に分解し、コンポーネントに段階的に作用します。
*   **Engine** は、これがフロントエンドのロジックとインタラクションを駆動するエンジンであることを表しています。

したがって、**FlowEngine = フローによって駆動されるフロントエンドロジックエンジン** となります。

## Model とは何ですか？

FlowEngine において、Model はコンポーネントの抽象的なモデルであり、以下の役割を担います。

*   コンポーネントの**プロパティ（Props）と状態**を管理します。
*   コンポーネントの**レンダリング方法**を定義します。
*   **Flow**をホストし、実行します。
*   **イベントディスパッチ**と**ライフサイクル**を一元的に処理します。

言い換えれば、**Model はコンポーネントの論理的な頭脳**であり、コンポーネントを静的な要素から、設定可能でオーケストレーション可能な動的なユニットへと変化させます。

## Flow とは何ですか？

FlowEngine において、**Flow は Model にサービスを提供する論理的なフロー**です。
その目的は以下の通りです。

*   プロパティやイベントのロジックをステップ（Step）に分解し、フローのように順次実行すること。
*   プロパティの変更だけでなく、イベント応答も管理すること。
*   ロジックを**動的、設定可能、再利用可能**にすること。

## これらの概念をどのように理解すればよいですか？

**Flow** を**水の流れ**として想像してみてください。

*   **Step は水流が通るノードのようなものです**
    各Stepは小さなタスク（例：プロパティの設定、イベントのトリガー、APIの呼び出し）を実行します。これは、水が水門や水車を通過する際に、それに応じた作用が起こるのと同様です。

*   **流れは順序付けられています**
    水は決められた経路で上流から下流へ、すべてのStepを順に通過します。同様に、Flow内のロジックも定義された順序で実行されます。

*   **流れは分岐・結合できます**
    一本の水流が複数の小さな流れに分かれたり、一つに合流したりできるのと同様に、Flowも複数のサブフローに分解したり、より複雑なロジックチェーンに結合したりできます。

*   **流れは設定可能で制御可能です**
    水流の方向や流量は水門で調整できます。Flowの実行方法やパラメータも、設定（stepParams）を通じて制御できます。

例えのまとめ

*   **コンポーネント**は水車のようです。水流に押されて初めて回転します。
*   **Model** はこの水車の土台とコントローラーであり、水流を受け取り、その動作を駆動する役割を担います。
*   **Flow** はその水流であり、各Stepを順に通過し、コンポーネントを絶えず変化させ、応答を促します。

したがって、FlowEngine では：

*   **Flow はロジックが水の流れのように自然に流れるようにします**。
*   **Model はコンポーネントをこの流れの担い手であり、実行者とします**。