
Cejuno Frameworkは、XMLで定義されたWorkflowやEntityの情報をもとに、ページ処理・タスク実行・UI生成といった一連の動作を自動的に組み立てて実行する構造駆動型のフレームワークです。本記事では、その内部処理がどのように進むのかを、全体の流れに沿って簡潔に解説します。
ここで扱うのは詳細実装ではなく、
- XMLがどのように読み込まれ
- どのクラスが生成され
- どの順番で処理が実行され
- ページ表示まで到達するのか
内部では多くのクラスが連携して動作していますが、中心となる流れは驚くほどシンプルです。Systemクラスによる初期処理、Workflowの解析、WorkProcessとTaskの実行、そしてPageViewerによる表示。これらが一つの統一された構造のもとで動作することで、Cejuno Frameworkは高度な自動化と再現性を実現しています。
本記事を読むことで、Cejuno Frameworkが「XMLの構造定義をどのように実際の動作へ変換しているか」を俯瞰できるようになります。詳細な仕様や各クラスの実装は別記事で個別に解説しますので、まずは全体像を把握するための入り口としてご覧ください。
ページファイル
HTTPリクエストによって呼び出されたページファイルが行う処理は、次の2つだけです。
- セットアップファイルのロード
- システムの実行
非常にシンプルで、どの画面も同一のスタイルで処理を開始できるようになっています。
実は、WordPressのようにURLマッピングを用いて「ページファイルそのものを無くす」構成も検討しました。しかし、Cejunoではプロジェクトごとに柔軟な拡張や制御が可能であることを重視し、最終的には“ページファイルを配置する”という構造を採用しました。
ページファイルは極めて薄い存在ですが、必要に応じて細かなコントロールを加えられる“逃げ道”として機能します。Cejunoの思想である「ずぼらで優雅」を損なわず、なおかつ自由度を確保するための最適な落としどころといえます。
1-1. ページファイルPHP
<?php
require("./setup.inc");cejuno\efw\EfwSystem::execute();
?>
Cejuno Frameworkの内部処理フロー(概要)
Cejuno Frameworkでは、HTTPリクエストを受けたページファイルから EfwSystem::execute() が呼び出されることで、すべての処理が統一された流れで開始されます。内部では複数のクラスが役割ごとに連携し、環境準備からWorkflowの実行、ページ表示までを自動的に進めます。
最初に PfwSystem::launch() が実行され、フレームワーク全体の基盤が整えられます。ここではディレクトリ設定、環境設定ファイルのロード、必要なライブラリの読み込み、リソース初期化、Webシステムの起動といった処理が順に行われます。
続いて EfwSystem::doAction() により、XMLで定義されたWorkflowが読み込まれます。WorkflowFactoryがXMLファイルを解析し、WorkflowManager、WorkProcessManager、TaskManagerといった各種管理オブジェクトが生成されます。これにより、実行すべきWorkProcessやTaskの一覧が構築され、業務処理が順番に実行されます。
TaskManagerがTaskリストを取得し、各Taskの execute() を順に実行することで、Entity生成、入力検証、画像アップロードなどの個々の処理が進められます。
すべてのTaskの処理が完了すると、PageViewerが起動し、ユーザーエージェントや内部URI、Workflow設定を基にテンプレートファイルを解決し、最終的なページ表示が行われます。
このように、Cejuno Frameworkでは「環境の準備」「Workflow構造の復元」「Taskの実行」「ページ表示」が明確に分離され、かつ自動的に連動することで、高い再現性と拡張性を持った処理フローを実現しています。
かなり簡素化していますが、内部処理フロー(概要)を紹介します。
2-1. 内部処理フロー(概要)PHP
では、根幹となるプログラムを簡単に記述すると以下のような具合です。(かなり簡素化)
EfwSystem::execute();
PfwSystem::launch();
System::launch();
System::setupDirectory();
System::loadProperty(%ENV_FILE%);
System::loadLibraries();
Resource::initialize();
WebSystem::start();
EfwSystem::doAction();
$factory = new WorkflowFactory(%PAGE_URI%);
$workflowManager = WorkflowFactory::parse(%PAGE_URI%.".xml");
:
$processManager = WorkflowFactory::parseProcess(PROCESS_NAME);
$taskManager = WorkflowFactory::parseTaskList();
$workflowManager -> doAction();
:
$workflowManager -> $processManager -> execute();
:
$processManager -> $taskManager -> execute();
:
$list = $taskManager -> getTaskList();
:
foreach($list as $task)
$task -> execute();
$pageViewer -> viewPage();