ServBayでYii 2プロジェクトを作成・実行する方法
概要:Yii 2とは?
Yii 2は、モダンなWebアプリケーション開発のために設計された高性能・コンポーネントベースのPHPフレームワークです。MVC(Model-View-Controller)デザインパターンに則り、開発者が拡張性・品質の高いWebアプリを効率的に構築できるよう、豊富な機能とツールを提供します。特に、キャッシュ・セキュリティ・RESTful API開発サポートなどの強力な機能と柔軟なアーキテクチャ、高いパフォーマンスで多くの開発者に支持されています。
Yii 2の主な特徴とメリット
- 高パフォーマンス: 高い同時接続処理能力を持ち、パフォーマンスの要求が高いアプリ開発に最適です。
- モジュール構造: モジュール化された設計により、コードの整理やコンポーネントの再利用が容易です。
- セキュリティ: 入力検証、出力フィルタリング、CSRF/XSS対策、認証・認可フレームワークなど、様々なセキュリティ機能を内蔵しています。
- 使いやすさ: 直感的なAPI設計と充実したドキュメントにより、学習コストを減らし、素早く開発を始められます。
- 活発なコミュニティ: 多数のサードパーティ製拡張、フォーラムやQ&Aが用意されており、困ったときにすぐに助けを得られます。
- 便利な開発ツール: データベースマイグレーション、コード生成など、CLIツールを備え、開発効率を高めます。
Yii 2は、エンタープライズ向けシステムやRESTful API、ポータルサイトなどあらゆるWebプロジェクトに最適なフレームワークです。
ServBayでYii 2プロジェクトを動作させる
ServBayは、macOSとWindows専用のローカルWeb開発環境です。PHPや複数のデータベース(MySQLやPostgreSQL、MongoDB、Redisなど)、Webサーバー(Caddy、Nginx)、そしてComposer、Node.js、Python、Go、Javaなどの開発ツールを標準搭載し、“すぐに使える”便利な開発プラットフォームを提供します。
このガイドでは、ServBayのPHP環境・Composer・データベースサービスを使って、Yii 2ベースのアプリを構築・実行する手順を分かりやすく解説します。“Webサイト”機能を活用してローカルWebサーバーの設定からプロジェクト公開までを、簡単なステップで実現できます。
必要条件
作業を始める前に、以下を準備してください:
- macOSまたはWindowsにServBayを正常にインストール・起動済みであること。
- ServBayで必要なPHPバージョン(例:PHP 8.3以上)がインストール・有効化されていること。
- ServBayで使用したいデータベースサービス(例:MySQLやPostgreSQL)、キャッシュサービス(Memcached、Redis)がインストール・有効化されていること。
ServBayのメイン画面で、インストール済みパッケージと稼働状況の確認・管理が可能です。
Yii 2プロジェクトの作成
TIP
ServBayでは下記ディレクトリ内にプロジェクトファイルを配置することを推奨しています。これにより、ファイル構造が整理され、ServBayの“Webサイト”管理が容易になります:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Composerの利用: ServBayはComposerツールを標準搭載しているため、別途インストール不要です。ターミナルで
composer
コマンドを直接使えます。プロジェクトディレクトリ作成: ターミナルを開き、ServBayのデフォルトWebルートへ移動し、新しいプロジェクトディレクトリを作成します。
macOS:
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Windows:
cmdcd C:\ServBay\www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3ComposerでYii 2プロジェクトを作成:
servbay-yii2-app
ディレクトリ内で、下記コマンドを実行してYii 2ベーシックアプリテンプレートを作成します。bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1このコマンドはYii 2ベーシックアプリと全依存パッケージをカレントディレクトリ(
.
)にダウンロード・インストールします。インストール完了までお待ちください。プロジェクトディレクトリへ移動: ターミナルで必ずプロジェクトのルートディレクトリにいることを確認してください。以降の作業はこのディレクトリ内で行います。
macOS:
bashcd /Applications/ServBay/www/servbay-yii2-app
1Windows:
cmdcd C:\ServBay\www\servbay-yii2-app
1
初期設定
Yii 2プロジェクトを作成した後は、データベース接続やコンポーネント設定などの基本構成が必要です。
データベース接続設定: プロジェクトルートの
config/db.php
を編集します。ServBayで稼働中のデータベースサービス(MySQLまたはPostgreSQL)とその設定(ユーザーは通常root
、パスワードは通常password
。設定変更していれば適宜修正)に合わせて、接続情報を書き換えます。まず、ServBayのデータベースサービスで本プロジェクト用の新規データベース(例:
servbay_yii2_app
)を作成してください。ServBay同梱のAdminerツールまたはお好みのDBクライアント(Sequel Ace、TablePlus等)で作成できます。AdminerはServBayアプリのデータベースセクションからアクセス可能です。MySQLの場合:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbnameは作成したDB名 'username' => 'root', // DBユーザー名 'password' => 'password', // DBパスワード 'charset' => 'utf8mb4', // utf8mb4により幅広い文字セット対応 ];
1
2
3
4
5
6
7
8
9PostgreSQLの場合:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'pgsql:host=127.0.0.1;port=5432;dbname=servbay_yii2_app', // dbnameは作成したDB名, portは通常5432 'username' => 'root', // DBユーザー名 'password' => 'password', // DBパスワード 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // PostgreSQLデフォルトschema ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15実際の環境に合わせて
config/db.php
を修正してください。キャッシュおよびRedisコンポーネント設定: プロジェクトルートの
config/web.php
のcomponents
部分にMemcachedやRedisの設定を追加・編集します。ServBayデフォルトでMemcachedは11211
、Redisは6379
ポートを使用します。php<?php // ... 他設定項目 'components' => [ // ... 既存の他のコンポーネント(request, cache, user, errorHandler, log, urlManager等) 'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, // Memcachedデフォルトポート 'weight' => 100, ], ], ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, // Redisデフォルトポート 'database' => 0, // Redis 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
28Memcached・Redisサービスを必ずServBayで起動してください。Redisをキャッシュに使う場合は
yiisoft/yii2-redis
パッケージが必要です(Composerでcreate-project
時に基礎依存はインストールされますが、他が必要ならcomposer require yiisoft/yii2-redis
等で追加)。Memcachedは通常yiisoft/yii2-memcached
。テンプレートにより既存の場合もあります。
Webサーバー(ServBay Webサイト)の設定
ServBayの“Webサイト”機能を使い、ローカルWebサーバー(CaddyやNginx)でYii 2プロジェクトを公開します。
- ServBayアプリを起動: ServBayを立ち上げます。
- Webサイト設定に移動: サイドメニューなどから“Webサイト”やその項目を選択します。
- 新規サイト追加:
+
や「追加」などのボタンから新しいWebサイト設定を開始します。 - サイト情報記入:
- 名前: 例
My First Yii 2 Dev Site
のような判別しやすい名称。 - ドメイン名: ローカル開発用の任意のドメイン(例:
servbay-yii2-test.local
)。ServBayが自動でDNS設定し127.0.0.1
へ解決します。 - サイトタイプ:
PHP
を選択。 - PHPバージョン: 利用するPHPバージョン(例:
8.3
)を選択・有効化済みであることを確認。 - サイトルートディレクトリ: 重要項目です。基礎テンプレートの場合、公開ディレクトリは
web
配下なので下記のように設定します:- macOS:
/Applications/ServBay/www/servbay-yii2-app/web
- Windows:
C:\ServBay\www\servbay-yii2-app\web
- macOS:
- 名前: 例
- 保存&適用: 設定保存後、ServBayが自動でWebサーバーの設定をリロードします。
詳しいサイト設定手順は公式ドキュメント:最初のWebサイト追加も参考にしてください。
ServBayはローカル開発ドメイン用にSSL証明書を自動で発行・信頼(ServBay User CAやServBay Public CA経由)するため、HTTPSアクセスも安全に利用可能です。
機能デモ用サンプルコード追加
データベースやキャッシュの動作を確認するため、Yii 2既定のコントローラーにサンプルアクションを追加します。
プロジェクトルートの controllers/SiteController.php
に 以下のメソッドを SiteController
クラスへ追加してください:
php
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
use yii\db\Exception as DbException; // データベース例外クラスのインポート
class SiteController extends Controller
{
/**
* ホームページ表示
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Memcachedの利用例デモ
*
* @return Response
*/
public function actionMemcached()
{
$cache = Yii::$app->cache;
$key = 'my_memcached_test_key';
$data = 'Hello Memcached from ServBay!';
$duration = 60; // 60秒キャッシュ
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcachedでデータ保存成功。取得値: " . $value);
} else {
return $this->asText("Memcachedへのデータ保存失敗。サービスと設定を確認してください。");
}
}
/**
* Redisの利用例デモ
*
* @return Response
*/
public function actionRedis()
{
$redis = Yii::$app->redis;
$key = 'my_redis_test_key';
$data = 'Hello Redis from ServBay!';
try {
if ($redis->set($key, $data)) {
$value = $redis->get($key);
return $this->asText("Redisでデータ保存成功。取得値: " . $value);
} else {
return $this->asText("Redisへのデータ保存失敗。サービスと設定を確認してください。");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Redisエラー: " . $e->getMessage() . "。サービスと設定を確認してください。");
}
}
/**
* データベースへのユーザー追加デモ
* 'users'テーブルが存在する前提です。
*
* @return Response
*/
public function actionMysqlAdd() // 正しい設定ならPostgreSQLでも利用可能
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBayデモユーザー', // ブランド名入りのデモ用
'email' => 'demo-user@servbay.test', // ブランド名入りのデモ用メール
])->execute();
return $this->asText("ユーザー追加に成功。変更した行数: " . $count);
} catch (DbException $e) {
return $this->asText("DBへユーザー追加失敗。エラー: " . $e->getMessage() . "。サービス、設定、'users'テーブルの有無を確認してください。");
}
}
/**
* データベースからユーザー取得デモ
* 'users'テーブルが存在する前提です。
*
* @return Response
*/
public function actionMysql() // 正しい設定ならPostgreSQLでも利用可能
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// 整形出力(機密情報や混乱したフォーマットを避けるため)
$output = "ユーザー取得結果:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, 名前: {$user['name']}, メール: {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("DBからユーザー取得失敗。エラー: " . $e->getMessage() . "。サービス、設定、'users'テーブルの有無を確認してください。");
}
}
// PostgreSQL利用時は専用のactionを追加可能ですが、基本は同じdbコンポーネントで共用可能
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* プレーンテキストで整形出力
* @param string $text
* @return Response
*/
protected function asText($text)
{
Yii::$app->response->format = Response::FORMAT_RAW;
Yii::$app->response->getHeaders()->add('Content-Type', 'text/plain');
return $text;
}
/**
* JSONで整形出力
* @param mixed $data
* @return Response
*/
protected function asJson($data)
{
Yii::$app->response->format = Response::FORMAT_JSON;
return $data;
}
}
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
actionMysqlAdd
やactionMysql
にはエラー処理と出力整形を追加し、デモ用のユーザー名・メールにはServBayブランド名を反映しています。
続いて、プロジェクトルートの views/site/index.php
を編集します(actionIndex
のビュー)。デフォルト内容そのままでも、下記のようにカスタマイズすることも可能です:
php
<?php
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = 'ServBay上のMy Yii2 Application'; // タイトルを書き換え
?>
<div class="site-index">
<div class="jumbotron">
<h1>Congratulations!</h1>
<p class="lead">Yii2アプリケーションの作成とServBayによる構成が成功しました!</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Yiiのスタートガイドへ</a></p>
</div>
<div class="body-content">
<h2>機能デモ</h2>
<ul>
<li><a href="<?= Html::toRoute('site/memcached') ?>">Memcachedテスト</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Redisテスト</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">DBにユーザー追加</a>('users'テーブル必須)</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">DBからユーザー取得</a>('users'テーブル必須)</li>
</ul>
<p>MemcachedやRedis、使用するデータベース(MySQL/PostgreSQL)は、ServBayでサービスが稼働・設定済みであることを確認してください(`config/web.php`・`config/db.php`を適切に設定)。</p>
<p>データベース例の実行には、Yiiマイグレーションを用いて 'users'テーブルを先に作成してください(下記参照)。</p>
</div>
</div>
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
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
機能テスト用リンクを追加し、サンプルアクションを簡単に確認できるようになっています。
RDB:テーブル構築(マイグレーション)
データベース関連のサンプル(actionMysqlAdd
, actionMysql
)を動作させるためには、DB内にusers
テーブルが必要です。Yiiフレームワークでは、データベーススキーマ管理にマイグレーションを推奨しています。
マイグレーションファイルの作成: ターミナルでプロジェクトルートへ移動し、下記コマンドで新規マイグレーションファイルを生成します。
ルートディレクトリ例:
- macOS:
/Applications/ServBay/www/servbay-yii2-app
- Windows:
C:\ServBay\www\servbay-yii2-app
bashphp yii migrate/create create_users_table
1コマンド後確認画面が表示されるので
yes
で進みます。mYYYYMMDD_HHMMSS_create_users_table.php
のようなファイルがmigrations
ディレクトリに生成されます。- macOS:
マイグレーションファイル編集: 上記ファイルの
up()
メソッドを編集し、テーブル構造を定義します。php<?php use yii\db\Migration; /** * `{{%users}}`テーブル生成 */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXXはタイムスタンプ { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // {{%users}}でテーブルプレフィックス対応 'id' => $this->primaryKey(), 'name' => $this->string()->notNull(), 'email' => $this->string()->notNull()->unique(), 'created_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP'), 'updated_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), ]); // (任意)クエリ効率化のためインデックス作成 $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true:ユニークインデックス ); } /** * {@inheritdoc} */ public function down() { // インデックス削除 $this->dropIndex( 'idx-users-email', '{{%users}}' ); // テーブル削除 $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ファイル名は実際に生成されたものへ置き換えてください。
マイグレーション実行: プロジェクトルートで下記コマンドを実行し、
up()
で定義した内容でDBにusers
テーブルを生成します。bashphp yii migrate
1確認画面で
yes
を入力。正常終了すればテーブル作成完了です。
サイトへのアクセスと動作確認
ブラウザで設定済みドメインhttps://servbay-yii2-test.local
へアクセスしましょう。
https://servbay-yii2-test.local
:Yii 2ベーシックアプリのウェルカム画面と、views/site/index.php
のデモリンクが表示されます。- "Memcachedテスト"リンク または
https://servbay-yii2-test.local/index.php?r=site/memcached
:Memcachedが正常なら「Memcachedでデータ保存成功...」とテキスト出力されます。 - "Redisテスト"リンク または
https://servbay-yii2-test.local/index.php?r=site/redis
:Redisが正常なら「Redisでデータ保存成功...」と表示されます。 - "DBにユーザー追加"リンク または
https://servbay-yii2-test.local/index.php?r=site/mysql-add
:DBサービス・設定が正しく、users
テーブルも生成済みなら「ユーザー追加に成功...」と出力されます(メールフィールドがユニークで重複しなければ毎回追加可能)。 - "DBからユーザー取得"リンク または
https://servbay-yii2-test.local/index.php?r=site/mysql
:DBサービスと設定、テーブルが存在していればユーザーリストが取得・表示されます。
エラー等が発生した場合は、ServBayの関連サービス(PHP、Webサーバー、DB、Memcached、Redis)の稼働状態、Yii 2側の設定(config/db.php
, config/web.php
)、DBテーブルの有無などを再確認しましょう。
よくある質問(FAQ)
- サイトのドメインへアクセスできない/証明書エラーが出る場合は? ServBayの“Webサイト”設定でドメイン追加が正しくできているか、ServBayアプリが起動できているかを確認してください。ServBayがDNS・SSL証明書を自動生成します。証明書エラー時はServBay User CA/Public CAを信頼登録する必要があります。詳しくは公式ドキュメント参照。
- Composerコマンドが実行できない? ServBayのパッケージ管理画面でComposerが有効化されているか、macOSならターミナル上でコマンド実行しているかを確認してください。ServBayは内蔵Composerを自動でPATHへ追加します。
- データベース接続できない? ServBayで対象データベースサービス(MySQL/PostgreSQL)が稼働しているか、
config/db.php
でdsn
・username
・password
が正しく同期しているか、DB自体(例:servbay_yii2_app
)を作成済みかを確認。DB接続確認はAdminerツールでも可能です。 - Memcached/Redisに接続できない? 対応サービスがServBayで稼働中か、
config/web.php
のhost
やport
(デフォルトは127.0.0.1
と各サービス既定ポート)の設定に誤りがないかを確認。 - マイグレーションコマンド(
php yii migrate
)が失敗する?config/db.php
で正しく設定できているか、DBサービスが稼働しているか、対象DBが作成済みかを確認してください。マイグレーションコマンドはDB接続が必須です。 actionMysqlAdd
/actionMysql
でテーブルが存在しないと表示される? 必ずDBマイグレーションコマンドphp yii migrate
でusers
テーブルを作成してください。- PHPのエラーログ確認方法は? ServBayにてPHPのエラー・Webサーバーログなど一元管理されています。アプリ画面“ログ”セクションから確認可能なので、問題解決に活用してください。
まとめ
ServBayを使えば、macOS・Windows上でYii 2プロジェクトの実行環境構築が手軽に可能です。Composer標準搭載、PHPバージョン管理、データベース・キャッシュサーバー組み込み、“Webサイト”管理機能等により、Yii 2プロジェクトのセットアップ・開発が驚くほど簡単になります。本ガイドの手順で、素早くYii 2開発を始めてServBayの多機能を存分に活用しましょう。
充実した開発ライフをお祈りします!