ServBayでMongoDBを有効化し利用する(PHP拡張&データベースサービス)
ServBayは開発者向けに設計された強力なローカルWeb開発環境で、複数のWebサーバー、プログラミング言語、データベースを統合し、多くの言語拡張とツールも標準搭載しています。PHPでMongoDBを利用したい開発者のために、ServBayはPHPのMongoDB拡張を有効化しMongoDBデータベースサービスを起動する便利な方法を提供しています。
本記事では、ServBay上でPHPのMongoDB拡張を有効化し、MongoDBのデータベースサービスを開始し、PHPプロジェクトでMongoDBと接続・利用する手順を詳しく解説します。
概要:ServBayとMongoDBについて
MongoDBは、高性能かつオープンソースのドキュメント志向NoSQLデータベースで、柔軟なデータモデルと優れたスケーラビリティにより、現代のWebアプリケーションで広く利用されています。
ServBayはMongoDBを内蔵パッケージの一つとして提供し、開発者はローカル環境でMongoDBのインスタンスを簡単にデプロイ・管理できます。また、PHPの各バージョン向けに必要なMongoDB拡張(mongodb.so
)も事前にコンパイル済みで提供されているため、PHPアプリケーションがMongoDBデータベースとやり取りできるようになっています。
PHPプロジェクトでMongoDBを利用するには、主に以下の二つの手順が必要です:
- PHPのMongoDB拡張を有効化すること… これでPHPからMongoDB関連の関数を実行できます。
- MongoDBデータベースサービスを起動すること… 実際にデータを保存・管理する稼働中のMongoDBインスタンスが必要です。
ServBayのGUI(グラフィカルユーザーインターフェース)なら、これらの手順も直観的に行えます。
PHP MongoDB拡張バージョン
ServBayは対応する複数のPHPバージョンごとに最適なMongoDB拡張をあらかじめ用意しています。拡張のバージョンはServBayの更新によって変動する場合がありますが、通常はPHPと互換性のある安定したバージョンが提供されます。以下は、よく使われているPHPバージョンと対応するMongoDB拡張のバージョン例です(詳しくはご利用中のServBayをご確認ください):
- PHP 5.6・7.0: MongoDB 1.7.5
- PHP 7.1・7.2・7.3・7.4: MongoDB 1.11.1
- PHP 8.0・8.1・8.2・8.3: MongoDB 1.15.0
- PHP 8.4: MongoDB 1.19.1
注意:PHP拡張(mongodb.so
)はPHPとMongoDB間の通信機能のみを提供します。実際にPHPのコードからMongoDBを操作するには、MongoDB PHP公式ドライバ(通常はComposerでインストール)を併用する必要があります。
PHP MongoDB拡張の有効化
デフォルトでは、環境をシンプルに保つため一部PHP拡張は無効になっている場合があります。MongoDB拡張はServBayのGUIから有効化するのがおすすめです。
ServBay GUIから有効化する方法
最も簡単で素早い方法です:
- ServBayアプリを起動します。
- 左側ナビゲーションバーで 言語(Languages) をクリックし、PHPを選択します。
- MongoDB拡張を有効化したいPHPバージョンを選びます(例:
PHP 8.4
)。 - 右パネル内の 拡張(Extensions) セクションを探します。
- 下にスクロールして
MongoDB
拡張を見つけます。 MongoDB
拡張の左にあるスイッチを「グレー(無効)」から「グリーン(有効)」に切り替えます。- 下部の 保存(Save) ボタンをクリックします。
ServBayが自動的に該当するPHP設定ファイルを変更し、影響するPHPサービスを再起動して変更を適用します。
手動で設定ファイルを編集する(オプション)
高度な設定を行いたい場合や手動での管理が好みの場合は、PHP設定ファイルを直接編集できます。ただし、多くの場合はGUI操作で十分です。
対象PHPバージョンの
conf.d
ディレクトリを開きます。PHP 8.3でMongoDB拡張を有効化する場合、一般的なパスは:bash/Applications/ServBay/etc/php/8.3/conf.d/mongodb.ini
1上記パスはご利用環境ごとに調整してください。
テキストエディタで
mongodb.ini
を開きます。次の記述を探します:
ini[MongoDB] ; Uncomment the following line to enable MongoDB ;extension = mongodb.so
1
2
3extension = mongodb.so
の行頭のセミコロン(;
)を消してコメント解除します:ini[MongoDB] ; Uncomment the following line to enable MongoDB extension = mongodb.so
1
2
3ファイルを保存します。
重要: 設定を手動で変更した場合は、該当PHPサービスの再起動が必要です。ServBay GUIの左ナビゲーションバーから ソフトウェアパッケージ(Packages) を開き、編集したPHPバージョンを見つけて右側の再起動アイコン(通常は円形の矢印)をクリックしてください。
MongoDBデータベースサービスの起動
PHP拡張を有効化しても、MongoDB「本体」(実際のデータベースサービス)が稼働していなければデータは保存できません。ServBayはMongoDBのデータベースもパッケージとして内蔵しているため、GUI操作で手軽に起動できます。
- ServBayアプリを起動します。
- 左ナビゲーションバーで ソフトウェアパッケージ(Packages) をクリックします。
- パッケージ一覧から データベース(Databases) カテゴリを開きます。
MongoDB
パッケージを見つけます。MongoDB
パッケージの左のスイッチを「グレー(停止)」から「グリーン(稼働)」に切り替えます。
MongoDBはデフォルトでポート番号 27017
で起動します。
MongoDBモジュールとデータベース接続の確認
上記手順が完了したら、MongoDB拡張が正しくロードされているか・MongoDBサービスが起動しているか検証しましょう。
PHP拡張のロード確認
phpinfo()
の出力で確認できます:
- サイトのドキュメントルート(例
/Applications/ServBay/www
)にphpinfo.php
などの新規PHPファイルを作成します。 - ファイルに次の内容を記述します:php
<?php phpinfo(); ?>
1
2
3 - Webブラウザで
https://servbay.demo/phpinfo.php
など(servbay.demo
はご自身の環境のドメイン)にアクセスします。 - 表示された
phpinfo
のページで「MongoDB」を検索。ロードされていれば「mongodb」セクションにバージョン情報や設定内容が表示されます。
(ご利用のServBayのバージョンやUIにより若干異なる場合があります)
データベースの接続確認
ローカルのMongoDBサービスと接続できるかPHPスクリプトでテストします:
- プロジェクト内で公式のMongoDB PHPドライバをComposerでインストール済みであることを確認してください。まだの場合、プロジェクトディレクトリで次を実行します:bash
composer require mongodb/mongodb
1 test_mongodb.php
などのPHPファイルを作成します。- 次のコードを追加します:php
<?php require __DIR__ . '/vendor/autoload.php'; // プロジェクトのパスに応じて修正 echo "Attempting to connect to MongoDB...\n"; try { // ローカルMongoDBインスタンス(デフォルトはポート27017)に接続 $client = new MongoDB\Client("mongodb://localhost:27017"); // データベース一覧を取得し接続を検証 $listDatabases = $client->listDatabases(); echo "Successfully connected to MongoDB!\n"; echo "Available databases:\n"; foreach ($listDatabases as $databaseInfo) { echo "- " . $databaseInfo->getName() . "\n"; } } catch (\MongoDB\Driver\Exception\Exception $e) { echo "Failed to connect to MongoDB: " . $e->getMessage() . "\n"; } ?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 - ターミナルで(ServBay提供のPHPバージョンを利用して)実行するか、Web経由でアクセスしましょう。接続に成功すればデータベース一覧が表示され、失敗の場合はエラーメッセージで原因を特定できます(例:MongoDBサービスが稼働していない等)。
PHPコードからMongoDBを利用する
PHP MongoDB拡張とMongoDBサービスがともに有効で稼働していれば、Composer経由でMongoDB PHPドライバをインストールし、様々なデータベース操作が行えます。
MongoDB PHPドライバのインストール
上述の通り、Composerでインストールするのが推奨です:
composer require mongodb/mongodb
これで mongodb/mongodb
パッケージと依存ファイル、vendor/autoload.php
が生成されます。
サンプルコード
MongoDBに接続し、ドキュメントの挿入・取得・更新を行うシンプルな例を示します:
<?php
require __DIR__ . '/vendor/autoload.php'; // Composerの自動読み込み
echo "Connecting to MongoDB...\n";
try {
// ローカルMongoDBに接続
$client = new MongoDB\Client("mongodb://localhost:27017");
// データベースとコレクションを選択
// 存在しない場合は初回書き込み時に自動作成されます
$collection = $client->servbay_demo_db->users; // サンプルDB名: servbay_demo_db
echo "Connected. Performing operations...\n";
// ドキュメントの挿入
$insertResult = $collection->insertOne([
'name' => 'Alice ServBay', // サンプルデータにブランド名
'email' => '[email protected]',
'age' => 30,
'createdAt' => new MongoDB\BSON\UTCDateTime(time() * 1000) // BSON日付型
]);
printf("Inserted document with ID: %s\n", $insertResult->getInsertedId());
// ドキュメントの検索
$document = $collection->findOne(['name' => 'Alice ServBay']);
echo "Found document:\n";
if ($document) {
print_r($document);
} else {
echo "Document not found.\n";
}
// ドキュメントを更新(オプション)
$updateResult = $collection->updateOne(
['name' => 'Alice ServBay'],
['$set' => ['age' => 31, 'status' => 'updated']]
);
printf("Matched %d document(s) for update, modified %d document(s).\n", $updateResult->getMatchedCount(), $updateResult->getModifiedCount());
// 更新後のドキュメントを検索(オプション)
$updatedDocument = $collection->findOne(['name' => 'Alice ServBay']);
echo "Updated document:\n";
if ($updatedDocument) {
print_r($updatedDocument);
}
// ドキュメントの削除(オプション)
// $deleteResult = $collection->deleteOne(['name' => 'Alice ServBay']);
// printf("Deleted %d document(s).\n", $deleteResult->getDeletedCount());
} catch (\MongoDB\Driver\Exception\Exception $e) {
echo "An error occurred: " . $e->getMessage() . "\n";
} catch (\Exception $e) {
echo "An unexpected error occurred: " . $e->getMessage() . "\n";
}
echo "Script finished.\n";
?>
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
このコードをPHPファイルとして保存し、ターミナル(ServBayのPHP CLI)またはWebサーバー経由で実行できます。
注意事項・ベストプラクティス
- MongoDBサービスの状態: ServBay GUIでMongoDBパッケージが「稼働中」になっていることを確認してください。
- デフォルトポート: MongoDBはデフォルトで
27017
ポートを利用します。他ポートを使いたい場合は接続文字列に明記し、ServBayのGUIで設定できます。 - 拡張とドライバの違い: PHPの
mongodb.so
拡張は低レベルの通信機能を提供し、Composerのmongodb/mongodb
パッケージはより高機能なOOP APIを利用できます。近年のPHP開発ではComposerパッケージの併用が一般的です。 - ServBayユーザーCA/公開CA: ServBayは独自CAを用いたSSL証明書の発行をサポート。ローカル開発時も本番同様HTTPS接続を簡単に再現できます。通常ローカルMongoDB接続にはSSLは不要ですが、より複雑な構成では検討が必要な場合があります。ACMEプロトコルによる本物の証明書取得や、バックアップ・パスワードリセット等もServBayなら一括対応できます。
- データベース管理ツール: ServBayにはMongoDBのGUI管理ツールは含まれていない場合もありますが、公式の MongoDB Compass やコマンドラインツール
mongo
/mongosh
を使ってローカルMongoDBインスタンスを管理できます。
よくある質問(FAQ)
Q: PHPのMongoDB拡張は有効にしたが、PHPスクリプトがMongoDBに接続できません。どうすれば?
A: ServBay GUIからMongoDB「データベースサービス」が「稼働中」かご確認ください。PHP拡張はインターフェースであり、実際のデータベースは別途サービスとして稼働が必要です。また、接続文字列(通常はmongodb://localhost:27017
)もご確認ください。
Q: mongodb.so
拡張とmongodb/mongodb
Composerパッケージの違いは?
A: mongodb.so
はPHPエンジンが読み込むネイティブ拡張で、PHPとMongoDB Cドライバ(libmongoc)との通信機能を提供します。一方、mongodb/mongodb
はこの拡張上に構築されたPHP向け高機能ライブラリで、CRUD操作や集計処理などを使いやすいOOP APIで提供します。現代のPHP開発では、拡張の有効化とComposerパッケージの併用が基本です。
Q: MongoDBのポートや設定を変更したい場合は?
A: ServBay GUIからMongoDBパッケージの設定オプションでポート番号などを確認・変更できます。より高度な設定はMongoDBの設定ファイルを直接編集する必要がある場合もあり、ファイルパスはパッケージ詳細から確認可能です。変更後はMongoDBサービスの再起動が必要です。
まとめ
ServBayはPHP開発者にとって極めて便利なMongoDB開発環境を提供します。直感的なGUIでPHPのMongoDB拡張を有効化し、MongoDBサービスも簡単に起動可能です。Composerで公式PHPドライバをインストールすれば、ローカルでPHP+MongoDBの統合開発環境がすぐに構築でき、アプリロジック開発に集中できます。ServBayの一体型環境は煩雑な初期設定を大幅に簡素化し、ローカルでの開発・検証効率を最大化します。