長く使える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上でも目立ったスター数ではありませんが、当初の目的(軽量で長く使えるフレームワーク)には近いかもしれません。
すぐに「これが最適解だ」とは言えませんが、システム開発の条件次第では十分選択肢に入ると思います。
気になった方はぜひ一度試してみてください。