【PHP】CakePHPでMongoDBを使うには?導入からSQLとの違いまで解説

CakePHP

導入

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サーバーであれば、yumaptでMongoDB本体をインストールし、peclというコマンドでPHP拡張(mongodb)をインストールするのが一般的です。

# PECLを使ってPHPのMongoDBドライバをインストール
sudo pecl install mongodb

インストール後、php.iniextension=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'],
        ]
    ]
];

このように、ORANDといった論理演算子が、$or$andといったMongoDBネイティブの書き方に変わります。これを知らないと、「なぜかデータが取れない…」と長時間悩むことになります。


まとめ

今回は、CakePHPからMongoDBを扱うための基本的な流れと、特に注意すべきクエリの書き方の違いについて解説しました。

最初は少し戸惑うかもしれませんが、一度設定してしまえば、CakePHPの便利なモデル機能を活かしつつ、NoSQLの柔軟性とスピードの恩恵を受けることができます。

この記事が、あなたの技術的な選択肢を広げる「ヒント」になれば幸いです。ぜひ、新しいデータベースの世界に挑戦してみてください。

コメント

タイトルとURLをコピーしました