ServBayでThinkPHP 8プロジェクトを作成・実行する方法
本記事では、強力なローカルWeb開発環境「ServBay」を用いて、ThinkPHP 8フレームワークベースのPHPプロジェクトを迅速に作成・設定・運用する手順を解説します。ServBayは、事前設定済みのPHP環境、Webサーバー(CaddyまたはNginx)、複数のデータベース統合を提供し、ThinkPHPプロジェクトの立ち上げを非常にシンプルにします。
ThinkPHPとは?
ThinkPHPは中国発のオープンソース・高速・シンプルなオブジェクト指向PHP開発フレームワークです。シンプルで効率的な開発ポリシーを遵守し、モダンなWebアプリケーション構築に便利なツールセットを開発者に提供します。強力なORM、柔軟なルーティング、内蔵テンプレートエンジン、キャッシュ対応など、豊富な機能性と活発なコミュニティサポートにより、中国のPHP開発現場で広く利用されています。
ThinkPHPの主な特徴とメリット
- シンプル&高効率: フレームワーク設計はシンプルで構造が明快。保守性・理解しやすさ・開発効率が高いです。
- 充実の機能: MVC構造、ORM、テンプレートエンジン、キャッシュ、セッション管理、権限認証、フォームトークンなど、Web開発に必要な標準機能を内蔵。
- パワフルなORM: 使いやすく機能豊富なオブジェクト-リレーショナルマッピングがデータベース操作を簡素化。
- 柔軟なルーティング: 多様なルート定義をサポートし、複雑なURL構成にも対応。
- 豊かなエコシステム: 膨大な拡張ライブラリ・プラグインとアクティブな開発者コミュニティから、リソースが豊富。
- 継続的なアップデート: フレームワークは頻繁にバージョンアップしており、PHP言語やWebトレンドに素早く追従。
ThinkPHPは小規模から大規模なエンタープライズ用途まで、あらゆるWeb開発ニーズに適しています。
ServBayでThinkPHP 8プロジェクトを構築する
ServBayは、ThinkPHP 8プロジェクトのローカル開発に最適な環境を提供します。主な特長は以下の通りです。
- 複数バージョンのPHPと主要な拡張機能を事前インストール。
- 内蔵Webサーバー(CaddyまたはNginx)でサイト設定が容易。
- MySQL・PostgreSQL・MongoDB・Redis・Memcachedなどのデータベースサービス統合。
- Composer依存管理ツールが内蔵済み。
これらのServBayの機能を活用し、ThinkPHP 8プロジェクトを素早く構築できます。
事前準備
下記準備が完了していることをご確認ください。
- macOSまたはWindowsにてServBayをダウンロード・インストール済みであること。
- ServBayが実行中で、必要なPHPバージョン(ThinkPHP 8はPHP 8.0以上必須)、および利用するデータベースサービス(MySQL, PostgreSQL, Redis, Memcachedなど)が起動していること。[ServBayコントロールパネルの「パッケージ」タブ]でこれらを確認・開始できます。
ThinkPHPプロジェクトの作成
ServBayでは、ローカルのWebサイトファイルを /Applications/ServBay/www ディレクトリにまとめて保存することが推奨されています。これによりサイト管理が容易になります。
Composerがインストールされていることの確認
ServBayにはComposerがプリインストールされており、通常追加インストール不要です。ServBayのターミナルで
composer --versionを実行し、インストール済みか確認できます。ComposerでThinkPHPプロジェクトを作成
macOSのターミナルを開き、以下コマンドでウェブサイトルートに新しいThinkPHP 8プロジェクトを作成します。
bashcd /Applications/ServBay/www composer create-project topthink/think servbay-thinkphp-app1
2これにより
/Applications/ServBay/www内にservbay-thinkphp-appフォルダが作成され、ThinkPHP 8のコアや依存パッケージがダウンロードされます。プロジェクトディレクトリへ移動
プロジェクトの作成が完了したら、次のコマンドで移動します。
bashcd /Applications/ServBay/www/servbay-thinkphp-app1
プロジェクトの初期設定
プロジェクト作成後、基本的な設定を行います。
データベース接続情報の設定
ThinkPHPのデータベース設定は通常
config/database.phpファイルで行います。ServBayで起動したデータベースサービスに合わせて、接続情報を修正してください。下記はServBayのデフォルトMySQLサービス例です。
php<?php // config/database.php return [ // デフォルトのデータベース接続設定 'default' => env('database.driver', 'mysql'), // 各データベース接続設定 'connections' => [ 'mysql' => [ // データベースタイプ 'type' => 'mysql', // サーバーアドレス 'hostname' => env('database.hostname', '127.0.0.1'), // データベース名 'database' => env('database.database', 'servbay_thinkphp_app'), // プロジェクト専用DB作成を推奨 // ユーザー名 'username' => env('database.username', 'root'), // パスワード 'password' => env('database.password', 'password'), // ServBayのデフォルトパス、ローカル開発専用! // ポート番号 'hostport' => env('database.hostport', '3306'), // ... その他の設定 ... ], // ... 他データベース接続設定 ... ], ];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重要:
databaseの値は本プロジェクト用に作成した実際のデータベース名へ変更してください(例えば、ServBayのphpMyAdminやAdminerでservbay_thinkphp_appを作成)。- ServBayのデフォルト
rootユーザーのパスワードはpasswordです。このパスワードはローカル開発専用。商用環境では絶対に使用せず、十分強力なパスワード&最小権限ユーザーを別途設定してください。 .envファイルで環境変数管理する場合、.envの値がconfig/database.phpのデフォルト値より優先されます。
Webサーバーの設定
ThinkPHPフレームワークの入口は public/index.php であり、URLリライト(Rewrite)によるルーティングが必須です。静的ファイルに直接アクセスする一般的なウェブサーバー設定とは異なるため、ServBayの内蔵Rewriteルール機能を使います。
サイト設定画面のRewriteルールドロップダウンで「ThinkPHP」を選び、保存します。
ServBayでの詳細なサイト設定手順は最初のサイト追加ガイドをご参照ください。
サンプルコードの追加
Webサイト設定やThinkPHPの基本ルーティング動作を確認するため、簡単なルートとコントローラーを追加します。
プロジェクトの /Applications/ServBay/www/servbay-thinkphp-app/route/app.php ファイルを編集し、下のコードでGETリクエストルートを定義してください。
php
<?php
// route/app.php
use think\facade\Route;
// servbayルートを定義し、/servbayアクセスで無名関数を実行
Route::get('servbay', function () {
return 'Hello ServBay!';
});
// ... その他ルート ...1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Webサイトのアクセス確認
ここまで完了したら、Webブラウザで設定したローカルドメインと、サンプルルートのURLにアクセスします。
https://thinkphp.servbay.demo/servbay
正しく設定できていれば、ブラウザに Hello ServBay!と表示されます。ThinkPHP 8プロジェクトがServBay環境で正常に稼働し、Webサーバー及びPHP-FPMの設定も成功しています。
NoSQLデータベースの利用例
ServBayにはMemcachedやRedisなど多様なNoSQLデータベースがプリインストールされています。ThinkPHPはキャッシュ抽象レイヤーを持ち、これらNoSQLサービスと簡単に統合できます。
Memcachedの利用例
Memcached拡張のインストール
ServBayのPHPパッケージにはMemcached拡張が組み込まれています。ServBayコントロールパネル「パッケージ」タブからMemcachedサービスが起動しているか確認しましょう。
Memcachedキャッシュの設定
config/cache.phpを編集し、Memcachedをキャッシュドライバとして指定します。php<?php // config/cache.php return [ // デフォルトキャッシュドライバ 'default' => env('cache.driver', 'memcached'), // キャッシュ接続情報 'stores' => [ 'memcached' => [ // キャッシュタイプ 'type' => 'memcached', // サーバーリスト 'host' => '127.0.0.1', // ServBay Memcachedの標準アドレス 'port' => 11211, // 標準ポート 'persistent' => false, 'expire' => 0, 'timeout' => 0, 'prefix' => '', ], // ... その他キャッシュ設定 ... ], ];1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23コード内でMemcachedキャッシュを使用
コントローラーやルートコールバックでThinkPHPの
Cacheファサードを使いMemcached操作ができます。php<?php use think\facade\Cache; use think\facade\Route; Route::get('/memcached-example', function () { // 600秒有効のキャッシュセット Cache::set('my_memcached_key', 'This value is from Memcached!', 600); // キャッシュ取得 $value = Cache::get('my_memcached_key'); return 'Value from Memcached: ' . $value; });1
2
3
4
5
6
7
8
9
10
11
12
13https://thinkphp.servbay.demo/memcached-exampleで動作確認できます。
Redisの利用例
Redis拡張のインストール
ServBayのPHPパッケージにはRedis拡張がプリインストール済みです。コントロールパネル「パッケージ」タブでRedisサービス起動済みを確認してください。
Redisキャッシュの設定
config/cache.phpを編集し、Redisをキャッシュドライバに指定します。php<?php // config/cache.php return [ // デフォルトキャッシュドライバ 'default' => env('cache.driver', 'redis'), // キャッシュ接続設定 'stores' => [ 'redis' => [ // キャッシュタイプ 'type' => 'redis', // サーバーアドレス 'host' => env('cache.host', '127.0.0.1'), // ServBay Redisの標準アドレス // ポート 'port' => env('cache.port', 6379), // 標準ポート // パスワード(ServBayはデフォルト未設定) 'password' => env('cache.password', ''), // パスワードなし 'select' => 0, 'timeout' => 0, 'expire' => 0, 'persistent' => false, 'prefix' => '', ], // ... 他キャッシュ設定 ... ], ];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注意: ServBayのRedisはデフォルトでパスワード未設定です。手動でパスワード追加する場合は、ここに設定してください。
コード内でRedisキャッシュを使用
コントローラーやルートコールバックでThinkPHPの
Cacheファサードを使いRedis操作ができます。php<?php use think\facade\Cache; use think\facade\Route; Route::get('/redis-example', function () { // 永続キャッシュセット(または有効期間を第3引数で設定) Cache::set('my_redis_key', 'Hello from Redis!'); // キャッシュ取得 $value = Cache::get('my_redis_key'); return 'Value from Redis: ' . $value; });1
2
3
4
5
6
7
8
9
10
11
12
13https://thinkphp.servbay.demo/redis-exampleで動作確認できます。
リレーショナルデータベースの利用例
ServBayにはMySQLやPostgreSQLなど主要なRDBMSが統合されています。ThinkPHPのORMを用いて容易に操作可能です。
ThinkPHPデータベースマイグレーションツールの利用
ThinkPHPでは、データベース構造管理のためマイグレーションツールを利用します。チーム開発やバージョン管理にも有効です。
マイグレーションツールのインストール
プロジェクトルートで、ThinkPHPのマイグレーション拡張をComposerでインストールします。
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration1
2マイグレーションファイル作成
コマンドラインツールで新規マイグレーションファイルを生成します。例として
usersテーブル用のマイグレーションを作成します。bashphp think migrate:create CreateUserTable1これで
database/migrationsフォルダに、タイムスタンプ入りのファイル名(例:20231027100000_create_user_table.php)で新規PHPファイルが生成されます。マイグレーションファイル編集
database/migrations内の新規ファイルを開き、up()メソッドでusersテーブル構造を定義します。php<?php // database/migrations/YYYYMMDDHHMMSS_create_user_table.php use think\migration\Migrator; use think\migration\db\Column; class CreateUserTable extends Migrator { /** * Change Method. * * Write your reversible migrations using this method. * * More information on writing migrations is available here: * http://docs.phinx.org/en/latest/migrations.html#the-change-method * * The following commands can be used in this method and Phinx will * automatically reverse them when rolling back: * * createTable * renameTable * addColumn * addCustomColumn * renameColumn * addIndex * addForeignKey * createDatabase * renameDatabase * dropTable * dropColumn * dropIndex * dropForeignKey */ public function change() { // createTableメソッドでテーブル作成 $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'ユーザー名']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'メールアドレス']) ->addIndex(['email'], ['unique' => true]) // 一意制約付きインデックス追加 ->addTimestamps() // created_at/updated_at追加 ->create(); // テーブル作成 } // changeメソッド利用しない場合はup/downを個別定義できます /* public function up() { $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'ユーザー名']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'メールアドレス']) ->addIndex(['email'], ['unique' => true]) ->addTimestamps() ->create(); } public function down() { $this->dropTable('users'); } */ }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
62マイグレーション実行
ServBayターミナルでプロジェクトルートに移動し、次のコマンドで
usersテーブルが作成されます。bashphp think migrate:run1成功すると、DBに新しい
usersテーブルが追加されます。
MySQLの利用例
MySQLサービス起動済み&config/database.phpのMySQL設定が正しい前提です。
MySQL接続設定
前述「プロジェクト初期設定」のMySQL接続例を参考に、
config/database.php内の設定を再確認してください。コードでユーザーデータを書き込む
ThinkPHPの
DbファサードまたはORMモデルを用い、下記のようにデータを挿入します。php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-add-user', function () { try { Db::table('users')->insert([ 'name' => 'ServBay Demo User', 'email' => 'demo@servbay.demo', // ブランドデモ用メール 'created_at' => date('Y-m-d H:i:s'), // addTimestamps()自動補完なしの場合は手動で 'updated_at' => date('Y-m-d H:i:s'), ]); return 'User added successfully!'; } catch (\Exception $e) { return 'Error adding user: ' . $e->getMessage(); } });1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17https://thinkphp.servbay.demo/mysql-add-userで動作確認できます。コードでユーザーデータを読み取る
DbファサードやORMモデルでデータを取得します。php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-users', function () { $users = Db::table('users')->select(); // 全ユーザーデータ取得 return json($users); // JSON形式で返却 });1
2
3
4
5
6
7
8https://thinkphp.servbay.demo/mysql-usersでテーブルデータを確認できます。
PostgreSQLの利用例
PostgreSQLサービス起動済み&config/database.phpの設定済み前提です。
PostgreSQL接続設定
config/database.phpに下記(またはご自身の設定情報)でPostgreSQL接続情報を記述してください。php<?php // config/database.php(一部) return [ // ... その他設定 ... 'connections' => [ // ... MySQL設定 ... 'pgsql' => [ // データベースタイプ 'type' => 'pgsql', // サーバーアドレス 'hostname' => env('database.hostname', '127.0.0.1'), // データベース名 'database' => env('database.database', 'servbay_thinkphp_app'), // プロジェクト専用DB作成を推奨 // ユーザー名 'username' => env('database.username', 'root'), // パスワード 'password' => env('database.password', 'password'), // ServBayのデフォルト、ローカル開発専用! // ポート 'hostport' => env('database.hostport', '5432'), // 標準ポート // ... 他設定 ... ], // ... 他データベース接続設定 ... ], ];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重要:
- MySQL同様、プロジェクトごとにDBを作成し、設定で指定しましょう。
- ServBayのPostgreSQLデフォルト
rootパスワードもpassword。ローカル開発以外では利用厳禁です。
コードでユーザーデータを書き込む
DbファサードやORMモデルを使い、pgsql接続を明示して挿入します。php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-add-user', function () { try { Db::connect('pgsql')->table('users')->insert([ // pgsql接続指定 'name' => 'ServBay PgSQL User', 'email' => 'pgsql-demo@servbay.demo', // ブランドデモ用メール // 時刻フィールドはThinkPHPバージョンやマイグレーション定義次第で手動補完必要 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); return 'PostgreSQL User added successfully!'; } catch (\Exception $e) { return 'Error adding PostgreSQL user: ' . $e->getMessage(); } });1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18https://thinkphp.servbay.demo/pgsql-add-userで動作確認できます。コードでユーザーデータを読み取る
DbファサードやORMモデルで、pgsql接続指定しデータ取得します。php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-users', function () { $users = Db::connect('pgsql')->table('users')->select(); // pgsql接続で取得 return json($users); // JSON形式で返却 });1
2
3
4
5
6
7
8https://thinkphp.servbay.demo/pgsql-usersでテーブルデータを確認できます。
まとめ
以上で、ServBayローカル開発環境を使ってThinkPHP 8プロジェクトの作成・設定・運用までを一通り実施できました。ServBay内蔵Composerによるプロジェクト作成、Caddy WebサーバーでのThinkPHPルーティング設定、そしてMySQL・PostgreSQL・Memcached・Redisなど各種DBサービス連携まで、一連の手順を解説しました。
ServBayなら、ThinkPHP等PHPフレームワークのローカル開発環境構築を大幅に効率化でき、ビジネスロジック実装に集中できます。ぜひServBayが提供する多彩なパッケージや機能を活用し、あなたのThinkPHPアプリ開発を加速させましょう。
