導入
Webアプリケーション開発において、データベースはMySQLやPostgreSQLといった**リレーショナルデータベース(RDB)を使うのが長年の常識でした。しかし最近、MongoDBに代表される「NoSQLデータベース」**を耳にする機会が増えていませんか?
「NoSQLって何が良いの?」「使い慣れたCakePHPからどうやって使うの?」
この記事では、そんな疑問に答えるべく、私自身のWikiメモを元に、CakePHPからMongoDBを扱うための基本的な導入手順と、特にSQLの常識で考えるとハマってしまう重要な注意点を、初心者の方にも分かりやすく解説します。
なぜMongoDB? SQLとの考え方の違い
MongoDBは、RDBのようにかっちりとしたテーブル(表)の構造を事前に決めず、JSONのような柔軟な形式でデータを保存できるのが最大の特徴です。
- RDB (MySQLなど):最初に厳格な「設計図(テーブル定義)」が必要。データの整合性が高く、複雑な連携が得意。
- NoSQL (MongoDB):設計図がなくても、とりあえずデータを保存できる。変化に強く、大量のデータを高速に扱える。
この柔軟性から、アジャイル開発のように仕様変更が多いプロジェクトや、IoTデバイスからの多様なデータなど、予測不能なデータを扱う場面で特に強みを発揮します。
CakePHPとMongoDBを連携させる3ステップ
それでは、実際にCakePHPからMongoDBを使えるように設定していきましょう。
Step 1: MongoDBとPHP拡張をインストールする
まず、サーバーにMongoDB本体と、PHPからMongoDBを操作するための「通訳」となるPHP拡張機能をインストールします。
Linuxサーバーであれば、yum
やapt
でMongoDB本体をインストールし、pecl
というコマンドでPHP拡張(mongodb
)をインストールするのが一般的です。
# PECLを使ってPHPのMongoDBドライバをインストール
sudo pecl install mongodb
インストール後、php.ini
にextension=mongodb.so
という一行を追加するのを忘れないようにしましょう。
Step 2: CakePHP用のプラグインを導入する
次に、CakePHPのモデルがMongoDBと会話できるようにするための「翻訳プラグイン」を導入します。今回は、広く使われているichikaway/cakephp-mongodb
を例にします。
プラグインをapp/Plugin/
に設置し、app/Config/database.php
に以下のような接続設定を記述します。
public $mongodb = array(
'datasource' => 'Mongodb.MongodbSource',
'host' => 'localhost',
'database' => 'your_db_name',
'port' => 27017,
// ...
);
これで、モデルファイルでpublic $useDbConfig = 'mongodb';
と指定するだけで、そのモデルはMongoDBを使うようになります。
Step 3: クエリの「お作法」の違いを理解する【最重要】
ここが最も重要なポイントです。CakePHPのfind()
メソッドは使えますが、検索条件の書き方がMySQLの場合と微妙に異なります。
例えば、「色が赤または青のデータ」を探す場合…
▼ MySQL (SQL) の常識で書くと…
$options = [
'conditions' => [
'OR' => [
['Test.color' => 'red'],
['Test.color' => 'blue'],
]
]
];
▼ MongoDB用に正しく書くと…
$options = [
'conditions' => [
'$or' => [ // 「OR」が「$or」に変わる!
['Test.color' => 'red'],
['Test.color' => 'blue'],
]
]
];
このように、OR
やAND
といった論理演算子が、$or
や$and
といったMongoDBネイティブの書き方に変わります。これを知らないと、「なぜかデータが取れない…」と長時間悩むことになります。
まとめ
今回は、CakePHPからMongoDBを扱うための基本的な流れと、特に注意すべきクエリの書き方の違いについて解説しました。
最初は少し戸惑うかもしれませんが、一度設定してしまえば、CakePHPの便利なモデル機能を活かしつつ、NoSQLの柔軟性とスピードの恩恵を受けることができます。
この記事が、あなたの技術的な選択肢を広げる「ヒント」になれば幸いです。ぜひ、新しいデータベースの世界に挑戦してみてください。
コメント