はじめに

FuelPHPは2011年にリリースされたPHPフレームワークです。

同じくPHPフレームワークであるCodeIgniterを開発したメンバーが中心となって開発・運営しています。

フルスタックフレームワークでありながらも動きが高速で人気が高いFuelPHPについて、特徴や機能、使い方を説明します。


FuelPHPの特徴

HMVCアーキテクチャ

FuelPHPの設計思想はHMVC(Hierarchical Model-View-Controller)アーキテクチャに基づいています。

通常のMVCモデルでは1つのプロジェクトにつき1つのMVC構造を持つのに対し、HMVCでは複数のMVCを持つことが可能です。

これにより、1つのアプリ内で異なるMVCをモジュールとして持つことができます。


オートローダー

FuelPHPではクラスに独自の命名規則があり、これを守ることで必要なクラスの自動呼び出しが可能です。

この仕組みをオートローダーといい、requireやinclude文が不要となりコードがシンプル化されます。


高速である

オートローダー機能やその他のシンプル化により、メモリ使用量が抑えられ動きが高速なのが特徴です。


Presenterによるシンプル化

FuelPHPには、Model・View・Controllerクラスに加えてPresenterというクラスがあります。(以前はViewModelと呼ばれていました。)

Presenterはコントローラとビュー・モデルの仲立ちとしてモデルから取得したデータをビューに渡したり、ビューの読み込みを行うクラスです。

これによりコントローラは全体の制御に集中でき、コードがシンプル化メンテナンス性が上がります。


FuelPHPに特有の機能

Authパッケージによる認証

Webアプリケーションに欠かせない機能の一つが認証機能です。

Authは標準的な認証インターフェイスを提供するためのパッケージで、これを使用して簡単に認証機能を実装することができます。


ORMによるO/Rマッピング

ORM(Object Relational Mapper)自体は一般的な機能で、オブジェクトとリレーショナルデータベースの紐付けを行います。

FuelPHPに用意されているORMパッケージはシンプルで高速、使い方が簡単というメリットがあります。


Oilユーティリティ

OilはFuelPHPでの開発を高速化するために用意されているパッケージコマンド群です。

コマンドラインからマイグレーションやテストを実行することができます。


FuelPHPのインストール

Windowsの場合

FuelPHPのダウンロードサイトより、zipファイルをダウンロードしてインストールします。

解凍したらファイルをお使いのWebサーバの公開用ディレクトリに配置します。

http://localhost:8888/sample/publicにアクセスしてFuelPHPの画面が表示されれば成功です。


MaxOS/Linuxの場合

いくつかのインストール方法がありますが、oilコマンドを使うと簡単です。

ターミナルから次のように入力してください。

  1. curl get.fuelphp.com/oil | sh
  2. oil create sample

http://localhost:8888/sample/publicにアクセスしてFuelPHPの画面が表示されれば成功です。


FuelPHPのファイル配置

インストールが完了したら、sampleディレクトリの中身をみてみましょう。FuelPHPのファイル配置は下記のようになっています。

fuelの中身にアプリケーション配置先であるappディレクトリ、FuelPHP本体が格納されたcoreディレクトリがあります。

そして、publicがWebルートとなっていてここに公開用ファイルを配置します。

  1. ├── docs          //ドキュメント
  2. ├── fuel
  3. │ ├── app          //アプリ配置先
  4. │ │ ├── bootstrap.php    //ブートストラップ用ファイル
  5. │ │ ├── cache        //キャッシュディレクトリ
  6. │ │ ├── classes        //クラスを配置
  7. │ │ │ ├── controller     //コントローラ
  8. │ │ │ ├── model      //モデル
  9. │ │ │ └── presenter     //プレゼンタ
  10. │ │ ├── config       //設定ファイル
  11. │ │ ├── lang         //言語ファイル
  12. │ │ ├── logs         //ログディレクトリ
  13. │ │ ├── migrations      //マイグレーションファイル
  14. │ │ ├── modules      //モジュールファイル
  15. │ │ ├── tasks        //タスクファイル
  16. │ │ ├── tests        //ユニットテストファイル
  17. │ │ ├── themes      //テーマテンプレート用
  18. │ │ ├── tmp        //一時ファイル用
  19. │ │ ├── vendor      //サードパーティライブラリ用
  20. │ │ ├── views        //ビュー用
  21. │ ├── core         //FuelPHP本体
  22. │ ├── packages      //パッケージ
  23. │ └── vendor        //composerルートディレクトリ
  24. ├── oil           //Oilパッケージ
  25. └── public         //Webルートディレクトリ


コーディング規約

ここから具体的な使い方を見ていきましょう。

FuelPHPではオートローダー機能の実現のため、ファイル書式の制約やコード中の命名規則があります。


ファイル書式

