SlideShare a Scribd company logo
Lithiumラボ #1
超先進的フレームワーク




          2010/01/30 yandod
                              1
自己紹介

name Yusuke Ando aka, yandod
PHPについて書いたり喋ったり
CakePHP evengelist.
I love Beatles.
RedmineをCakePHPに移植中


     久しぶりに技術の話をします
                               2
‚The Origin of Lithium‛ at NYPHP




                                   3
アジェンダ


   Lithiumとは
   機能の特徴とデモ
   まとめ




Copyright © YusukeAndo. 2010 - . All rights reserved.   4
Lithiumとは
由来と背景




Copyright © YusukeAndo. 2010 - . All rights reserved.   5
Lithiumの基本




     PHP5.3以降用フレームワーク
     クオリティ、速度、柔軟性を追求
     分散ストレージ、キュー、ドキュメント指向DBを
     MySQLなどと同等に積極利用
     以前はcake3と呼ばれてた

Copyright © YusukeAndo. 2010 - . All rights reserved.   6
Cake3から別プロジェクトに派生




Copyright © YusukeAndo. 2010 - . All rights reserved.   7
Gwoo & Nate !




Copyright © YusukeAndo. 2010 - . All rights reserved.   8
もうすこし詳しく

12人のデベロッパが開発に参加中
現在のバージョンは0.5
コードの雰囲気はCakePHP風
MongoDB、Doctrine、Zendなどとの連携例あり
ユニットテストコンソール、コマンドライン
CakePHPの教訓を生かした改良(ORマッパ、View)

   表面的な機能は軽いジャブ
                                 9
Comparison isn’t matter.




Copyright © YusukeAndo. 2010 - . All rights reserved.   10
The Beatles said…


You can celebrate anything you want,
You can penetrate any place you to go,
                          ‚Dig a Pony‛


何でも好きなものを賞賛すればいい、
何処でも好きな所に突き進めばいい。
http://www.youtube.com/watch?v=tqcJCiFTdwY


                                             11
Nate said…




A lot of things are superficial.


  ほとんどの事柄は表面的な事に過ぎない


                                   12
ならば何を言いたいのか




      ・・・・・

              13
Lithiumの本質は?




         PHP5.3

拡張性(flexibility)
                   14
機能の特徴とデモ
雰囲気を体験




Copyright © YusukeAndo. 2010 - . All rights reserved.   15
インストール

PHP5.3の環境が必要 (XAMPPでもよい)
MongoDBもしくはCouchDBが良い
公式サイトからダウンロードして置くだけ
http://rad-dev.org/lithium/versions
DB設定は app/config/connections.php
チュートリアルもあり
 http://rad-dev.org/lithium/wiki/drafts/blog-
tutorial

   CakePHP的な簡単セットアップ
                                                16
app/config/connections.php
                                                         ネームスペースの
                                                           インポート
use ¥lithium¥data¥Connections;

Connections::add('default', 'database', array(
   'adapter' => 'MySql',
   'host' => 'localhost',
   'login' => 'root',
   'password' => '',
   'database' => 'lithium-blog'
));


 Copyright © YusukeAndo. 2010 - . All rights reserved.              17
初期画面




Copyright © YusukeAndo. 2010 - . All rights reserved.   18
ブログチュートリアル

PostsController から Postモデルを呼ぶ
Viewはphpで書く
データベースのデータは今回は先に入れておく
Namespaceの記述などが頻出する
コードの分量はCakePHPよりもさらに少なく




                                19
app/models/Post.php


<?php                                                       ネームスペースの
                                                               指定
namespace app¥models;

class Post extends ¥lithium¥data¥Model {
                                                               基底クラスもネー
}                                                              ムスペースを指定




    Copyright © YusukeAndo. 2010 - . All rights reserved.                 20
app/controllers/PostsController.php


<?php
namespace app¥controllers; ネームスペースの
                           インポート・指定
use app¥models¥Post;

class PostsController extends ¥lithium¥action¥Controller {

    public function index(){
       $posts = Post::all();                                Viewへ変数を
       return compact('posts');                                return
    }
}


    Copyright © YusukeAndo. 2010 - . All rights reserved.               21
app/views/posts/index.html.php


<?php foreach($posts as $post): ?>
<article>
<h1><?=$post->title ?></h1>
<p><?=$post->body ?></p>
</article>              エスケープは自動
<?php endforeach; ?>




  Copyright © YusukeAndo. 2010 - . All rights reserved.   22
実行結果




Copyright © YusukeAndo. 2010 - . All rights reserved.   23
拡張性はどこに?

コアライブラリがほぼ完全に分離されている
 静的遅延束縛でstaticも拡張できる
Librariesクラスを使って追加、変更が可能
超先進的なフィルタ機能が使える
 コールバックに頼らない拡張
 サブクラスを作る必要もない



                           24
フィルタ機能

 基底クラス Object StaticObjectに備わっている
 applyFilterメソッドで対象のメソッドと処理を指定
 処理はクロージャで指定
 処理の最後で次のフィルタをコールしてreturn
 どうにかオブジェクトを引っ張りだせば設定可能


$object->applyFilter(‘hoge’, クロージャ);

                                       25
クエリのログを出してみる


¥lithium¥data¥Connections::get('default')-
>applyFilter('_execute',
function($self,$params,$chain){
     echo $params['sql']."<br/>";
     return $chain->next(         クロージャで動作
       $self, $params, $chain);    を指定できる
});


  Copyright © YusukeAndo. 2010 - . All rights reserved.   26
実行結果




Copyright © YusukeAndo. 2010 - . All rights reserved.   27
これが意味するところは




 ありえないほど超簡単に
フレームワークが拡張できる


                28
まとめ

Lithiumは軽量さと拡張性を追求している
 他のライブラリやフレームワークと接続も容易
PHP5.3の機能を徹底的に使っている
 静的遅延束縛
 ネームスペース
 クロージャ
開発は猛スピードで進行中

                         29
フレームワークの枠を超えて
PHPの未来へ突き進もう!


                30
参考

Lithium Project
 http://rad-dev.org/
Candycane development blog
http://blog.candycane.jp/




                             31
質疑応答




                 ご静聴ありがとうございました。




                       Business ninja @ shownimals
                       http://www.shawnimals.com/characters/709
Copyright © YusukeAndo. 2010 - . All rights reserved.             32

More Related Content

Lithium Labo #1