ServBayでThinkPHP 8プロジェクトを作成・実行する
本ドキュメントでは、強力なローカルWeb開発環境であるServBayを使い、ThinkPHP 8フレームワークを用いたPHPプロジェクトを迅速に作成・設定し、実行する手順をご案内します。ServBayは、プリセットされたPHP環境やWebサーバー(CaddyまたはNginx)、各種データベースを提供しており、ThinkPHPプロジェクトのローカル構築を大幅に簡素化できます。
ThinkPHPとは?
ThinkPHPは中国発祥のオープンソースで高速・シンプルなオブジェクト指向PHP開発フレームワークです。シンプルかつ高効率な開発原則に則り、開発者が現代的なWebアプリケーションを構築するための便利なツールセットを提供します。ThinkPHPは使いやすさと豊富な機能群(強力なORMや柔軟なルーティング、ビルトインテンプレートエンジン、キャッシュサポートなど)、そして活発なコミュニティサポートによって、中国国内のPHP開発現場で広く利用されています。
ThinkPHPの主な特徴とメリット
- シンプルで高効率: フレームワーク設計は簡潔でコード構造も明確。理解・保守しやすく開発効率が高い。
- 機能が充実: MVC構造・ORM・テンプレートエンジン・キャッシュ・セッション管理・認証・フォームトークンなどWeb開発に必要なコンポーネントを内蔵。
- 強力なORM: 高機能かつ使いやすいオブジェクト関係マッピング機能でDB操作がシンプルに。
- 柔軟なルーティング: 多様なルーティング定義方式に対応し、複雑なURL構造のニーズにも対応可能。
- 充実したエコシステム: 多数の拡張ライブラリやプラグイン、そして巨大で活発な開発者コミュニティ。
- 継続的なアップデート: バージョンアップが迅速で、PHP言語やWebの最新トレンドを反映。
ThinkPHPは小規模プロジェクトから大規模なエンタープライズ開発まで、幅広いWeb開発ニーズに対応します。
ServBayを使ったThinkPHP 8プロジェクト構築
ServBayはThinkPHP 8プロジェクトのローカル開発に最適な環境を提供しています。主な特長:
- さまざまなバージョンのPHPと主要拡張機能がプリインストール済み
- 内蔵Webサーバー(Caddy/Nginx)で柔軟なサイト設定が可能
- MySQL・PostgreSQL・MongoDB・Redis・Memcachedなど複数データベースサービスを統合
- Composer依存管理ツールも標準搭載
本ガイドでは、これらの機能を活用して、ThinkPHP 8プロジェクトを手早く立ち上げる方法を解説します。
事前準備
始める前に、以下の準備ができているかご確認ください:
- macOS上でServBayをダウンロード&インストール済みであること。
- ServBayが起動し、必要なPHPバージョン(ThinkPHP 8にはPHP 8.0以上が必須)および利用予定のデータベースサービス(MySQL・PostgreSQL・Redis・Memcachedなど)が起動済みであること。これらのサービスはServBayコントロールパネルの「パッケージ」タブで確認・起動できます。
ThinkPHPプロジェクトの作成
ServBayではローカルWebサイトのファイルを /Applications/ServBay/www
ディレクトリに一元管理することを推奨しています。これにより、ServBayによるサイト管理が円滑になります。
Composerのインストール確認
ServBayには最初からComposerが搭載されています。通常追加インストールは不要で、ServBayターミナルで
composer --version
を実行すればバージョン確認ができます。ComposerでThinkPHPプロジェクトを作成
macOSターミナルを開き、次のコマンドでServBayのWebサイトルートディレクトリにThinkPHP 8新規プロジェクトを作成します:
bashcd /Applications/ServBay/www composer create-project topthink/think servbay-thinkphp-app
1
2これにより
/Applications/ServBay/www
配下にservbay-thinkphp-app
という新規フォルダが作成され、ThinkPHP 8本体と依存パッケージがダウンロードされます。プロジェクトディレクトリに移動
プロジェクト作成後、プロジェクトディレクトリへ移動します:
bashcd /Applications/ServBay/www/servbay-thinkphp-app
1
プロジェクトの初期設定
プロジェクト作成後、基本的な構成を行います。
データベース接続情報の設定
ThinkPHPのDB設定は通常
config/database.php
に記載されています。ServBay上で起動中のDBサービスに応じて、適切な接続情報となるように本ファイルを編集します。以下はServBay標準MySQLサービスを利用する一例です:
php<?php // config/database.php return [ // デフォルトのDB接続設定 'default' => env('database.driver', 'mysql'), // 各DB接続の設定 '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'), // ... その他の設定 ... ], // ... その他のDB接続 ... ], ];
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
の値を、実際に本プロジェクト用に作成したDB名に変更してください(例:ServBayのphpMyAdminやAdminerでservbay_thinkphp_app
DBを作成)。- ServBayのMySQL・rootユーザーの標準パスワードは
password
です。これはローカル開発限定のため、絶対に本番運用で使わないでください! 本番環境では必ず強固なパスワード・最小権限ユーザーを使いましょう。 - 環境変数管理に
.env
ファイルを利用している場合は、そちらの設定がconfig/database.php
の値より優先されますのでご注意ください。
Webサーバーの設定
ThinkPHPのエントリーポイントは public/index.php
であり、ルーティング処理のためにURLリライト(Rewrite)規則が必要となります。ThinkPHP独特のルーティング仕様のため、ServBayプリセットのRewriteルールを用意しています。
Webサイト設定画面のRewriteルールリストから「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ブラウザで設定したローカルドメインと上例のルートを下記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拡張があらかじめインストールされています。「パッケージ」タブでMemcached本体サービスが起動済みか確認だけ行ってください。
Memcachedをキャッシュとして設定
config/cache.php
を編集し、ThinkPHPで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, // ServBay標準Memcachedポート '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
ファサードを使って操作します: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
を編集し、ThinkPHPで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標準Redisポート // パスワード(標準ではなし) 'password' => env('cache.password', ''), // ServBayのRedisは標準でパスワードなし '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は標準でパスワード未設定です。手動で設定している場合は
password
欄を更新してください。コードからRedisキャッシュを利用
コントローラやルーティングコールバック内で
Cache
ファサードを使って操作します: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など主流リレーショナルDBを統合しています。ThinkPHPのORMを活用すれば、これらデータベースとの連携が容易です。
ThinkPHPマイグレーションツールの利用
ThinkPHPでは、チームでの開発やバージョン管理に適したDBマイグレーション(構造変更管理)ツールが利用可能です。
マイグレーションツールのインストール
プロジェクトルートで次のコマンドでThinkPHP拡張(think-migration)をインストールします:
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration
1
2マイグレーションファイルの作成
ThinkPHPコマンドラインで新規マイグレーションファイルを生成:
bashphp think migrate:create CreateUserTable
1これで
database/migrations
配下に日時+名称付き(例:20231027100000_create_user_table.php
)のファイルが自動生成されます。マイグレーションファイルを編集
生成したファイルの
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:run
1正常終了すればDBに
users
テーブルが新たに生成されます。
MySQL利用例
MySQLサービスがServBay上で起動済みで、config/database.php
に前述の設定済みであることを前提とします。
MySQL接続の設定確認
前述「プロジェクト初期設定」のMySQL接続例を参照し、
config/database.php
内の設定値を必ずご自身の環境に合わせてください。ユーザーデータの書き込み例
ThinkPHPの
Db
ファサードやORMを使ってデータを挿入できます。以下はDb
ファサード利用例: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
にアクセスすればusers
テーブルの内容を確認できます。
PostgreSQL利用例
ServBayでPostgreSQLサービスが起動済みで、config/database.php
にも適切な設定が反映されていることを想定します。
PostgreSQL接続設定
config/database.php
にて下記のようにPostgreSQL接続を設定します(ご自身の実環境に応じて編集してください):php<?php // config/database.php(一部抜粋) return [ // ... 他の設定 ... 'connections' => [ // ... MySQL設定 ... 'pgsql' => [ // DBタイプ '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'), // PostgreSQL標準ポート // ... その他 ... ], // ... 他のDB接続 ... ], ];
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の場合と同様、プロジェクト専用のPostgreSQLデータベースを作成し、設定内で指定してください。
- ServBay標準のPostgreSQL rootユーザーのパスワードも
password
です。必ずローカル開発用途のみにご利用ください。
ユーザーデータの書き込み例
ThinkPHPの
Db
ファサードやORMでデータ挿入が可能です。PostgreSQL接続を明示します: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', // デモ用ブランドメール // created_at・updated_atはマイグレーション構造やフレームワークバージョンによる '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
で動作チェックできます。ユーザーデータの読み出し例
データベースからの取得も接続名を指定します:
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
でPostgreSQLのデータを閲覧できます。
まとめ
以上の手順に従えば、ServBayローカル開発環境でThinkPHP 8プロジェクトを作成・設定し、様々なデータベース連携やWebサーバー設定まで一通り実践できます。Composerによるセットアップ、Caddyウェブサーバー上でのルーティング処理、MySQL・PostgreSQL・Memcached・Redisとの接続方法も習得できました。
ServBayなら、ThinkPHPのようなPHPフレームワークのローカル開発環境構築が驚くほどシンプルに。これで実装業務そのものに集中できる環境が整ったはずです。今後は、ServBayの多彩なソフトウェアパッケージや便利機能を最大活用して、ThinkPHPアプリ開発をどんどん進めていきましょう。