ファイルの書式には下記の制約があります。

  • ファイル名は全て小文字にする
  • ピュアPHPファイルはPHP閉じタグ(?>)を省略
  • 行の末尾はLFにする
  • エンコーディングはUTF-8にする


命名規則

クラス、メソッド、変数の命名規則には下記があります。

少し制約がきつめではありますが、これを守ることによりFuelPHPによるコードの解釈が簡素化され、動作の高速化につながるのです。

  • コアクラスは全て「Fuel/Core」というネームスペースにする
  • クラス名でのアンダースコアはディレクトリ境界として使用する
  • クラス名に含まれる各単語は大文字から始めて、キャメルケースは使用禁止
  • メソッド名は全て小文字とアンダースコアのみ使用、キャメルケースは使用禁止
  • 変数名は小文字とアンダースコアのみを使用


アンダースコアの意味合い

なお、2つめ「アンダースコアはディレクトリ境界として使用」の意味ですが、具体的には下記のことを指します。

例えば「core/classes/sample.php」に定義されるクラスが下記のようになっているとします。

  1. namespace Fuel/Core;
  2. class Sample
  3. {
  4. }

もし、サブディレクトリにcore/classes/sample/sample2.phpを定義する場合は下記のようにクラスを命名する必要があります。

  1. namespace Fuel/Core;
  2. class Sample_sample2 extends sample
  3. {
  4. }

つまり、アンダースコアによってFuelPHPは「Sample_sample2」クラスが「sample/sample2.php」に配置されていることがわかるのです。


コントローラの実装例

まずはコントローラの実装例を見てみましょう。

FuelPHPではfuel/app/classes/controllerディレクトリにコントローラクラスを配置します。

必ずクラス名の頭に「Controller_」を付けなければならないことに注意してください。

HTTPリクエストに応じた実装は簡単で、「HTTPメソッド名_index()」とすればOKです。

例としてfuel/app/classes/controller/test.phpを下記のように作成してください。

  1. class Controller_Test extends Controller
  2. {
  3. public function get_index()
  4. {
  5. // HTTPのGETメソッド時の動作
  6. }
  7. public function post_index()
  8. {
  9. // HTTPのPOSTメソッド時の動作
  10. }
  11. }


ビューの実装例

ビューファイルはfuel/app/viewsディレクトリに配置する決まりです。

サブディレクトリとファイル名はコントローラからビューを呼び出す際のビュー名になります。

例えば、fuel/app/view/test/hello.phpを下記のように作成してください。

  1. <html>
  2. <head>
  3. <title><?php echo $title; ?></title>
  4. </head>
  5. <body>
  6. Hello, <?php echo $name; ?>.
  7. </body>
  8. </html>


コントローラからの呼び出し

作成したビューをコントローラから呼び出すには下記のようにします。

  1. class Controller_Test extends Controller
  2. {
  3. public function get_index()
  4. {
  5. $data = array();
  6. $data[‘name’] = ‘(任意の名前)’;
  7. $data[‘title’] = ‘Welcome’;
  8. return View::forge(‘test/hello’, $data);
  9. }
  10. }

ここで、arrayはビューに渡す変数を格納するためのリストです。

Viewクラスのforgeメソッドを使ってブラウザに表示するビューを割り当てます。

このように’test/hello’と指定するだけで、FuelPHPがfuel/app/view/test/hello.phpを探しにいくわけです。

こうして先ほど作成したビューが呼び出され、「Hello, (任意の名前)」と表示されます。


モデルの実装例

モデルクラスはfuel/app/classes/modelに配置する決まりです。

モデル名は命名規則に従い「Model_」から始める必要があります。

例えば、下記のようにfuel/app/classes/model/sample.phpを作成してください。

  1. class Model_Sample extends \Model {
  2. public static function get_results()
  3. {
  4. // データベースに対しての処理内容を記述
  5. }
  6. }

データベースに対しての処理内容については様々な方法記述する事ができます。

一番手取り早い方法は、DBクラスのquery()メソッドを使ってSQL文をそのまま書くことです。

  1. $query = DB::query(‘SELECT * FROM users WHERE id >=100’);
  2. $query->execute()->as_array();

他にも、DBクラスのクエリビルダを使ったり、ORMパッケージやCRUD(データの作成・検索・更新・削除)に特化したModel_Crudクラスを使用できます。


コントローラからの呼び出し

作成したモデルをコントーラから呼び出すには下記のようにします。

  1. use \Model\Sample;
  2. class Controller_Test extends Controller
  3. {
  4. public function get_index()
  5. {
  6. $results = Sample::get_results();
  7. }
  8. }


まとめ

フルスタックフレームワークでありながら動作も高速なFuelPHPについて、特徴や使い方をご紹介しました。

比較的小規模なサービスやAPIをスピーディに実装する際に特におすすめです。

最新情報についてはFuelPHP公式ページもご確認ください。