8.

FuelPHP (PHP フレームワーク) 完全ガイド (Legacy)

編集
この記事の要点
  • FuelPHP は 2011 年登場の PHP フレームワーク。Dan Horrigan らが CodeIgniter から派生して立ち上げ
  • HMVC (Hierarchical Model-View-Controller) アーキテクチャを採用し、モジュール再利用性が強み
  • PHP 5.3+ 対応、軽量・高速を売りに 2010 年代前半に日本で人気
  • 現状: 開発が停滞(1.8.2 が 2018 年、以降メジャーリリースなし)
  • 2.0 計画は事実上頓挫。後継 RC 版もあるが採用は推奨されない
  • 新規開発では Laravel / Symfony 一択。FuelPHP は Legacy 保守のみ
  • 移行先: Laravel(ルーティング・ORM が近い)が最も自然

FuelPHP の概要

FuelPHP は 2011 年、CodeIgniter コア開発者の Dan HorriganPhil SturgeonJelmer SchreuderHarro Verton らが立ち上げた PHP フレームワークです。CodeIgniter の薄さと軽さを継承しつつ、HMVC アーキテクチャと PHP 5.3+ の新機能(名前空間など)を取り入れ、当時の Laravel / CakePHP / Symfony と並ぶ選択肢として日本市場でも一定のシェアを獲得しました。

歴史と現状(重要)

出来事
20111.0 リリース、HMVC 注目
20131.7、日本でブーム期
20151.8 / FuelPHP 2.0 計画発表
20181.8.2 リリース(実質最後の安定版)
2019〜主要メンテナ離脱、コミット停滞
2020 以降2.0 リリース実現せず、保守モード
2024〜新規採用は事実上ゼロ、Laravel 移行が主流

結論: 新規プロジェクトに FuelPHP を採用してはいけません。既存システムの保守・改修案件のみで関わる場面となります。

HMVC アーキテクチャ

HMVC (Hierarchical MVC) は、MVC を入れ子状に呼び出せる構造です。コントローラから別のコントローラをサブリクエストとして呼び出し、その結果(HTML 断片)を組み合わせて 1 ページを構成できます。

<?php
// app/classes/controller/page.php
class Controller_Page extends Controller_Template {
    public function action_index() {
        // メインコンテンツ
        $this->template->title = 'トップ';
        $this->template->content = View::forge('page/index');

        // サブコントローラを HMVC で呼出
        $this->template->sidebar = Request::forge('news/latest')->execute()->response_body();
        $this->template->footer  = Request::forge('common/footer')->execute()->response_body();
    }
}

// app/classes/controller/news.php
class Controller_News extends Controller {
    public function action_latest() {
        $news = Model_News::find('all', ['order_by' => ['created_at' => 'desc'], 'limit' => 5]);
        return View::forge('news/latest', ['news' => $news]);
    }
}

これによりサイドバー・フッターなどの共通要素をモジュール化でき、Symfony Bundle や Laravel パッケージ的な再利用性を提供しました。

インストール(参考)

# Composer で
composer create-project fuel/fuel my-app

# 旧来の oil コマンドで
curl https://get.fuelphp.com/oil | sh
oil create my-app

# 動作確認
cd my-app
php -S localhost:8080 -t public

ディレクトリ構造

fuel/
├── app/                       アプリ本体
│   ├── classes/
│   │   ├── controller/        コントローラ
│   │   ├── model/             モデル
│   │   └── view/              ビュー
│   ├── config/                設定
│   ├── lang/                  i18n
│   └── tasks/                 CLI タスク
├── core/                      フレームワーク本体
├── packages/                  パッケージ (auth, orm, parser ...)
├── modules/                   モジュール (HMVC 用)
└── public/                    ドキュメントルート
    └── index.php

ORM(Eloquent ライク)

<?php
// app/classes/model/user.php
class Model_User extends Orm\Model {
    protected static $_properties = ['id', 'email', 'name', 'created_at', 'updated_at'];
    protected static $_observers  = ['Orm\Observer_CreatedAt', 'Orm\Observer_UpdatedAt'];

    protected static $_has_many = [
        'posts' => ['model_to' => 'Model_Post', 'key_from' => 'id', 'key_to' => 'user_id'],
    ];
}

// 利用
$user = Model_User::find(1);
$user = Model_User::find('first', ['where' => [['email', '=', 'a@example.com']]]);
$users = Model_User::find('all', ['order_by' => ['created_at' => 'desc']]);

$new = Model_User::forge(['email' => 'b@example.com', 'name' => 'B']);
$new->save();

// リレーション
foreach ($user->posts as $post) {
    echo $post->title;
}

API は Laravel Eloquent と類似ですが、メソッド名と細部の使い勝手が異なります。

Tasks(CLI バッチ)

<?php
// app/tasks/cleanup.php
namespace Fuel\Tasks;

class Cleanup {
    public static function run() {
        \Cli::write('クリーンアップを開始します');
        \DB::query('DELETE FROM sessions WHERE expires_at < NOW()')->execute();
        \Cli::write('完了', 'green');
    }
}

// 実行
// php oil refine cleanup

FuelPHP の問題点(2026 時点)

  • PHP 8.x 公式サポートなし。コミュニティパッチで動かす状態
  • セキュリティパッチが事実上止まっている
  • Composer エコシステムから孤立気味(fuel/ パッケージ自体が古い)
  • Stack Overflow / 日本語情報も 2018 年以降は希少
  • 採用情報がほぼゼロ
  • Laravel への移行コストは中規模アプリで 3〜6 か月見るのが現実的

Laravel への移行ロードマップ

  1. 業務要件と画面・API を棚卸し
  2. テストカバレッジを上げる(Migration 安全網)
  3. DB スキーマはほぼそのまま流用可(必要なら Laravel Migration 化)
  4. FuelPHP のルーティング → routes/web.php + routes/api.php
  5. Controller を Laravel 形式に書き換え(DI / FormRequest 活用)
  6. ORM: Fuel ORM → Eloquent(リレーション定義のマッピング)
  7. View: 独自テンプレ → Blade
  8. Tasks → Artisan command
  9. 段階的移行のためにリバースプロキシで URL ベース分割もあり

FAQ

Q: FuelPHP 2.0 はもう出ない?
A: 主要メンテナは公式に「リリース予定なし」とアナウンスはしていませんが、リポジトリ活動から実質開発停止です。期待しないのが安全。

Q: 既存システムを保守するうえで気を付けることは?
A: (1) PHP バージョン上げ時の互換性検証、(2) Composer 依存パッケージの脆弱性、(3) Session / Cookie の Secure / SameSite 設定、(4) HTTPS 強制リダイレクト、(5) 入力バリデーション強化。

Q: 採用案件にあるのですが学ぶ価値は?
A: 保守要員としての需要はあります。ただしLaravel に並行して習熟することを強く推奨します。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Laravel
  2. CakePHP
  3. Symfony
  4. Zend Framework (PHP フレームワーク)
  5. DietCake
  6. phalcon
  7. CodeIgniter
  8. FuelPHP
  9. Slim
  10. Flight
  11. Yii
  12. Silex

最近更新/作成されたページ