軽量PHPフレームワーク「Fat-Free Framework」を触ってみた

tomon
2025-07-24
2025-07-24

長く使えるPHPのWebアプリケーションフレームワークを探している中で、「Fat-Free Framework(F3)」に出会いました。

フレームワーク選定の背景

フレームワークを選ぶ際には、以下のような要素が影響します:

・フレームワークのサポート期間
・対応するPHPのバージョン
・OSのサポート期間
・OSが対応するPHPのバージョン(またはPHPそのもののサポート期間)

これらの要因により、選んだフレームワークが将来的に「サポート外」となってしまう可能性があります。
開発に十分な予算があり、定期的なアップデートも計画されている場合はさほど問題にはなりません。
しかし、限られた予算で長期的に運用したい場合、「できるだけ長くメンテナンスなしで使える」フレームワークを選ぶのは非常に重要です。

そこで見つけたのが Fat-Free Framework(F3)

公式サイト:
https://fatfreeframework.com/3.9/home

F3は次のような特徴を掲げています:

・強力かつ使いやすいPHPマイクロフレームワーク
・フル機能のツールキットを搭載
・わずか約90KBの軽量コードベース
・学習・使用・拡張が容易

システム要件(v3.9)

・PHP 7.2以上
→ これは多くの環境(例:AlmaLinux 8標準のPHP 7.2)でも問題なく動作するため、導入しやすいです。
・サポート終了日:公式には未定(記載なし)
→ サポート期限が明示されていない点は少々不安ですが、軽量でコード量も少ないため、最悪自分でメンテナンス可能かもしれません。

主な機能

F3には次のような基本機能があります:

ルーティング
テンプレートエンジン
ORMによるDB操作
プラグインによる拡張
※フォームバリデーション機能は標準搭載されていませんが、以下のようなプラグインで対応可能です:
https://github.com/ikkez/f3-validation-engine

実際に動かしてみる

公式のユーザーガイド:
https://fatfreeframework.com/3.9/user-guide

●Composer のインストール(rootユーザー)

wget https://getcomposer.org/installer -O composer-installer.php
php composer-installer.php --filename=composer --install-dir=/usr/bin

●プロジェクト作成

cd public_html
mkdir f3 && cd f3
composer require bcosca/fatfree-core

●.htaccess の作成(public_html/f3/.htaccess)

RewriteEngine On

RewriteRule ^(app|dict|ns|tmp)/|\.ini$ - [R=404]

RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

●Hello World を表示してみる
public_html/f3/index.php

<?php

require 'vendor/autoload.php';
$f3 = \Base::instance();

$f3->route('GET /', function() {
    echo 'Hello, world!';
});

$f3->run();

ブラウザで https://xxx.xxx.xxx.xxx/f3/ にアクセスすると、「Hello, world!」と表示されればOKです。

データベース連携・テンプレート表示の例

usersテーブル(MySQL)

mysql> select * from users;
+----+--------------+----------------------+-----------------+
| id | name         | mail                 | address         |
+----+--------------+----------------------+-----------------+
|  1 | 日本太郎     | nihotaro@example.com | 東京都港区      |
|  2 | 大阪次郎     | osaka@example.com    | 大阪市北区      |
|  3 | 神戸三郎     | kobe@example.com     | 神戸市西区      |
|  4 | 奈良四郎     | nara@example.com     | 奈良市          |
+----+--------------+----------------------+-----------------+

●index.php

<?php

require 'vendor/autoload.php';
$f3 = \Base::instance();

$db = new DB\SQL(
    'mysql:host=localhost;port=3306;dbname=dbname',
    'dbuser',
    'dbpass'
);

$f3->set('result', $db->exec(
    'SELECT * FROM users WHERE id = ?',
    $f3->get('GET.userID')
));

echo Template::instance()->render('userlist.htm');

$f3->run();
?>

●userlist.htm


<repeat group="" value="">
    <span></span>
    <span></span>
    <span></span>
    <span></span>
</repeat>

以下にアクセスすると、該当ユーザーのデータが表示されます:

https://xxx.xxx.xxx.xxx/f3/?userID=3

最後に

Fat-Free Frameworkをざっくり触ってみました。
情報が少なめで、GitHub上でも目立ったスター数ではありませんが、当初の目的(軽量で長く使えるフレームワーク)には近いかもしれません。

すぐに「これが最適解だ」とは言えませんが、システム開発の条件次第では十分選択肢に入ると思います。
気になった方はぜひ一度試してみてください。