unoh.github.com

Hello,Lithium!

Sun Jul 04 07:16:03 -0700 2010

こんにちは。4月に入社したyuzoです。
今回は元CakePHPのDevelopperが新たに立ち上げた新しいフレームワーク「Lithium」を試してみました。

準備する

この記事を書いている現在のバージョンは0.9.5です。以下からダウンロードできます。
http://rad-dev.org/lithium/versions
ひとまず、draftsのブログチュートリアルを動かすまで、を目標とします。
http://rad-dev.org/lithium/wiki/drafts/blog-tutorial


Lithiumの動作環境は
・HTTP Server (Apache + mod_rewrite recommended)
・PHP 5.3.0 or higher
・CouchDb, MongoDb, MySQL 5 or SQLite 3 for applications utilizing a database
となっております。
今回は以下の環境を準備しました。
・CentOS 5.5 (64bit)
・Apache 2.2.3(+mod_rewrite)
・PHP 5.3.2
・MongoDB 1.4.4

PHP5.3やApacheのインストールについては、ここでは割愛させていただきます。
MongoDBのインストールについては、以下を参考にしてyumでインストールするのがラクです。
http://www.mongodb.org/display/DOCS/CentOS+and+Fedora+Packages
PHP MongoDB DriverはPECLでサクッとインストールしてみました。
http://pecl.php.net/package/mongo

Apacheを設定する

さて、事前にダウンロードしておいたLithiumを適当な場所に展開・配置します。
ここでは以下のディレクトリに配置した前提でお話します。

/var/www/lithium-0.9.5/
↓ディレクトリ名変更
/var/www/lithium/

resourceディレクトリをapache実行ユーザから書き込み可能にしておきます。

chmod -R 0777 /var/www/lithium/app/resources

DocumentRootをlithiumのwebrootディレクトリに指定すれば終了です。
私の環境では以下のような指定にしております。

<VirtualHost *:80>
    ServerName   lithium.devserver
    DocumentRoot /var/www/lithium/app/webroot
    ErrorLog     logs/lithium.error_log
    CustomLog    logs/lithium.access_log combined
    <Directory "/var/www/lithium/app/webroot">
        DirectoryIndex index.php
        AllowOverride All
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

さて、それではapacheとMongoDBを再起動して、アクセスしてみましょう。
・http://lithium.devserver

hellolithium1.png

bakerの方々には心当たりのあるこんなページが表示されるはずです。

bootstrap設定

database connectionを有効にするため、以下の箇所を有効にします。

・app/config/bootstrap.php
require __DIR__ . '/connections.php';    // コメントをはずす!

databaseを設定する

先ほど準備したMongoDBを指定します。

・app/config/connections.php
 array(
    'type' => 'MongoDb',
    'host' => 'localhost',
    'port' => '27017',
    'database' => 'myDB'
));

Modelをつくる

ブログの記事となるPostモデルを作成します。

・app/models/Post.php
<?php
namespace app\models;
class Post extends \lithium\data\Model {
}

Controllerをつくる

Postを操作するコントローラーを作成します。
チュートリアルページには段階を踏んで説明されていますが、 ここでは一気に全て記述します。

・app/controllers/PostsController.php
<?php
namespace app\controllers;
use app\models\Post;
class PostsController extends \lithium\action\Controller {
    // index action
    public function index() {
        $posts = Post::all();
        return compact('posts');
    }
    // add action
    public function add() {
        $success = false;
        if ($this->request->data) {
            $post = Post::create($this->request->data);
            $success = $post->save();
        }
        return compact('success');
    }
}

Viewをつくる

最後にViewを作成します。
indexページとaddページの2種類をつくります。

・app/views/posts/index.html.php
<?php foreach($posts as $post): ?>
  <article>
    <h1><?=$post->title ?></h1>
    <p><?=$post->body ?></p>
  </article>
<?php endforeach; ?>
<?=$this->html->link('add','/posts/add'); ?>
・app/views/posts/index.html.php
<?php if ($success): ?>
<p>Post Successfully Saved</p>
<?php endif; ?>
<?=$this->form->create(); ?>
  <?=$this->form->field('title');?>
  <?=$this->form->field('body', array('type' => 'textarea'));?>
  <?=$this->form->submit('Add Post'); ?>
<?=$this->form->end(); ?>
<?=$this->html->link('index','/posts/index'); ?>

動作を確認する

それではさっそく記事を登録してみましょう。
http://lithium.devserver/posts/add
にアクセスすると、以下のようなページが表示されるはずです。

hellolithium2.png

記事と内容を入力して「Add Post」ボタンを押すと投稿完了です。
記事一覧ページで確認してみましょう。
http://lithium.devserver/posts/index

hellolithium3.png

こんな感じで表示されれば成功です!

データを確認してみる

たった今MongoDBに登録した内容を確認してみましょう。

[yuzone@devserver ~]$ mongo  # mongoコマンドをたたく
MongoDB shell version: 1.4.4
url: test
connecting to: test
type "help" for help
> use myDB         # myDBを選択する
switched to db myDB
> show collections      # collections(mysqlでいうtableみたいなもの)一覧表示
posts
system.indexes
> db.posts.find()       # posts collectionsの中身をみる
{ "_id" : ObjectId("4c30b3369c3f95a30c000000"), "title" : "Hello,Lithium!", "body" : "こんにちは!こんにちは!" }
>                                                                                                                            

BSONという、JSONに似たバイナリ形式で保存されています。
http://www.mongodb.org/display/DOCS/BSON

以上、駆け足で試してみました。
はじまったばかりのLithiumプロジェクトですが、これからの展開が非常に楽しみですね。
もっともっと試してみたい方は、
The longer Lithium Blog tutorial using MySQL – Part 1 at SANIsoft – PHP for E Biz
こちらを参考に突き進んでみてください。

また、Lithium情報をゲットするのにとてもお世話になっている、CakePHPコミュニティで有名なyandoさんのサイトをご紹介させて頂きます。
candycane development blog


それでは、またいつかお会いしましょう。