MongoDBをYii Frameworkとdirectmongosuiteエクステンションからホゲホゲしてみる

PHPは3年くらい前にちょっとしたバッチプログラムを書いた事ある程度なのですが、 なんだかんだ言っても、今後も使われる言語なんだろうなぁという印象でいます。   チョコっとみてみたのですが、ひねくれ者な自分としては、 あんまりみんながやってなさそうなヤツがイイかなと思い、 Yii Frameworkというのを試してみようと思います。 Yiiは"Yes, it is!"の頭文字っていうことらしくて、その辺のネーミングもなんかイイかな、と。   ■ Readme とりあえずYiiのGithub(https://github.com/yiisoft/yii/)のReadmeから見ていきます。 あんまり、特質すべき事も無さそうですが、Windowsでは"yiic"っていう コマンドラインツール的なのが使えるのかなっていうとことか、 東京で働いていた時の部署ではPHPのバージョンを上げるのに苦労していたのですが、 "The minimum requirement by Yii is that your Web server supports PHP 5.1.0 or above" って事で、PHP5からしかダメよってのが新しいフレームワークっぽくてナイスかな、と。     PHPの開発環境 "PDT"でググってたら↓のZENDのページに飛んで、 http://www.zend.com/en/community/pdt/downloads "Zend Eclipse PDT"っていうのが、"PDT 3.0.2 w/Eclipse Indigo"って事らしいす。   後はWindowsPHPっていったらXAMPPでしょって事で↓ http://www.apachefriends.org/jp/xampp-windows.html   Eclipse-PHPとXAMPPをC直下にYYY(Yes Yes Y'all!の略的なw)という ディレクトリを作ってそこに配置します。

XAMPPのコントロールパネルからApache起動したら、なぜだか分からないですが起動出来ず。 プロセスみてみると、なんか80番ポートリスンしてるヤツいるし。

プロトコル ローカル アドレス 外部アドレス 状態 TCP 0.0.0.0:80 0.0.0.0:0 LISTENING

  ググってたら↓のように-oanで叩くとプロセス番号も表示出来るんですね。

C:Userseiji.shinohara>netstat -oan アクティブな接続 プロトコル ローカル アドレス 外部アドレス 状態 PID TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 1556

  タスクマネージャーからプロセス落とそうと思ったら出来なくて、 TASKKILLというコマンドを使って↓のように落としました。

C:>taskkill /PID 1556 成功: PID 1556 のプロセスに強制終了のシグナルを送信しました。

  Eclipse上でHello World的なPHPファイルを作ってRunしてみたら、 なんか怒られてるし、、と。んま、なんの設定もしてないので、 そりゃそうかって気はしてくるわけですが。。w   ↓をhttpd.confに追加してやってApache再起動してやってアクセスすると、、

Alias /YYY "C:/YYY/eclipse-php/workspace/YYY/" <Directory "C:/YYY/eclipse-php/workspace/YYY/"> AllowOverride None Options Indexes MultiViews ExecCGI Order allow,deny Allow from all </Directory>

  ↓無事Hello World出来ました。     ■ Yii Frameworkのインストール Yii Frameworkのページからtar.gzファイルをダウンロードしてきて、 DemoディレクトリにあるBlogアプリにアクセスしてみたら、 サクっと表示出来ました。さすがPHP。この辺にお手軽さが垣間見れます。   DemoのBlogアプリのindex.php見てみると↓のように見にいってるんですね。

<?php // change the following paths if necessary $yii=dirname(__FILE__).'/../../framework/yii.php'; $config=dirname(__FILE__).'/protected/config/main.php';

protectedディレクトリの中には、yiic.batってコマンドツールがあったり、 config/main.phpとか読んでると設定系がブワーっと記載されています。 #Java屋な自分からするとmain文か?みたいなイメージがあるんですが、 #viewの下にもview/layout/main.phpってのもあったりしました。   んま、そんなこんなで、インストールっていうか、単純に ディレクトリごとファイル置けば動くことが分かりました。     ■ FiiからMongoDBにアクセスできるようにするには Yii FrameworkのWebページでextensionを"mongodb"で検索してみると、 ↓のようにチョロチョロ出てきます。"aoyagikouhei"さんという日本人の方も セッション情報をMongoDBで管理する的なエクステンションとか、 ログをMongoDBに溜め込む的なエクステンションを提供してるようですね。   でもって、今回はdirectmongosuiteというのを使ってみます。 上記のaoyagiさんのモジュールも含まれてるようですし。 あんまりちゃんと読んでないのですが、yiimongodbsuiteはイイんだけど、 ActiveRecord的なのが重いとか、スキーマ変更するときにホゲホゲみたいのが発生してダルい的な事が 書いてありました。 #個人的にその辺ちょっと気になってて。スキーマ変えるの楽なのに、 #プログラム変えるのダルかったらしょうがねぇなぁと。     ■ MongoDBのWindowsマシンへのインストール http://www.mongodb.org/downloadsからダウンロードしてきて、 ↓のように配置するだけです。binの下にあるmongod.exe叩くだけでサーバー起動。お手軽。   でもってクライアントも、binの下にあるmongo.exeを叩くだけです。 試しにInsertとSelectをしてみます↓ #db.hoge.find;で怒られてますがw #JavaScriptって事でfindメソッドなのでfind()って感じでカッコが必要です。     ■ Yiiにdirectmongosuiteを突っ込んで動かしてみる(その1) directmongosuite.0.2.6.zip をダウンロードしてきて、解凍してものを、 yii-1.1.10.r3566demoshelloworldprotectedextensions に配置します。   index.phpに↓を足して、config/main.phpを読み込むようにします。 $config=dirname(FILE).'/protected/config/main.php';   config/main.phpはとりあえず動かしたい的な感じなので最小限に。

<?php

return array(
        // autoloading model and component classes
        'import'=>array(
                'application.models.*',
                'application.components.*',
                'ext.directmongosuite.components.*',
        ),

        'behaviors' => array(
                'edms' => array(
                        'class'=>'EDMSBehavior',
                        // 'connectionId' = 'mongodb' //if you work with yiimongodbsuite
                        //see the application component 'EDMSConnection' below
                        // 'connectionId' = 'edms' //default;
                        //'debug'=>true //for extended logging
                )
        ),

        // application components
        'components'=>array(

                //configure the mongodb connection
                //set the values for server and options analog to the constructor
                //Mongo::__construct from the PHP manual
                'edms' => array(
                        'class'            => 'EDMSConnection',
                        'dbName'           => 'testdb',
                        //'server'           => 'mongodb://localhost:27017' //default
                        //'options'  => array(.....);
                ),
        ),
);

  んで、動かしたら何かエラーになっちゃって、、。 ってか、、そもそもPHPのMongoDBドライバー入れてなかったなと。     PHPのMongoDBドライバーの設定 ググったらpeclで入れられるとかいうページも見かけたのですが出来なかったので、 普通にhttp://pecl.php.net/package/mongoからdllファイル落としてきて、 xampp/php/extの中に入れてやりました。php.iniには ↓のように設定を入れてやります。 extension=php_mongo.dll     ■ Yiiにdirectmongosuiteを突っ込んで動かしてみる(その2) お膳立ては整いましたので、上記でMongoDBに入れた値を、 YiiのControllerクラスから取り出してブラウザに表示してみます。   Controllerのコードは↓こんな感じ。 (ほぼdirectmongosuiteのページに載ってるまんまですが…汗)

<?php

/**
 * SiteController is the default controller to handle user requests.
 */
class SiteController extends CController
{
    /**
     * Index action is the default action in a controller.
     */
    public function actionIndex()
    {
        //create the PHP class 'Mongo' with the configured connection (see id 'edms' in config/main.php)
        $mongo = Yii::app()->edmsMongo();

        //create the PHP class 'MongoDB'
        $mongoDb = Yii::app()->edmsMongoDB();

        //create the PHP class 'MongoCollection' with the collectionName 'hoge'
        $collection = Yii::app()->edmsMongoCollection('hoge');

        $user = $collection->findOne(array('twitter' => 'shinodogg'));
        print_r($user);
    }
}

  画面から実行してみると↓こんな感じ。Yay!   めでたしめでたし。    

MongoDB and PHP
MongoDB and PHP
posted with amazlet at 12.06.13
Steve Francia
Oreilly & Associates Inc
売り上げランキング: 145599