ServBayでCakePHPプロジェクトを作成・実行する方法
ServBayは、macOSおよびWindowsに対応したローカルWeb開発環境です。PHP、Node.js、Python、Go、Javaなどのプログラミング言語環境や、MySQL、PostgreSQL、MongoDB、Redis等のデータベースサービス、さらにCaddyまたはNginxのWebサーバーを一括で統合。開発者がローカルプロジェクトを簡単かつ効率的に立ち上げ・管理できるプラットフォームを提供します。
本記事では、ServBay環境下でCakePHPプロジェクトを新規作成し、設定して実行するまでの手順を解説します。CakePHPはMVC(モデル・ビュー・コントローラー)パターンに基づく人気のPHP Webフレームワークで、迅速な開発、強力なORM、内蔵セキュリティ機能で評価されています。ServBayの利便性と組み合わせることで、素早くCakePHP開発を始められます。
CakePHPとは?
CakePHPは、PHPでWebアプリケーションを迅速かつ構造的に開発するためのオープンソースフレームワークです。柔軟性を損なうことなく、ベースとなる構造を提供し、「規約より設定」原則により頻繁な開発作業をシンプルにします。
CakePHPの主な特徴とメリット
- MVCベース: コード整理がしやすく、保守・拡張が容易。
- 高速開発: コマンドラインツール(Bake)でコード生成可能、開発スピードを大幅アップ。
- 強力なORM(オブジェクトリレーショナルマッピング): 複数のデータベースシステムに対応し、DB操作を簡潔に。
- 内蔵セキュリティ: CSRF保護、SQLインジェクション防止、入力バリデーション機能を搭載。
- 柔軟なテンプレートエンジン: 多様なビュー技術をサポート。
- 活発なコミュニティ・豊富なプラグイン: トラブル時の情報が充実、機能拡張も容易。
- 詳細なドキュメント: ガイド・APIリファレンスが充実。
CakePHPは、小規模APIから大規模なエンタープライズシステムまで幅広いWebアプリケーション開発に適しています。
ServBayによるCakePHP開発環境構築
ServBayにはCakePHP開発をサポートする環境が整っています。
- PHPインタープリターと主要拡張機能がプリインストール済み。
- Composerパッケージマネージャーがプリインストール済み。
- 簡単設定のWebサーバー(Caddy/Nginx)。
- データベースサービス(MySQL、PostgreSQL、Redis等)の統合。
これらを手動でインストール・設定する煩わしさをServBayが解消してくれます。
事前準備
始める前に、以下の準備を済ませてください。
- ServBayのインストール: macOSでServBayをダウンロードし、インストールが完了していることを確認。
- ServBayサービスの起動: ServBayアプリを起動し、必要なパッケージ(PHP、利用予定のデータベース:MySQLやPostgreSQL、キャッシュサービス:RedisやMemcached 等)が起動していることを確認。「パッケージ」タブで管理できます。
- ServBay基本操作の習得: サイトの追加や設定方法を理解。未経験の場合は、まずServBay基本利用ガイドを参照してください。
CakePHPプロジェクトの作成
Webプロジェクトのファイルは、ServBayでは/Applications/ServBay/www
ディレクトリに統一して配置することが推奨されています。これによりサイト管理が容易になります。
ターミナルを開く
macOSのターミナルアプリを起動します。
ServBayのサイトルートディレクトリに移動
ServBay推奨のディレクトリに移動します。
bashcd /Applications/ServBay/www
1プロジェクトディレクトリを作成
CakePHPプロジェクト用のサブディレクトリを作成します。ここでは例として
servbay-cakephp-app
を使います。bashmkdir servbay-cakephp-app cd servbay-cakephp-app
1
2ComposerでCakePHPプロジェクトを作成
ComposerはServBayにプリインストールされています。ディレクトリ内で以下コマンドを実行し、CakePHPのベースプロジェクトを作成します。
bashcomposer create-project --prefer-dist cakephp/app .
1最新の安定版CakePHPとその依存パッケージがカレントディレクトリ(
.
)にインストールされます。ORMドライバのインストール(PostgreSQL使用時のみ)
PostgreSQLを使う場合は、追加でORMドライバをインストールしてください。
bashcomposer require cakephp/orm-pgsql
1MySQLの場合は追加ドライバ不要です(CakePHPの標準依存として内包)。
初期設定
プロジェクト作成後は、主にデータベース接続など基本的な設定が必要です。
環境変数・データベース接続情報の設定
CakePHPにおけるローカル環境設定は主に
config/app_local.php
ファイルで管理します。このファイルのDatasources
部分でDB接続情報を指定します。ServBayのデフォルトDBユーザーはroot
、パスワードはpassword
です。例:MySQL接続設定
php// config/app_local.php 'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Mysql::class, // PostgreSQLなら\Cake\Database\Driver\Postgres::class 'persistent' => false, 'host' => '127.0.0.1', // ServBayは標準でローカルホスト //'port' => '3306', // MySQLの標準3306/PostgreSQLは5432 'username' => 'root', // デフォルトユーザー名 'password' => 'password', // デフォルトパスワード 'database' => 'servbay_cakephp_app', // 利用するDB名 'encoding' => 'utf8mb4', 'timezone' => 'UTC', 'flags' => [], 'cacheMetadata' => true, 'log' => false, /** * テーブル名に"user"のような予約語を使う場合はtrueに。通常はfalseでも問題無し。 */ 'quoteIdentifiers' => false, /** * 現在の制限事項: * - 多くのドライバーはPDOオプションによるアイソレーションレベル設定非対応。 * - 文字コード設定も一部非対応。 * - CakePHPパッケージ版PostgresはPDOオプション非対応。encodingのみ指定。 */ 'options' => [], //'url' => env('DATABASE_URL', null), // DATABASE_URL環境変数利用時のみ有効 ], ],
1
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使用するDB種別(MySQL or PostgreSQL)によって
driver
やport
を調整してください。database
名は作成するDBと合わせてください。
Webサーバーの設定(ServBayでウェブサイト作成)
CakePHPプロジェクトにWebブラウザからアクセスできるよう、ServBayでサイト設定が必要です。
ServBayコントロールパネルを開く
ServBayアイコンをクリックし、コントロールパネルを表示。
「Webサイト」タブへ移動
コントロールパネルの左ナビから「Webサイト」(旧称:ホスト)を選択。
新規サイトの追加
画面下部の
+
ボタンで新規サイトを追加し、下記を入力します。- 名前: サイト名(例:
My CakePHP Dev Site
) - ドメイン: ローカル開発用ドメイン(例:
servbay-cakephp-test.local
)ServBayが自動的にローカルへ割り当て。 - サイトタイプ:
PHP
を選択。 - PHPバージョン: CakePHPのバージョンに合うもの(CakePHP4+はPHP7.4+、CakePHP5+はPHP8.1+など。例:
8.3
)。 - ウェブサイトのルートディレクトリ: 重要! CakePHPのWebサーバールートは、プロジェクトの
webroot
ディレクトリ。/Applications/ServBay/www/servbay-cakephp-app/webroot
(servbay-cakephp-app
は実際のプロジェクト名に変更)。
- 名前: サイト名(例:
保存・変更の適用
必要項目入力後、「保存」をクリック。変更適用の確認が出るので承認。ServBayによりWebサーバー(Caddy/Nginx)が自動設定され、
servbay-cakephp-test.local
へのリクエストがwebroot
ディレクトリに振り分けられます。
詳細手順は最初のウェブサイト追加も参考に。
基本設定の確認
これでブラウザでServBayサイトにアクセスできるはずです。
ブラウザで設定したドメイン(例: https://servbay-cakephp-test.local
)を開いてください。
CakePHPの初期ウェルカムページが表示されれば、PHP環境・Webサーバー・ServBayサイト設定が正常動作しています。
データベース/キャッシュサービスとの統合
CakePHPのORMやキャッシュモジュールで、ServBay管理のDBやキャッシュサービスと簡単に接続できます。
RDB(MySQL / PostgreSQL)統合例
ここではServBayのMySQLまたはPostgreSQLに接続し、CakePHPでusers
テーブルを作成してCRUD(登録・取得など)操作する例を紹介します。
ServBayでデータベース作成
マイグレーション前に、ServBayのDBサーバーで新規データベースを作成します。phpMyAdmin(MySQL用)、pgAdmin(PostgreSQL用)、NavicatやDBeaver等のツールでDBへ(
127.0.0.1
・ユーザーroot
・パスワードpassword
)接続し、servbay_cakephp_app
という名前のDBを作成してください。ORMモデルファイルの作成
CakePHPのORMはテーブルごとにModelファイルが必要です。
UsersTable.php
でusers
テーブルを表現。下記コードを
src/Model/Table/UsersTable.php
に保存。php<?php namespace App\Model\Table; use Cake\ORM\Table; use Cake\Validation\Validator; // バリデーション利用時 class UsersTable extends Table { /** * Initializeメソッド * * @param array $config テーブル用設定。 * @return void */ public function initialize(array $config): void { parent::initialize($config); $this->setTable('users'); // テーブル名指定 $this->setDisplayField('name'); // 表示用フィールド設定 $this->setPrimaryKey('id'); // 主キー設定 // タイムスタンプ自動追加したい場合 // $this->addBehavior('Timestamp'); } /** * デフォルトバリデーションルール * * @param \Cake\Validation\Validator $validator バリデータインスタンス。 * @return \Cake\Validation\Validator */ public function validationDefault(Validator $validator): Validator { $validator ->scalar('name') ->maxLength('name', 255) ->requirePresence('name', 'create') ->notEmptyString('name'); $validator ->email('email') ->requirePresence('email', 'create') ->notEmptyString('email') ->add('email', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); // email重複禁止 return $validator; } }
1
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
49Bakeツールでマイグレーションファイル作成
CakePHPではDB構造はマイグレーションで管理推奨。プロジェクトのルート(
/Applications/ServBay/www/servbay-cakephp-app
)でBakeツールを使いマイグレーションファイルを生成します。bashbin/cake bake migration CreateUsers name:string email:string:unique
1users
テーブルと、そのname
(文字列型)、email
(文字列型・ユニーク)のフィールド追加内容が生成されます。DBマイグレーションコマンド実行
下記を実行し、データベース上にテーブルを作成します。
bashbin/cake migrations migrate
1成功すれば、DBに新しい
users
テーブルが作成されています。DB接続設定(未設定の場合のみ)
config/app_local.php
のDatasources.default
が正しい内容か確認します。MySQL例:
php'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Mysql::class, 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', // ... その他設定 ], ],
1
2
3
4
5
6
7
8
9
10
11PostgreSQL例:
php'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Postgres::class, 'host' => '127.0.0.1', // 'port' => '5432', // デフォルト 'username' => 'root', // ServBayデフォルト 'password' => 'password', // ServBayデフォルト 'database' => 'servbay_cakephp_app', // ... その他設定 ], ],
1
2
3
4
5
6
7
8
9
10
11
12
追加サンプルルート・コントローラメソッド
config/routes.php
でユーザー追加・一覧表示用のルートを追加します。php// config/routes.php use Cake\Routing\RouteBuilder; use Cake\Routing\Router; use Cake\Routing\Route\DashedRoute; Router::defaultRouteClass(DashedRoute::class); Router::scope('/', function (RouteBuilder $routes) { // ... 他のルート $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); // DB例用ルート追加 $routes->connect('/db-add-user', ['controller' => 'Pages', 'action' => 'dbAddUser']); $routes->connect('/db-list-users', ['controller' => 'Pages', 'action' => 'dbListUsers']); // ... 他のルート $routes->fallbacks(DashedRoute::class); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18次に
src/Controller/PagesController.php
にデータベース操作用メソッドを追加します。php<?php namespace App\Controller; use Cake\Http\Response; use Cake\ORM\TableRegistry; use Cake\Datasource\Exception\RecordNotFoundException; // レコード未発見用例外 class PagesController extends AppController { /** * viewの表示 * * @param array ...$path パスセグメント * @return \Cake\Http\Response|null */ public function display(...$path): ?Response { // ... display標準メソッド return new Response(['body' => 'Hello ServBay! これはデフォルトページです。']); } /** * DB例:ユーザー追加 */ public function dbAddUser(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // Usersテーブル取得 // ユーザーエンティティ生成 $user = $usersTable->newEntity([ 'name' => 'ServBay Demo User', 'email' => 'servbay-demo@servbay.test' // ブランド名のメール例 ]); // DB保存 if ($usersTable->save($user)) { return new Response(['body' => 'ユーザー追加成功!ID: ' . $user->id]); } else { // 保存失敗時(バリデーションエラーなど) $errors = $user->getErrors(); return new Response(['body' => 'ユーザー追加失敗。エラー内容: ' . json_encode($errors)]); } } /** * DB例:全ユーザー一覧 */ public function dbListUsers(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // Usersテーブル取得 // 全ユーザー取得 $users = $usersTable->find()->all(); // 結果をJSONにして表示 return new Response(['body' => json_encode($users->toArray())]); // Collectionを配列化して出力 } }
1
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
58DB操作サンプルにアクセス
ブラウザで
https://servbay-cakephp-test.local/db-add-user
にアクセス → ユーザー追加メッセージ表示https://servbay-cakephp-test.local/db-list-users
にアクセス → 登録済みユーザー一覧(追加したユーザーを含む)
これでCakePHPプロジェクトがServBay上のRDBと連携し、基本ORM操作が実現できます。
キャッシュサービス(Memcached/Redis)統合例
CakePHPは統一キャッシュAPIを提供しており、MemcachedやRedis等、利用するキャッシュエンジンを簡単に切り替えられます。ServBayはMemcached・Redis用PHP拡張とサービスを標準搭載。
まず、ServBay「パッケージ」タブで MemcachedまたはRedis サービスを起動しておきます。
キャッシュ接続の設定
config/app_local.php
のCache
設定を編集します。Memcachedの例:
php// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\MemcachedEngine::class, 'servers' => ['127.0.0.1:11211'], // ServBayデフォルトアドレス/ポート 'prefix' => 'servbay_cakephp_', // キャッシュキー接頭辞 ], // ... その他設定 ],
1
2
3
4
5
6
7
8
9Redisの例:
php// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\RedisEngine::class, 'host' => '127.0.0.1', // ServBayデフォルトアドレス 'port' => 6379, // デフォルトポート 'password' => null, // パスワード設定時のみ入力 'database' => 0, // DB番号 'prefix' => 'servbay_cakephp_', // キャッシュキー接頭辞 ], // ... その他設定 ],
1
2
3
4
5
6
7
8
9
10
11
12
利用するキャッシュサービスに合わせて設定してください。
サンプルルート・コントローラメソッドの追加
config/routes.php
でキャッシュサンプル用ルートを追加。php// config/routes.php // ... 他のルート $routes->connect('/cache-memcached', ['controller' => 'Pages', 'action' => 'cacheMemcached']); $routes->connect('/cache-redis', ['controller' => 'Pages', 'action' => 'cacheRedis']); // ... 他のルート
1
2
3
4
5src/Controller/PagesController.php
へキャッシュ操作メソッド追加。php<?php namespace App\Controller; use Cake\Http\Response; use Cake\Cache\Cache; // Cacheクラスインポート // ... 他のuse文 class PagesController extends AppController { // ... display/dbAddUser/dbListUsers等 /** * キャッシュ例:Memcached */ public function cacheMemcached(): Response { // app_local.phpでMemcachedEngine指定済み「default」キャッシュを利用 $cacheKey = 'servbay_memcached_test_key'; $cachedData = Cache::read($cacheKey); // キャッシュ取得 $responseBody = ''; if ($cachedData === false) { // キャッシュミス $responseBody = 'キャッシュミス!"Hello Memcached!"をキャッシュへ書き込みます。'; $dataToCache = 'Hello Memcached!'; Cache::write($cacheKey, $dataToCache, 'default'); // Memcachedへ書き込み } else { // キャッシュヒット $responseBody = 'キャッシュヒット!キャッシュ内容: ' . $cachedData; } return new Response(['body' => $responseBody]); } /** * キャッシュ例:Redis */ public function cacheRedis(): Response { // app_local.phpでRedisEngine指定済み「default」キャッシュを利用 $cacheKey = 'servbay_redis_test_key'; $cachedData = Cache::read($cacheKey); // キャッシュ取得 $responseBody = ''; if ($cachedData === false) { // キャッシュミス $responseBody = 'キャッシュミス!"Hello Redis!"をキャッシュへ書き込みます。'; $dataToCache = 'Hello Redis!'; Cache::write($cacheKey, $dataToCache, 'default'); // Redisへ書き込み } else { // キャッシュヒット $responseBody = 'キャッシュヒット!キャッシュ内容: ' . $cachedData; } return new Response(['body' => $responseBody]); } }
1
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キャッシュ例にアクセス
ブラウザで、
- Memcached利用時:
https://servbay-cakephp-test.local/cache-memcached
→ 初回は「キャッシュミス」、再読み込みで「キャッシュヒット」 - Redis利用時:
https://servbay-cakephp-test.local/cache-redis
→ 上記と同様
- Memcached利用時:
CakePHPがServBayのキャッシュサービスと正常に連携できていることを示します。
注意点
- データベース認証情報: ServBayのデフォルトDBユーザー・パスワード(
root
/password
)はローカル開発専用です。本番環境では必ず強力な認証情報を設定してください。 - サイトルートディレクトリ: Webサーバーの「サイトルート」は必ず
webroot
を指定。プロジェクトルートディレクトリではありません。CakePHP推奨です。 - PHPバージョン対応: 利用CakePHPバージョンに合致するPHPバージョンを選択してください。CakePHP公式の対応表もご参照ください。
- ServBayポート: ポート80・443が他ソフトで使われている場合は、ServBay設定でポート変更し、hostsファイルやURLに合わせてください。
よくある質問(FAQ)
- Q:
servbay-cakephp-test.local
が表示できない/404エラー?- A: サイトの「ウェブサイトのルート」が
/Applications/ServBay/www/servbay-cakephp-app/webroot
に正しく設定されていることを確認。 - ServBayのWebサーバー(Caddy/Nginx)が起動しているかチェック。
- hostsファイルが
servbay-cakephp-test.local
を127.0.0.1
に向けているか確認(通常ServBayが自動設定)。 - CakePHPの
.htaccess
やWebサーバー設定が正しいか(webroot/.htaccessは通常そのままでOK)。
- A: サイトの「ウェブサイトのルート」が
- Q: データベースへの接続失敗?
- A: DBサービス(MySQL/PostgreSQL)が起動しているかServBay上で確認。
config/app_local.php
の接続情報(host, port, username, password, database)がServBay管理DBと一致しているかチェック。- 作成済みデータベース
servbay_cakephp_app
が存在するか確認。
- Q: Composerコマンド(
bin/cake
)が動作しない?- A: カレントディレクトリがCakePHPプロジェクトルート(
/Applications/ServBay/www/servbay-cakephp-app
)か確認。 - ServBayでPHP・Composerパッケージが起動しているか確認。
- ターミナルで
php
コマンドが使えるか(ServBayは通常PATHを設定済み、必要ならPATHを手動設定)。
- A: カレントディレクトリがCakePHPプロジェクトルート(
まとめ
ServBayなら、CakePHPプロジェクト用のローカル開発環境を効率よく構築できます。PHP、Composer、Webサーバー、データベースなど必要なサービスがプリインストール・プリセットされているため、面倒な環境設定を大幅に省略可能です。本記事ではプロジェクト作成から基本設定、Webサーバー・DB・キャッシュ統合まで包括的に手順を解説しました。ServBayの利便性を活かして、コード開発へ集中できる開発体験をぜひ実現してください。