はじめに

Flexagon は軽量で高性能な PHP Web フレームワークです。

複雑な抽象化よりも PHP 本来のシンプルさを重視し、規約を最小限に抑えることで、アプリケーションをすばやく構築できます。

  • シンプルで柔軟なルーティング --- ファイル構成がそのまま URL 構成に対応するため、ルーティングは直感的でわかりやすくなります。
  • 独立したリクエスト実行 --- 各リクエストは不要な状態を残さないため、動作は安定しており予測可能です。
  • シンプルで PHP らしい開発 --- 独自のテンプレート言語を導入せず、PHP 本来の形のまま開発できます。

なぜ Flexagon なのか?

PHP を知っていれば、すぐに始められます。
ページは .php ファイルであり、ビューは PHP と HTML で直接記述し、使い慣れた SQL をそのまま利用できます。開発を始める前に、ルーティング構文やサービスコンテナ、クエリ DSL を覚える必要はありません。

ランタイム依存関係はゼロです。
Flexagon は PHP 8.3 と pdo、openssl、json 拡張モジュールだけで動作します。フレームワークを使うためだけに、何十ものサードパーティパッケージをインストールする必要はありません。

小さく、高速です。
同一環境において、フレームワークのブートストラップにかかるのは 1.09 ms、メモリ 2 MB、読み込みファイル 15 個です。フレームワーク本体も 39 個の PHP ファイル、7,148 行のコードとコンパクトに保たれています。

Flexagon 3.5.0 Laravel 13.26.1
ランタイム依存関係 0 77 パッケージ
インストールサイズ 532KB(PHAR 237KB) 42MB
ブートストラップ時間 1.09ms 12.85ms
ブートストラップ時のメモリ 2MB 20MB
ブートストラップ時の読み込みファイル数 15 336

デプロイがシンプルです。
フレームワーク全体を 237 KB の単一 PHAR ファイルとしてデプロイできます。デプロイ先のサーバーに Composer や個別のキャッシュウォーミング手順は必要ありません。

設計原則

URL はファイルパスに直接対応する

/user/profile へのリクエストは、そのまま public/user/profile.php に対応します。

管理すべきルーティングテーブルはありません。ファイルを作成すれば URL が生まれ、ファイルを移動すれば URL も一緒に移動します。URL を見るだけで、どのファイルが実行されるのかを簡単に把握できます。

スキーマの正はデータベースにある

最初のクエリ実行時に、DAO は DESCRIBE を実行してカラム、主キー、auto_increment のメタデータを読み取り、そのリクエストの残りの処理で再利用します。

データベースにすでに定義されているスキーマを、PHP 側で重複して定義する必要はありません。スキーマが変更されても、同期を保つべき個別のマッピング定義は存在しません。

グローバル設定は明示的に保つ

設定は静的クラス _Global に集約されています。

開発者と設定の間に DI コンテナやサービスロケーターが介在しないため、設定がどこにあり、どの値が使われているのかを容易に確認できます。IDE で _Global:: と入力すれば、利用可能な設定を自動補完で確認できます。

リクエストごとのオーバーヘッドを最小限に

フレームワークのブートストラップは、定数の定義、オートローダーの登録、設定ファイルの読み込みだけで構成されています。

Flexagon は不要なオブジェクトやサービスを事前に生成せず、DataSourceManager は各リクエスト内でデータベース接続を再利用します。