ServBayローカル開発環境でFuelPHPプロジェクトを作成・実行する
FuelPHPとは?
FuelPHPは、現代的なWebアプリケーションの構築に特化した柔軟かつモジュール型のPHPフレームワークです。階層化モデル・ビュー・コントローラ(HMVC - Hierarchical Model-View-Controller)デザインパターンに準拠しており、豊富な機能とツールセットを提供します。これにより、開発者は高品質なWebアプリケーションを迅速かつ効率的に開発することが可能です。FuelPHPは卓越した柔軟性、高いパフォーマンス、拡張性の容易さで、多くのPHP開発者に選ばれています。
FuelPHPの主な特徴と利点
- HMVCアーキテクチャ:階層化したMVCデザインパターンに対応し、コードの整理・再利用・モジュール開発を促進します。特に大規模または複雑なプロジェクトに最適です。
- 高パフォーマンス:FuelPHPはパフォーマンス重視で設計されており、高速なレスポンスやリソース効率の良さが特長です。高負荷リクエストにも効率的に対応できます。
- 拡張性の高さ:強力な拡張メカニズムを備え、サードパーティライブラリの統合やプロジェクト固有のカスタマイズも簡単です。
- セキュリティ:自動入力バリデーション、出力フィルタリング(XSS防止)、CSRF保護、SQLインジェクション対策など、多彩なセキュリティ機能を内蔵。安全なアプリケーション開発を支援します。
- 活発なコミュニティ:FuelPHPはアクティブな開発者コミュニティに支えられ、豊富な情報やサードパーティリソース、迅速なサポートが受けられます。
これらの特長によってFuelPHPは、小規模から大規模なエンタープライズアプリケーションまで、さまざまなWeb開発プロジェクトに最適です。
ServBayを使ってFuelPHP開発環境を構築する
ServBayは、PHP、Caddy/Nginx/Apache、MySQL/PostgreSQL/MongoDB、Redisなど、Web開発に必要な多様なサービスやツールが予めインストールされた、開発者向けのローカルWeb開発環境です。ServBayを利用すれば、FuelPHPプロジェクトに必要な環境を手軽に用意でき、個別の依存関係のインストールや複雑な設定が不要です。
本ガイドでは、ServBayのPHP環境、Webサーバー(Caddy)、データベースおよびキャッシュサービスを活用して、FuelPHPプロジェクトを作成・実行する手順を詳細に解説します。ServBayのウェブサイト機能を利用してWebサーバーの設定を行い、数ステップでプロジェクトのアクセス・テストを行う方法もご紹介します。
前提条件
始める前に、以下の条件を満たしていることをご確認ください。
- macOSにServBayがインストールされ、起動していること
- ServBayのPHP環境が有効(ServBayではデフォルトで有効です)
- 使用するデータベースサービス(例:MySQL)やキャッシュサービス(例:Redis, Memcached)がServBay上で起動・正常動作していること
- ComposerはServBayに標準搭載されているため、別途インストール不要です
FuelPHPプロジェクトの作成
推奨されるプロジェクト格納パス
ServBayではウェブサイトプロジェクトを /Applications/ServBay/www
ディレクトリに統一配置することを推奨しています。これにより、管理や設定が容易になります。本ガイドでもこのディレクトリを例として使用します。
ウェブサイトのルートディレクトリへ移動
ターミナルを開き、ServBay指定のウェブサイトルートディレクトリへ移動します。
bashcd /Applications/ServBay/www
1プロジェクトディレクトリの作成
新しいFuelPHPプロジェクト用のディレクトリを作成し、そこに移動します。
bashmkdir servbay-fuelphp-app cd servbay-fuelphp-app
1
2ComposerでFuelPHPプロジェクトを作成
プロジェクトディレクトリでComposerを使い、FuelPHPフレームワークをダウンロード&初期化します。
.
は現在のディレクトリを指定します。bashcomposer create-project fuel/fuel .
1Composerが、FuelPHPフレームワークと依存パッケージを
servbay-fuelphp-app
ディレクトリに自動でインストールします。
Webサーバーの設定(ServBayのウェブサイト機能利用)
ブラウザからFuelPHPプロジェクトにアクセスするには、ServBayのウェブサイト機能を使ってバーチャルホストを設定する必要があります。
- ServBayのメイン画面を開きます。
- サイドバーのウェブサイトメニューをクリックします。
- 画面右上のウェブサイト追加ボタンをクリックします。
- 表示される設定ダイアログに以下の情報を入力します。
- 名前:サイトを識別しやすい名前を設定(例:My First FuelPHP Dev Site)
- ドメイン:ローカル開発用ドメインを設定(例:servbay-fuelphp-test.local)。ServBayは自動でこのドメインをローカルに割り当てます。
- サイトタイプ:「PHP」を選択
- PHPバージョン:希望するバージョンを選択(例:8.3)
- ウェブサイトルート:FuelPHPのエントリディレクトリを指定。FuelPHPの公開エントリファイルは
public/index.php
なので、ウェブサイトルートはプロジェクトのpublic
サブディレクトリ/Applications/ServBay/www/servbay-fuelphp-app/public
を指定
- 追加ボタンをクリックして設定を保存
ServBayがCaddyの設定を自動で更新・リロードし、新しいドメインが有効化されます。
ウェブサイト追加の詳細はServBayドキュメントの 最初のウェブサイトを追加する をご参照ください。
FuelPHPプロジェクトのサービス接続設定
FuelPHPプロジェクトでは、一般にデータベースやキャッシュ等の接続情報を設定する必要があります。
データベース設定
FuelPHPのデータベース設定は fuel/app/config/development/db.php
ファイルにあります。このファイルを編集し、ご自身のデータベース接続情報を入力してください。ServBay標準のMySQLサービスを利用する場合は以下の通りです。
<?php
/**
* The development database settings. These get merged with the global settings.
*/
return [
'default' => [
'connection' => [
'dsn' => 'mysql:host=localhost;dbname=fuel_dev', // fuel_devデータベースが存在していることを確認
'username' => 'root', // ServBay MySQLのデフォルトユーザー
'password' => 'root', // ServBay MySQLのデフォルトパスワード(ローカル開発用)
],
'identifier' => '`', // MySQL用の識別子(バッククオート)
],
];
2
3
4
5
6
7
8
9
10
11
12
13
14
注意:
- ServBayのデータベース管理ツール(phpMyAdminやAdminerなど)で、
fuel_dev
という名前のデータベースを手動で作成してください。ServBayのMySQLデフォルトユーザーはroot
、パスワードもroot
です(本番利用不可、ローカル開発用)。 'identifier' => '
'` はMySQL用に必須です。テーブル名やカラム名を正しく引用します。
キャッシュ設定(MemcachedとRedis)
FuelPHPは複数のキャッシュドライバーをサポートします。fuel/app/config/cache.php
でキャッシュドライバーや接続情報を設定しましょう。Memcached・RedisサービスがServBayで起動していることも確認してください。
Memcachedの設定(fuel/app/config/cache.php
):
デフォルトのキャッシュとしてMemcachedを利用する場合:
<?php
return [
'driver' => 'memcached', // デフォルトドライバーとしてmemcachedを指定
'memcached' => [
'cache_id' => 'fuel', // キャッシュID
'servers' => [
'default' => [
'host' => '127.0.0.1', // Memcachedのデフォルトアドレス
'port' => 11211, // Memcachedの標準ポート
'weight' => 100,
],
],
'compression' => false, // 圧縮の有無
],
// ... 他ドライバーの設定
];
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ServBayで提供されるPHPは通常、Memcached拡張もインストール済みです。
Redisの設定(fuel/app/config/redis.php
):
Redisを利用する場合は、Redis用の設定をredis.php
ファイルで行います。
<?php
return [
'default' => [
'hostname' => '127.0.0.1', // Redisのデフォルトアドレス
'port' => 6379, // Redisの標準ポート
'database' => 0, // Redisデータベース番号
],
// 複数接続の設定も可能です
];
2
3
4
5
6
7
8
9
ServBayのPHPはRedis拡張もあらかじめ導入されています。
データベースとキャッシュサービスのサンプル
FuelPHPがデータベースやキャッシュサービスと連携する例をいくつか追加してみましょう。
データベーステーブルの準備(FuelPHPマイグレーション)
FuelPHPはOilツールを用いてマイグレーション(データベース構造のバージョン管理)を行うことができます。
マイグレーションファイルの作成
プロジェクトルート(
servbay-fuelphp-app
)でOilツールを実行し、users
テーブル用の新しいマイグレーションファイルを作成します。bashphp oil generate migration create_users_table
1これにより、
fuel/app/migrations
ディレクトリにタイムスタンプ付きのマイグレーションファイルが生成されます。マイグレーションファイルの編集
新規作成されたマイグレーションファイル(例:
fuel/app/migrations/xxxxxxxxxxxx_create_users_table.php
)を開き、up()
メソッドでテーブル構造を定義し、down()
でロールバック操作を記述します。php<?php namespace Fuel\Migrations; use Fuel\Core\DBUtil; class Create_users_table { public function up() { // usersテーブルの作成 DBUtil::create_table('users', [ 'id' => ['type' => 'int', 'constraint' => 11, 'auto_increment' => true], 'name' => ['type' => 'varchar', 'constraint' => 100], 'email' => ['type' => 'varchar', 'constraint' => 100, 'unique' => true], ], ['id'], true, 'InnoDB', 'utf8mb4_unicode_ci'); // 主キー指定・インデックス・エンジン/文字コード } public function down() { // usersテーブルの削除(ロールバック) DBUtil::drop_table('users'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23マイグレーションの実行
プロジェクトルートでOilを実行し、テーブルを作成します。
bashphp oil refine migrate
1正常に完了すれば、
fuel_dev
データベースにusers
テーブルが作成されます。
サンプルコントローラーの追加
ファイルfuel/app/classes/controller/welcome.php
を編集し、データベースおよびキャッシュ操作のサンプルメソッドを追加します。
<?php
use Fuel\Core\Controller;
use Fuel\Core\Response;
use Fuel\Core\Cache;
use Fuel\Core\DB; // DBファサードをインポート
use Fuel\Core\Redis; // Redisファサードをインポート
class Controller_Welcome extends Controller
{
// デフォルトのトップページ
public function action_index()
{
return Response::forge('Hello ServBay!');
}
// Memcachedサンプル
public function action_memcached()
{
// キャッシュからデータ取得
$value = Cache::get('servbay_memcached_key');
if ($value === false) {
// キャッシュがなければ設定
$value = 'Hello Memcached from ServBay!';
Cache::set('servbay_memcached_key', $value, 60); // 60秒キャッシュ
$value .= ' (from cache)';
} else {
$value .= ' (cached)';
}
return Response::forge($value);
}
// Redisサンプル
public function action_redis()
{
// デフォルト接続のRedisインスタンス取得
$redis = \Redis_Db::instance(); // FuelPHP 1.xではRedis_Db::instance()
// 複数接続なら\Redis_Db::instance('接続名')
// Redisにデータセット
$redis->set('servbay_redis_key', 'Hello Redis from ServBay!');
// Redisからデータ取得
$value = $redis->get('servbay_redis_key');
return Response::forge($value);
}
// MySQL書き込みサンプル
public function action_mysql_add()
{
try {
// usersテーブルにレコード挿入
$result = DB::insert('users')->set([
'name' => 'ServBay Demo User ' . time(), // タイムスタンプで一意性確保
'email' => 'demo_user_' . time() . '@servbay.test',
])->execute(); // execute()は新規IDを含む配列を返す
return Response::forge('User added with ID: ' . $result[0]);
} catch (\Database_Exception $e) {
// 例:email重複などのデータベース例外をキャッチ
return Response::forge('Error adding user: ' . $e->getMessage(), 500);
}
}
// MySQL読み取りサンプル
public function action_mysql()
{
// usersテーブルから全レコード取得
$users = DB::select('id', 'name', 'email')->from('users')->execute()->as_array();
// ユーザーリストをJSON形式で返す
return Response::forge(json_encode($users, JSON_PRETTY_PRINT));
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
注意:
DB
とRedis
ファサード(use Fuel\Core\DB;
,use Fuel\Core\Redis;
)を明示的にインポートして利用しています。- MemcachedとRedisのキー名には
servbay_
プレフィックスを利用し、他のキーとの衝突を回避しています。 - MySQL書き込み例ではタイムスタンプ付きで重複を回避し、例外処理も追加済みです。
- FuelPHP 1.xでは
\Redis_Db::instance()
でRedisインスタンス取得が可能です。
ルーティングの設定
追加したコントローラーアクションにURLでアクセスできるよう、fuel/app/config/routes.php
でルーティングを設定しましょう。Controller_Welcome
へのルートはデフォルトで設定済みですが、memcached
, redis
, mysql_add
, mysql
の各アクションも明示します。
fuel/app/config/routes.php
の戻り値配列に以下を追加・修正します。
<?php
return array(
'_root_' => 'welcome/index', // デフォルトでwelcomeコントローラーのindexアクションへ
'_404_' => 'welcome/404', // 404エラーページのルート
// 新規サンプル用アクションのルーティング
'memcached' => 'welcome/memcached',
'redis' => 'welcome/redis',
'mysql_add' => 'welcome/mysql_add',
'mysql' => 'welcome/mysql',
// ... 他のルーティング設定
);
2
3
4
5
6
7
8
9
10
11
12
13
サイトへのアクセスと動作テスト
これで、ブラウザからServBayで設定したドメインhttps://servbay-fuelphp-test.local
にアクセスし、FuelPHPプロジェクトや各サービスの動作テストが可能です。
- デフォルトページにアクセス:
https://servbay-fuelphp-test.local
- 期待される出力:
Hello ServBay!
- 期待される出力:
- Memcachedをテスト:
https://servbay-fuelphp-test.local/memcached
- 初回:
Hello Memcached from ServBay! (from cache)
(キャッシュサービスが正常なら) - 再度アクセス:
Hello Memcached from ServBay! (cached)
(未期限切れの場合)
- 初回:
- Redisをテスト:
https://servbay-fuelphp-test.local/redis
- 期待出力:
Hello Redis from ServBay!
(Redisが正常なら)
- 期待出力:
- MySQLにユーザーを追加:
https://servbay-fuelphp-test.local/mysql_add
- 期待出力:
User added with ID: [新規ID]
(MySQLやテーブルが存在する場合)
- 期待出力:
- MySQLユーザー一覧取得:
https://servbay-fuelphp-test.local/mysql
- 期待出力:
users
テーブルの全レコードが格納されたJSON配列(テーブルにデータがある場合)
- 期待出力:
HTTPSについて:
ServBayはローカルサイトに自動でSSL証明書(ServBay User CAまたはServBay Public CA)を発行・適用します。もしブラウザで証明書未信頼の警告が出る場合は、ServBayのCA証明書をシステムに信頼登録してください。
注意事項
- ServBayメイン画面で、使用中のPHPバージョン・Caddy(またはNginx/Apache)・MySQL(データベース利用時)・Redis・Memcachedなど全サービスが起動中であることを必ずご確認ください。
- データベース
fuel_dev
はServBayのDB管理ツール(phpMyAdminやAdminer等)で手動作成が必要です(db.php
で設定したデータベースが存在している必要あり)。FuelPHPのマイグレーションツールoil refine migrate
はテーブル構築を自動化しますが、データベース自体は自動生成しません。 - FuelPHPの公開エントリファイルは
public/index.php
ですので、ServBayのウェブサイト設定で、サイトルートは必ずプロジェクトのpublic
サブディレクトリを指定してください。
まとめ
ServBayを使えば、macOS上でFuelPHPプロジェクトのための完全なローカル開発環境を非常に簡単かつ効率的に構築できます。本記事では、FuelPHPプロジェクトの作成から、ServBayのウェブサイト機能によるサーバー設定、データベースやキャッシュサービスの接続設定、さらにはサンプルコードによる動作確認方法まで詳しく解説しました。ServBayにプリインストールされた多彩なサービスとシンプルな設定プロセスで、開発効率を大きく向上させることができるでしょう。
本ガイドが、ServBay環境でのFuelPHP開発の第一歩を踏み出す手助けとなれば幸いです!