lithium labo #1
TRANSCRIPT
Lithiumラボ #1
1
2010/01/30 yandod
超先進的フレームワーク
自己紹介
name Yusuke Ando aka, yandod
PHPについて書いたり喋ったり
CakePHP evengelist.
I love Beatles.
RedmineをCakePHPに移植中
久しぶりに技術の話をします
2
‚The Origin of Lithium‛ at NYPHP
3
4
アジェンダ
Lithiumとは
機能の特徴とデモ
まとめ
Copyright © YusukeAndo. 2010 - . All rights reserved. 4
Lithiumとは
5
由来と背景
Copyright © YusukeAndo. 2010 - . All rights reserved. 5
Copyright © YusukeAndo. 2010 - . All rights reserved.
Lithiumの基本
PHP5.3以降用フレームワーク
クオリティ、速度、柔軟性を追求
分散ストレージ、キュー、ドキュメント指向DBをMySQLなどと同等に積極利用
以前はcake3と呼ばれてた
6
Copyright © YusukeAndo. 2010 - . All rights reserved.
Cake3から別プロジェクトに派生
7
Copyright © YusukeAndo. 2010 - . All rights reserved. 8
Gwoo & Nate !
もうすこし詳しく
12人のデベロッパが開発に参加中
現在のバージョンは0.5
コードの雰囲気はCakePHP風
MongoDB、Doctrine、Zendなどとの連携例あり
ユニットテストコンソール、コマンドライン
CakePHPの教訓を生かした改良(ORマッパ、View)
表面的な機能は軽いジャブ
9
Copyright © YusukeAndo. 2010 - . All rights reserved. 10
Comparison isn’t matter.
The Beatles said…
11
You can celebrate anything you want,You can penetrate any place you to go,
‚Dig a Pony‛
何でも好きなものを賞賛すればいい、何処でも好きな所に突き進めばいい。http://www.youtube.com/watch?v=tqcJCiFTdwY
Nate said…
12
A lot of things are superficial.
ほとんどの事柄は表面的な事に過ぎない
ならば何を言いたいのか
13
・・・・・
Lithiumの本質は?
14
PHP5.3
拡張性(flexibility)
機能の特徴とデモ
15
雰囲気を体験
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
Copyright © YusukeAndo. 2010 - . All rights reserved. 17
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. 18
ブログチュートリアル
PostsController から Postモデルを呼ぶ
Viewはphpで書く
データベースのデータは今回は先に入れておく
Namespaceの記述などが頻出する
コードの分量はCakePHPよりもさらに少なく
19
app/models/Post.php
Copyright © YusukeAndo. 2010 - . All rights reserved. 20
<?phpnamespace app¥models;
class Post extends ¥lithium¥data¥Model {
}
ネームスペースの指定
基底クラスもネームスペースを指定
app/controllers/PostsController.php
Copyright © YusukeAndo. 2010 - . All rights reserved. 21
<?phpnamespace app¥controllers;use app¥models¥Post;
class PostsController extends ¥lithium¥action¥Controller {
public function index(){$posts = Post::all();return compact('posts');
}}
ネームスペースのインポート・指定
Viewへ変数をreturn
app/views/posts/index.html.php
Copyright © YusukeAndo. 2010 - . All rights reserved. 22
<?php foreach($posts as $post): ?><article><h1><?=$post->title ?></h1><p><?=$post->body ?></p></article><?php endforeach; ?>
エスケープは自動
実行結果
Copyright © YusukeAndo. 2010 - . All rights reserved. 23
拡張性はどこに?
コアライブラリがほぼ完全に分離されている
静的遅延束縛でstaticも拡張できる
Librariesクラスを使って追加、変更が可能
超先進的なフィルタ機能が使える
コールバックに頼らない拡張
サブクラスを作る必要もない
24
フィルタ機能
基底クラス Object StaticObjectに備わっている
applyFilterメソッドで対象のメソッドと処理を指定
処理はクロージャで指定
処理の最後で次のフィルタをコールしてreturn
どうにかオブジェクトを引っ張りだせば設定可能
$object->applyFilter(‘hoge’, クロージャ);
25
クエリのログを出してみる
Copyright © YusukeAndo. 2010 - . All rights reserved. 26
¥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. 27
これが意味するところは
28
ありえないほど超簡単にフレームワークが拡張できる
まとめ
Lithiumは軽量さと拡張性を追求している
他のライブラリやフレームワークと接続も容易
PHP5.3の機能を徹底的に使っている
静的遅延束縛
ネームスペース
クロージャ
開発は猛スピードで進行中
29
30
フレームワークの枠を超えてPHPの未来へ突き進もう!
参考
Lithium Projecthttp://rad-dev.org/
Candycane development bloghttp://blog.candycane.jp/
31
32
質疑応答
ご静聴ありがとうございました。
Business ninja @ shownimalshttp://www.shawnimals.com/characters/709
Copyright © YusukeAndo. 2010 - . All rights reserved. 32