ServBayでYii 2プロジェクトを作成・実行する
概要:Yii 2とは?
Yii 2は、高パフォーマンスかつコンポーネントベースのPHPフレームワークであり、モダンなWebアプリケーションの迅速な開発を目的としています。MVC(Model-View-Controller)設計パターンを採用し、豊富な機能とツールを提供することで、開発者がスケーラブルで高品質なWebアプリケーションを効率よく構築できるように設計されています。優れたパフォーマンス、柔軟なアーキテクチャ、強力な組み込み機能(キャッシュ機能、セキュリティ、RESTful API開発サポートなど)で多くのユーザーから支持を得ています。
Yii 2の主な特徴・メリット
- 高パフォーマンス: Yii 2は高い同時接続処理能力とパフォーマンスを重視して最適化されています。
- モジュール性: 高度にモジュール化されており、コードの整理や部品の再利用がしやすい設計です。
- セキュリティ: 入力検証、出力フィルタリング、CSRF/XSS対策、認証・認可フレームワークなど強力なセキュリティ機能を標準搭載。
- 扱いやすさ: シンプルで直感的なAPIと充実したドキュメントにより、初心者から上級者まで素早く学習できます。
- コミュニティサポート: 活発な開発者コミュニティと膨大なサードパーティ製エクステンションにより学習・開発がサポートされます。
- 統合ツール: データベースマイグレーションやコード生成などのCLIツールが付属し、開発効率を高めます。
Yii 2は、エンタープライズ向けアプリ、RESTful API、ポータルサイト等、さまざまなWebプロジェクトに最適なフレームワークです。
ServBayでYii 2プロジェクトを動かす
ServBayは、macOS向けに設計されたローカルWeb開発環境です。PHP・各種データベース(MySQL, PostgreSQL, MongoDB, Redis)、Webサーバー(Caddy, Nginx)、さらにComposer, Node.js, Python, Go, Javaなどのツールを統合し、開発者へ“すぐに使える”便利なプラットフォームを提供します。
本記事では、ServBay内蔵のPHP環境・Composer・データベースサービスを使って、Yii 2のベーシックアプリケーションプロジェクトを作成・実行する手順を解説します。ServBayの「サイト」機能でローカルWebサーバーを設定し、簡単にアクセスと機能デモを行う方法もご紹介します。
事前準備
作業を始める前に、以下を確認してください:
- macOSにServBayを正常にインストール・起動していること。
- 使用したいPHPバージョン(例:PHP 8.3以上)がServBayでインストール・有効化されていること。
- 必要なデータベース(MySQLやPostgreSQL)、キャッシュサービス(Memcached・Redis)がServBayでインストール・有効化されていること。
インストール済みソフトや稼働状態は、ServBayのメイン画面で管理・確認できます。
Yii 2プロジェクトの作成
TIP
ServBayでは、/Applications/ServBay/www
ディレクトリにプロジェクトファイルを保存することを推奨しています。プロジェクト管理や構造を整理しやすく、ServBayの「サイト」機能にも最適です。
Composerを利用: ServBayにはComposerツールが内蔵されているため、追加インストールは不要です。ターミナルでそのまま
composer
コマンドを使えます。プロジェクトディレクトリ作成: ターミナルを開き、ServBayのデフォルトWebルートに移動し、新しいディレクトリを作成します。
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3ComposerでYii 2プロジェクト生成:
servbay-yii2-app
ディレクトリにて、ComposerコマンドでYii 2ベースアプリケーションテンプレートを作成します。bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1このコマンドでテンプレートと依存パッケージがダウンロード・インストールされます。完了までしばらくお待ちください。
プロジェクトディレクトリに移動: 続く手順はプロジェクトルート(
/Applications/ServBay/www/servbay-yii2-app
)で実行します。bashcd /Applications/ServBay/www/servbay-yii2-app
1
初期設定
Yii 2プロジェクト作成後、特にデータベース接続や各種コンポーネントの基本設定が必要です。
データベース接続設定
プロジェクトルートのconfig/db.php
ファイルを編集します。ServBayで稼働中のデータベース(MySQLまたはPostgreSQL)設定(ユーザー名root
/パスワードpassword
、設定変更していればその値)に合わせて情報を更新してください。まず、ServBayの該当データベースで新規データベース (例:
servbay_yii2_app
) を作成します。データベース作成にはServBay標準のAdminerツール、Sequel AceやTablePlus等のお好みのクライアントも利用できます。Adminerはアプリ内のデータベースセクションからアクセス可能です。MySQLの場合:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbnameは作成したデータベース名 '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該当DBに合わせて
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データベースインデックス ], // ... その他コンポーネント ], // ... その他設定
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必ずMemcached/RedisサービスがServBayで起動していることを確認してください。Redisをキャッシュに利用する場合は
yiisoft/yii2-redis
パッケージが必要ですが、Composerでcreate-project
時に基礎パッケージが自動導入されます(不足時はcomposer require yiisoft/yii2-redis
等で追加)。Memcachedも同様にyiisoft/yii2-memcached
パッケージを用います。
Webサーバー(ServBay「サイト」)設定
ServBay「サイト」機能でローカルWebサーバー(Caddy/Nginx)を設定し、Yii 2プロジェクトを指すようにします。
- ServBayアプリを開く: ServBayアプリケーションを起動します。
- サイト設定に移動: UIから「サイト」または類似ナビゲーションを選択。
- 新しいサイト追加:
+
や「追加」ボタンで新規サイトを作成します。 - サイト情報を入力:
- 名前: 例
My First Yii 2 Dev Site
など分かりやすい名前 - ドメイン: ブラウザでアクセスするローカル開発ドメイン(例
servbay-yii2-test.local
)。ServBayが自動で127.0.0.1
にDNS・SSL設定します。 - サイトタイプ:
PHP
を選択 - PHPバージョン: 例
8.3
など使用バージョン(インストール・有効化済みであることを確認) - サイトルートディレクトリ: ※重要 Yii 2ベースアプリは
web
ディレクトリがパブリック・エントリーポイントです。/Applications/ServBay/www/servbay-yii2-app/web
に設定してください。
- 名前: 例
- 保存と反映: サイト設定を保存。ServBayが自動的にWebサーバーを再設定します。
詳細な手順はServBay公式ドキュメント(最初のサイト追加方法)もご参照ください。
ローカル開発用の独自ドメインには自動でSSL証明書(ServBay User CA/ServBay Public CA経由)も発行・信頼されるため、HTTPSでアクセスできます。
サンプルコードの追加(各種デモ機能)
データベースやキャッシュの動作を試すため、Yii 2標準のコントローラーにサンプルアクションを追加しましょう。
プロジェクトルートのcontrollers/SiteController.php
ファイルを開き、SiteController
クラスに下記メソッドを追加してください。
<?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 set successfully. Retrieved value: " . $value);
} else {
return $this->asText("Failed to set data in Memcached. Please check Memcached service and configuration.");
}
}
/**
* 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 set successfully. Retrieved value: " . $value);
} else {
return $this->asText("Failed to set data in Redis. Please check Redis service and configuration.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Redis error: " . $e->getMessage() . ". Please check Redis service and configuration.");
}
}
/**
* ユーザーをデータベースに追加するデモです。
* 'users'テーブルが存在することを前提としています。
*
* @return Response
*/
public function actionMysqlAdd() // PostgreSQLでも設定が合えば利用可
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // ブランドに沿ったデモ名
'email' => '[email protected]', // ブランドに沿ったデモ用メール
])->execute();
return $this->asText("User added successfully. Rows affected: " . $count);
} catch (DbException $e) {
return $this->asText("Failed to add user to database. Error: " . $e->getMessage() . ". Please check database service, configuration, and ensure 'users' table exists.");
}
}
/**
* データベースからユーザーを取得するデモです。
* 'users'テーブルが存在することを前提としています。
*
* @return Response
*/
public function actionMysql() // PostgreSQLでも設定が合えば利用可
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// フォーマットを整えて出力(機密情報や整合性の乱れ防止のため)
$output = "Fetched Users:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, Name: {$user['name']}, Email: {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("Failed to fetch users from database. Error: " . $e->getMessage() . ". Please check database service, configuration, and ensure 'users' table exists.");
}
}
// PostgreSQL特有のアクション追加も可ですが、多くはdbコンポーネント共用でOK
// 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;
}
}
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
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = 'My Yii2 Application on ServBay'; // タイトル更新
?>
<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>DB利用例では、下記の手順で`users`テーブルを作成する必要があります(後述参照)。</p>
</div>
</div>
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
このビューには新しく追加したコントローラーアクションへのリンクも入れています。
リレーショナルDB:テーブル定義(マイグレーション)
DB操作例(actionMysqlAdd
, actionMysql
)にはusers
テーブルが必要です。Yii推奨のマイグレーションでテーブル作成を行いましょう。
マイグレーションファイル作成(Giiツールなど): ターミナルでプロジェクトルート(
/Applications/ServBay/www/servbay-yii2-app
)からマイグレーションファイル生成コマンドを実行。bashphp yii migrate/create create_users_table
1yes
と入力して進めると、migrations
ディレクトリ配下にmYYYYMMDD_HHMMSS_create_users_table.php
のようなファイルが生成されます。マイグレーションファイルの編集: ファイルの
up()
メソッドにusers
テーブル定義を記載。php<?php use yii\db\Migration; /** * `{{%users}}`テーブルを作成します。 */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXXはタイムスタンプ { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%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'), ]); // 任意:インデックス作成で検索効率UP $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
46mXXXXXXXXXXXXXX_create_users_table
の部分は実際のファイル名に置き換えてください。マイグレーション実行: ターミナル(プロジェクトルート)でマイグレーションを実行し、DBにテーブルを作成します。
bashphp yii migrate
1yes
で進行。正常終了すればテーブル作成完了です。
Webサイトにアクセスして確認
ブラウザで、ServBayで設定したドメイン(例: https://servbay-yii2-test.local
)にアクセスできます。
https://servbay-yii2-test.local
:Yii 2ベースアプリのウェルカムページと演習用リンクが表示されます。- "Memcachedテスト"や
https://servbay-yii2-test.local/index.php?r=site/memcached
:Memcachedが起動/設定済みなら"Memcached set successfully..."などのテキストが出力されます。 - "Redisテスト"や
https://servbay-yii2-test.local/index.php?r=site/redis
:Redis起動/設定済みなら"Redis set successfully..."のテキスト出力。 - "DBへユーザー追加"や
https://servbay-yii2-test.local/index.php?r=site/mysql-add
:DB起動/設定済み・users
テーブルがあれば"User added successfully..."が表示されます(メールアドレス重複の場合、失敗メッセージとなります)。 - "DBからユーザー取得"や
https://servbay-yii2-test.local/index.php?r=site/mysql
:DB・設定・テーブルが正しければ、DBのユーザー一覧が表示されます。
問題が発生した場合は、ServBay内の各サービス(PHP, Webサーバー, DB, Memcached, Redis)が正常動作しているか、Yii 2プロジェクト設定(config/db.php
, config/web.php
)が正しいか、テーブル作成が成功しているかを再確認してください。
よくある質問(FAQ)
- 「このサイトにアクセスできません」や証明書エラーが出る場合は? ServBayの「サイト」設定でドメイン追加が正しいか、アプリケーションが起動しているかご確認ください。ServBayはローカルDNS・SSL証明書も自動設定します。証明書エラー時はServBay User CAやPublic CAを信頼済みかも必ず確認してください(詳しくはServBayの公式ドキュメント参照)。
- Composerコマンドが使えない? ServBayアプリ画面でComposerパッケージが有効化されているか、macOSターミナルでコマンドを実行しているかご確認ください。パス設定もServBayで自動追加されます。
- データベース接続に失敗する場合は? DBサービス(MySQL/PostgreSQL)が稼働中か
config/db.php
内のdsn
,username
,password
がServBay側と合っているか、データベース(servbay_yii2_app
)が既に作成されているかをご確認ください。Adminerなどで接続・DB一覧を直接確認することも可能です。 - Memcached/Redis接続エラーの場合は? Memcached/Redisサービスが稼働中か、
config/web.php
のhost/portが正しいか(通常127.0.0.1
と標準ポート)確認しましょう。 - マイグレーション(
php yii migrate
)に失敗する場合は?config/db.php
の内容が正しいか、DBサービスが起動しているか、データベース作成まで完了しているかご確認ください。 actionMysqlAdd
/actionMysql
で「テーブルがない」と出る場合は? マイグレーションコマンドphp yii migrate
でusers
テーブルを作成してください。- PHPエラーログの確認方法は? ServBayはPHP/Webサーバーログ等も一元管理しています。アプリの「ログ」セクションから詳細ログを閲覧し、原因特定に役立ててください。
まとめ
ServBayなら、macOSでYii 2プロジェクトを快適かつ簡単に構築できます。Composer・PHPバージョン管理・内蔵DB/キャッシュサービス・便利なサイト設定など、多数のツールや機能でYii 2開発効率が大幅向上。ぜひ本ガイドを活用し、ServBayの強力な環境でYii 2開発をスタートしましょう。
快適な開発を応援します!