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