CodeIgniterプロジェクトの作成と実行
CodeIgniterとは
CodeIgniterは、軽量かつ高パフォーマンスなPHP Webアプリケーション開発フレームワークです。Model-View-Controller(MVC)デザインパターンに従っており、開発者が機能豊富なWebアプリケーションを素早く構築できるよう設計されています。シンプルな構造と優れたパフォーマンス、そして学習しやすい特性により、多くのPHP開発者に選ばれています。
CodeIgniterの主な特徴とメリット
- 軽量なコア: コアシステムは非常にコンパクトで、必要最低限のコンポーネントのみを搭載しており、高速な起動が可能です。
- 優れたパフォーマンス: 高効率な設計で多くの同時リクエストに対応し、安定かつ高速な動作を実現します。
- 習得が容易: クリアなドキュメントと直感的なAPIにより、学習コストが低く短期間で使いこなせます。
- 高い柔軟性: プロジェクトごとの要件に合わせてサードパーティ製ライブラリの選択や統合が可能で、拡張やカスタマイズも簡単です。
- 活発なコミュニティサポート: 多くの開発者が利用しているため、豊富なリソースやサポートを受けられます。
CodeIgniterは、小規模なプロジェクトから大規模なエンタープライズ用途まで幅広い開発ニーズに適しています。高品質なWebソリューションを効率よく構築できます。
ServBayを使ったCodeIgniter開発環境の構築
ServBayは、macOS向けに設計されたローカルWeb開発環境ツールです。PHPやデータベース(MySQL, PostgreSQL, MongoDB)、キャッシュ(Redis, Memcached)、Webサーバー(Caddy, Nginx, Apache)など多彩なパッケージを統合し、分かりやすい管理インターフェースを提供します。ServBayを使えば、CodeIgniterに必要な開発環境の構築・管理が非常に簡単に行えます。
本ガイドでは、ServBayのPHP環境とウェブサイト機能を活用してCodeIgniterプロジェクトを作成・設定・起動する方法や、各種データベースやキャッシュサービスの統合例を解説します。
事前準備
始める前に、以下の準備ができていることを確認してください。
- macOS上にServBayがインストールされ、正常に動作している。
- ServBayで使用したいPHPバージョン(例:PHP 8.3)が有効化されている。
- ServBayで使用する予定のデータベースやキャッシュパッケージ(例:MySQL, PostgreSQL, Redis, Memcached)が有効化されている。
CodeIgniterプロジェクトの作成
ServBayでは、ウェブサイトプロジェクトは /Applications/ServBay/www
ディレクトリにまとめて配置することを推奨しています。このディレクトリに置くことで、ServBayによるローカルサイトの管理が容易になります。
Composerのインストール
ServBayにはComposerが最初から付属していますので、通常は追加インストール不要です。ターミナルでそのまま
composer
コマンドを利用できます。ウェブサイトのルートディレクトリに移動
ターミナルを開き、推奨ディレクトリへ移動します。
bashcd /Applications/ServBay/www
1CodeIgniterプロジェクトを作成
Composerを使って新しいCodeIgniter 4プロジェクトを作成します。ここでは、プロジェクト名を
servbay-codeigniter-app
としています。bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composerが、CodeIgniterのスケルトンや依存パッケージを
servbay-codeigniter-app
ディレクトリ内にダウンロードします。プロジェクトディレクトリに移動
新しく作成したプロジェクトディレクトリに移動します。
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1
初期設定
データベース接続の設定
CodeIgniterのデータベース設定ファイルは app/Config/Database.php
にあります。データベースを利用する場合は、ここで接続情報を記入する必要があります。
まず、データベースを使う予定の場合はServBayのDB管理ツール(AdminerやphpMyAdmin、ServBay管理画面からアクセス可能)で、servbay_codeigniter_app
というデータベースを作成してください。
続いて app/Config/Database.php
ファイルを開きます。$default
配列を見つけ、利用するデータベースタイプ(MySQLやPostgreSQL)に合わせて接続情報を編集します。ServBayのデフォルトDBユーザー名・パスワードは通常 root
/ password
です。
以下はMySQLでの設定例です。
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // ServBayのDBは通常127.0.0.1で待受
'username' => 'root', // ServBayデフォルトユーザー
'password' => 'password', // ServBayデフォルトパスワード
'database' => 'servbay_codeigniter_app', // 作成したDB名
'DBDriver' => 'MySQLi', // DB種類に応じて。MySQLならMySQLiかPdo
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306, // MySQLデフォルトポート
];
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PostgreSQLの場合は、DBDriver
を 'Postgre'
に、port
を 5432
に変更し、文字コードの設定も必要に応じて調整してください。
キャッシュ接続の設定(Memcached/Redis)
MemcachedやRedisをキャッシュストアとして利用する場合は、app/Config/Cache.php
ファイルを編集します。
app/Config/Cache.php
を開き、該当する設定セクションを見つけます。ServBayのMemcachedはデフォルトでポート11211
、Redisは6379
(どちらも通常パスワード不要)で待受しています。
Memcachedの設定例:
public $memcached = [
'host' => '127.0.0.1', // ServBay Memcachedは通常127.0.0.1で待受
'port' => 11211, // デフォルトポート
'weight' => 1,
];
2
3
4
5
Redisの設定例:
public string $handler = 'redis'; // デフォルトキャッシュハンドラをredisに設定
public $default = [ // Redis設定はdefault配列内
'host' => '127.0.0.1', // ServBay Redisは通常127.0.0.1で待受
'password' => null, // ServBay Redisはデフォルトでパスワード無し
'port' => 6379, // Redisデフォルトポート
'timeout' => 0,
'database' => 0,
];
2
3
4
5
6
7
8
9
利用するキャッシュパッケージに応じて、該当箇所を設定してください。
Webサーバーの設定(ServBayウェブサイト設定)
ServBayのウェブサイト機能を使ってWebサーバーを設定し、CodeIgniterプロジェクトに紐づけます。
- ServBayアプリのインターフェースを開く。
- Webサイト(Websites) タブへ移動。
- 左下の
+
ボタンで新規ウェブサイトを追加。 - サイト情報を入力:
- 名前(Name): 識別しやすい任意の名前(例:
My First CodeIgniter Dev Site
)。 - ドメイン(Domain): ブラウザでアクセスするローカルドメイン(例:
servbay-codeigniter-test.local
)。ServBayは.local
ドメインを自動でローカルに解決します。 - サイトタイプ(Site Type):
PHP
を選択。 - PHPバージョン(PHP Version): 例:
8.3
など利用したいバージョンを選択。 - ドキュメントルート(Document Root): ここが重要です。CodeIgniterのエントリポイントである
index.php
はプロジェクトルートのpublic
フォルダ内にあるため、ドキュメントルートは必ずpublic
フォルダ(/Applications/ServBay/www/servbay-codeigniter-app/public
)に設定してください。
- 名前(Name): 識別しやすい任意の名前(例:
- 追加(Add) ボタンで設定を保存。
- 設定反映の案内が出た場合は指示に従ってください。
詳細な設定方法は はじめてのWebサイト追加 もご参照ください。
サンプルコードの追加
動作確認とDB・キャッシュ接続テストのため、CodeIgniterのデフォルト Home
コントローラにサンプルメソッドを追加します。
app/Controllers/Home.php
ファイルを編集し、以下の内容に置き換えます。
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // データベース例外クラスをインポート
use CodeIgniter\Cache\Exceptions\CacheException; // キャッシュ例外クラスをインポート
class Home extends Controller
{
/**
* デフォルトのホームページ表示
*/
public function index(): string
{
// 簡単なウェルカムメッセージを返す
return '<h1>Hello ServBay and CodeIgniter!</h1><p>Your CodeIgniter project is running on ServBay.</p>';
}
/**
* Memcachedサンプルメソッド
*/
public function memcached(): string
{
try {
$cache = \Config\Services::cache();
// キャッシュ書き込みを試行
$success = $cache->save('servbay_memcached_key', 'Hello Memcached from CodeIgniter!', 60); // 60秒間キャッシュ
if (!$success) {
return 'Error: Failed to save data to Memcached. Check Memcached service and configuration.';
}
// キャッシュから読み出しを試行
$value = $cache->get('servbay_memcached_key');
if ($value === null) {
return 'Error: Failed to get data from Memcached. Cache might have expired or service is down.';
}
return 'Memcached Test Success: ' . $value;
} catch (CacheException $e) {
// キャッシュ関連例外をキャッチ
return 'Cache Error: ' . $e->getMessage() . '. Ensure Memcached service is running and configured correctly.';
} catch (\Exception $e) {
// その他の例外もキャッチ
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Redisサンプルメソッド
*/
public function redis(): string
{
try {
$cache = \Config\Services::cache();
// キャッシュ書き込みを試行
$success = $cache->save('servbay_redis_key', 'Hello Redis from CodeIgniter!', 60); // 60秒間キャッシュ
if (!$success) {
return 'Error: Failed to save data to Redis. Check Redis service and configuration.';
}
// キャッシュから読み出しを試行
$value = $cache->get('servbay_redis_key');
if ($value === null) {
return 'Error: Failed to get data from Redis. Cache might have expired or service is down.';
}
return 'Redis Test Success: ' . $value;
} catch (CacheException $e) {
// キャッシュ関連例外をキャッチ
return 'Cache Error: ' . $e->getMessage() . '. Ensure Redis service is running and configured correctly.';
} catch (\Exception $e) {
// その他の例外もキャッチ
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* ユーザーデータをDB(MySQL/PostgreSQL)へ追加
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// 'users'テーブルの存在確認(簡易的な安全対策)
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// データ挿入
$data = [
'name' => 'ServBay Demo User',
'email' => 'user_' . time() . '@servbay.demo', // ユニークなemailを生成
];
$db->table('users')->insert($data);
// 挿入成功の確認(通常insert()はtrueを返します)
// if ($db->affectedRows() > 0) {
return 'User added successfully: ' . $data['email'];
// } else {
// return 'Error: Failed to add user.';
// }
} catch (DatabaseException $e) {
// データベース関連例外
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// その他の例外
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* DBからユーザーデータを一覧取得(MySQL/PostgreSQL)
*/
public function listUsers(): string
{
try {
$db = \Config\Database::connect();
// 'users' テーブル存在確認
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// 全ユーザーを取得
$users = $db->table('users')->get()->getResult();
if (empty($users)) {
return 'No users found in the database.';
}
// ユーザーリストをJSON形式で返す
return json_encode($users);
} catch (DatabaseException $e) {
// データベース関連例外
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// その他の例外
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
}
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
このコントローラーは、分かりやすい出力と基本的なエラーハンドリングを備えており、問題診断にも役立ちます。
ルーティング設定
追加したHome
コントローラーの各サンプルメソッドをURLで直接アクセスできるよう、CodeIgniterのルート設定を行います。
app/Config/Routes.php
ファイルを編集し、$routes
定義セクションに以下を追加します。
// ... 他のルート設定 ...
// Memcachedサンプルルート
$routes->get('/memcached', 'Home::memcached');
// Redisサンプルルート
$routes->get('/redis', 'Home::redis');
// DBサンプルルート
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... 他のルート設定 ...
2
3
4
5
6
7
8
9
10
11
12
13
これらのルートは既存の $routes
定義に追記し、元の設定が上書きされないようご注意ください。
サイトへアクセスする
これでCodeIgniterプロジェクトがServBay上で動作開始しています。Webブラウザで指定したドメインにアクセスしてみましょう。
トップページ:
https://servbay-codeigniter-test.local
Hello ServBay and CodeIgniter!
という表示が確認できれば、ServBayのWebサーバー経由でプロジェクトが正常に動作しています。Memcachedサンプル:
https://servbay-codeigniter-test.local/memcached
Memcachedサービスと設定が正しければMemcached Test Success: Hello Memcached from CodeIgniter!
のような出力が表示されます。Redisサンプル:
https://servbay-codeigniter-test.local/redis
Redisサービスと設定が正しければRedis Test Success: Hello Redis from CodeIgniter!
のような出力が表示されます。
データベース操作サンプル(MySQL/PostgreSQL)
データベースを使用したサンプルを試す前に、users
テーブルを作成するためCodeIgniterのマイグレーションコマンドを実行します。
DB構造の作成(マイグレーション実行)
ターミナルでCodeIgniterプロジェクトディレクトリに移動
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1マイグレーションファイル作成: CodeIgniterのCLIツールで
users
テーブル用マイグレーションファイルを生成bashphp spark make:migration create_users_table
1これにより、
app/Database/Migrations
ディレクトリに新しいPHPファイルが生成されます。マイグレーションファイルの編集: 新規ファイル(ファイル名例:
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
)のup()
メソッドを編集して、users
テーブルのカラムやインデックスを記述します。MySQLとPostgreSQLでは自動タイムスタンプのデフォルト値構文が異なるため(CURRENT_TIMESTAMP
vsNOW()
)、CodeIgniterのRawSql
で動的に対応します。例:php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // RawSqlクラスをインポート class CreateUsersTable extends Migration { public function up() { $this->forge->addField([ 'id' => [ 'type' => 'INT', 'constraint' => 5, 'unsigned' => true, 'auto_increment' => true, ], 'name' => [ 'type' => 'VARCHAR', 'constraint' => '100', ], 'email' => [ 'type' => 'VARCHAR', 'constraint' => '100', 'unique' => true, // メールアドレスを一意に設定 ], 'created_at' => [ 'type' => 'TIMESTAMP', // DB種類ごとに適したデフォルト値を設定 // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP' : 'NOW()'), // 動的に切り替え ], 'updated_at' => [ 'type' => 'TIMESTAMP', // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' : 'NOW()'), // 動的に切り替え ], ]); $this->forge->addKey('id', true); // idを主キーに設定 $this->forge->createTable('users'); // usersテーブル作成 } public function down() { // マイグレーション取り消し時にusersテーブルを削除 $this->forge->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※上記例ではデータベースエンジンごとにデフォルト値を動的選択しています。実際のプロジェクトでさらなる安全策や、DBごとに個別のマイグレーション定義を用意することもあります。
マイグレーション実行: 以下のコマンドで
users
テーブルを作成します。bashphp spark migrate
1成功するとマイグレーション完了メッセージが表示されます。ServBayのDB管理ツール(例:Adminer)でも
servbay_codeigniter_app
データベースにusers
テーブルができているかを確認できます。
データベースサンプルへのアクセス
app/Config/Database.php
に正しいDB接続情報が設定され、かつ上記マイグレーションを実行してusers
テーブルが作成されていることを確認してください。
ユーザーをDBに追加:
https://servbay-codeigniter-test.local/add-user
にアクセス
このURLを開くたびに、users
テーブルへ新規ユーザーが1件登録されます。User added successfully: [email protected]
等の表示になります。DB内ユーザー一覧表示:
https://servbay-codeigniter-test.local/list-users
にアクセスusers
テーブル内のレコードをすべてJSON形式で出力します。登録済みユーザーの配列がブラウザに返されます。
まとめ
これらの手順に従って、macOSのServBay環境上でCodeIgniterプロジェクトの作成・設定・起動までを一通り体験できます。Composerによるプロジェクト作成、正しいプロジェクトの公開ディレクトリの指定、データベースとキャッシュの設定、各種サンプルコードを通した動作確認方法まで習得できました。ServBayを利用することで、ローカル環境の構築や管理作業が簡単になり、本来注力したいCodeIgniterアプリ開発に集中できます。