CodeIgniterプロジェクトの作成と実行
CodeIgniterとは?
CodeIgniterは、軽量かつ高性能なPHPのWebアプリケーション開発フレームワークです。Model-View-Controller(MVC)設計パターンを採用しており、開発者が機能的で柔軟なWebアプリケーションを素早く構築できるよう設計されています。シンプルな構造と優れたパフォーマンス、学習の容易さから、多くのPHP開発者によって選ばれています。
CodeIgniterの主な特徴とメリット
- 軽量コア: 必要最小限のコンポーネントのみを備えており、非常に高速に動作します。
- 高いパフォーマンス: 効率的な設計により、高い同時接続数にも対応でき、アプリケーションのパフォーマンスが優れています。
- 簡単に習得可能: 明瞭なドキュメントと直感的なAPIにより、短期間で習得できます。
- 高い柔軟性: サードパーティーライブラリとの自由な連携や機能拡張・カスタマイズが容易です。
- 活発なコミュニティサポート: 開発者コミュニティが充実しており、リソースやサポートが豊富です。
CodeIgniterは小規模なプロジェクトから企業向けの大規模アプリまで幅広く対応でき、質の高いWebソリューションを効率良く構築できます。
ServBayを使ったCodeIgniter開発環境の構築
ServBayはmacOSおよびWindows向けに設計されたローカルWeb開発環境ツールです。PHPや各種データベース(MySQL, PostgreSQL, MongoDB)、キャッシュ(Redis, Memcached)、Webサーバー(Caddy, Nginx, Apache)などを統合し、直感的な管理インターフェースを提供します。ServBayを使うことで、CodeIgniter開発に必要な環境を簡単に構築および管理できます。
この記事では、ServBayのPHP環境とWebサイト機能を活用してCodeIgniterプロジェクトの新規作成・設定・実行方法、さらに複数のデータベースやキャッシュサービスの連携例を解説します。
事前準備
始める前に、以下の準備が完了していることを確認してください。
- macOSまたはWindowsにてServBayが正常にインストール・起動していること。
- 使用したいPHPバージョン(例:PHP 8.3)がServBayで有効化されていること。
- 使用予定のデータベースやキャッシュパッケージ(例:MySQL, PostgreSQL, Redis, Memcached)がServBayで有効化されていること。
CodeIgniterプロジェクトの作成
ServBayでは、Webサイトプロジェクトを以下のディレクトリに統一して配置することを推奨しています。これは、ServBayがローカルWebサイトをより効率的に管理するためです。
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Composerのインストール
ServBayにはComposerが標準搭載されており、追加インストールは不要です。ターミナルから直接
composer
コマンドが利用できます。Webサイトのルートディレクトリに移動
ターミナルを開き、ServBay推奨のWebサイトルートディレクトリに移動します。
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1CodeIgniterプロジェクトの新規作成
Composerを使いCodeIgniter 4プロジェクトを新規作成します。プロジェクトディレクトリ名は
servbay-codeigniter-app
とします。bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composerが
servbay-codeigniter-app
ディレクトリ内にCodeIgniterのスケルトンアプリと依存パッケージをダウンロードします。プロジェクトディレクトリに移動
新しく作成したCodeIgniterプロジェクトディレクトリへ移動します。
macOS:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Windows:
cmdcd C:\ServBay\www\servbay-codeigniter-app
1
初期設定
データベース接続の設定
CodeIgniterのデータベース設定は app/Config/Database.php
ファイルで行います。データベースを使用する場合はここで接続情報を設定します。
まず、ServBayのデータベース管理ツール(AdminerやphpMyAdmin。ServBayアプリ画面からアクセス可能)を使って servbay_codeigniter_app
というデータベースを作成してください。
次に app/Config/Database.php
を編集し、$default
配列を見つけ、ServBayで有効化しているデータベース種別(MySQLまたはPostgreSQL)に合わせて接続情報を入力します。ServBayのデフォルトのデータベースユーザー名・パスワードは通常 root
と password
です。
MySQLの設定例:
php
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のデフォルトポート
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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の設定例:
php
public $memcached = [
'host' => '127.0.0.1', // ServBayのMemcachedは127.0.0.1で待ち受け
'port' => 11211, // Memcachedのデフォルトポート
'weight' => 1,
];
1
2
3
4
5
2
3
4
5
Redisの設定例:
php
public string $handler = 'redis'; // デフォルトのキャッシュハンドラをredisへ変更
public $default = [ // Redisはdefault配列で設定
'host' => '127.0.0.1', // ServBayのRedisは127.0.0.1で待ち受け
'password' => null, // パスワードは通常不要
'port' => 6379, // Redisのデフォルトポート
'timeout' => 0,
'database' => 0,
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
有効化しているキャッシュパッケージに合わせて該当項目を設定してください。
Webサーバーの設定(ServBay Webサイト設定)
ServBayのWebサイト機能を使ってWebサーバーの設定を行い、CodeIgniterプロジェクトを指すようにします。
- ServBayアプリの画面を開きます。
- **Webサイト(Websites)**タブへ移動します。
- 左下の
+
ボタンで新しいWebサイトを追加します。 - Webサイト情報を入力:
- 名前 (Name): 例
My First CodeIgniter Dev Site
のような認識しやすい名前 - ドメイン (Domain): 例
servbay-codeigniter-test.local
のようなローカルアクセス用のドメイン名(.localはServBayが自動的にローカルへ解決) - サイトタイプ (Site Type):
PHP
を選択 - PHPバージョン (PHP Version): 希望のバージョン(例:8.3)
- ドキュメントルート (Document Root): ここが重要です。CodeIgniterのエントリーファイル(
index.php
)はプロジェクトディレクトリ配下のpublic
フォルダ内にあります。ドキュメントルートは必ずプロジェクトディレクトリ内のpublic
フォルダ(例:/Applications/ServBay/www/servbay-codeigniter-app/public
)に設定してください。
- 名前 (Name): 例
- 追加(Add) ボタンで保存
- ServBayから設定変更の確認が出た場合は承認してください。
詳細な手順は最初のWebサイトの追加も参考にしてください。
サンプルコードの追加
プロジェクトの動作確認やデータベース・キャッシュ接続テストを行うために、CodeIgniterのデフォルト Home
コントローラーを編集し、サンプルメソッドを追加します。
app/Controllers/Home.php
を編集し、内容を以下のコードへ差し替えます。
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', // time()で一意のメールアドレス
];
$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) {
// DB関連の例外取得
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// その他の例外取得
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* データベースからユーザー取得(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) {
// DB関連の例外取得
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// その他の例外取得
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
}
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
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
の定義箇所に以下のルート規則を追加します。
php
// ... 他のルート定義 ...
// Memcachedサンプル用ルート
$routes->get('/memcached', 'Home::memcached');
// Redisサンプル用ルート
$routes->get('/redis', 'Home::redis');
// データベース操作サンプル用ルート
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... 他のルート定義 ...
1
2
3
4
5
6
7
8
9
10
11
12
13
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!
と表示されれば、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)
データベース関連のサンプルを使うには、先にCodeIgniterのマイグレーションコマンドで users
テーブルを作成してください。
データベース構造の作成(マイグレーション実行)
ターミナルで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プラットフォームによってTIMESTAMPデフォルト値の式が動的に切り替えられます。実運用ではより厳密なマイグレーション構造やDBごとに別ファイル管理が必要な場合があります。
マイグレーション実行: ターミナルで以下コマンドを実行し
users
テーブルを作成します。bashphp spark migrate
1正常に完了すればターミナルに結果が表示されます。ServBayのAdminer等から
servbay_codeigniter_app
データベース内にusers
テーブルが作成済みか確認できます。
データベースサンプルへのアクセス
app/Config/Database.php
でDB接続情報が正しく設定され、マイグレーションで users
テーブルが作成されていれば、次のURLでサンプル動作を確認できます。
ユーザーの追加:
https://servbay-codeigniter-test.local/add-user
アクセスする度にusers
テーブルへ新しいユーザーを追加し、User added successfully: user_XXXXXXXXXX@servbay.demo
の出力が表示されます。ユーザー一覧表示:
https://servbay-codeigniter-test.local/list-users
DB内の全ユーザーをJSON形式で表示します。ユーザーデータが含まれたJSON配列が出力されます。
まとめ
以上の手順により、macOSやWindows上のServBay環境でCodeIgniterプロジェクトの新規作成・設定・起動を一通り体験できます。Composerによるプロジェクト作成、ServBayWebサイトの正しいドキュメントルート設定、CodeIgniterのデータベース・キャッシュ設定、そしてサンプルコードによる連携検証までを学習しました。ServBayならローカル環境の構築や管理がシンプルになり、CodeIgniterアプリ開発に集中できます。