32
Lithiumラボ #1 1 2010/01/30 yandod 超先進的フレームワーク

Lithium Labo #1

  • Upload
    yandod

  • View
    3.891

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Lithium Labo #1

Lithiumラボ #1

1

2010/01/30 yandod

超先進的フレームワーク

Page 2: Lithium Labo #1

自己紹介

name Yusuke Ando aka, yandod

PHPについて書いたり喋ったり

CakePHP evengelist.

I love Beatles.

RedmineをCakePHPに移植中

久しぶりに技術の話をします

2

Page 3: Lithium Labo #1

‚The Origin of Lithium‛ at NYPHP

3

Page 4: Lithium Labo #1

4

アジェンダ

Lithiumとは

機能の特徴とデモ

まとめ

Copyright © YusukeAndo. 2010 - . All rights reserved. 4

Page 5: Lithium Labo #1

Lithiumとは

5

由来と背景

Copyright © YusukeAndo. 2010 - . All rights reserved. 5

Page 6: Lithium Labo #1

Copyright © YusukeAndo. 2010 - . All rights reserved.

Lithiumの基本

PHP5.3以降用フレームワーク

クオリティ、速度、柔軟性を追求

分散ストレージ、キュー、ドキュメント指向DBをMySQLなどと同等に積極利用

以前はcake3と呼ばれてた

6

Page 7: Lithium Labo #1

Copyright © YusukeAndo. 2010 - . All rights reserved.

Cake3から別プロジェクトに派生

7

Page 8: Lithium Labo #1

Copyright © YusukeAndo. 2010 - . All rights reserved. 8

Gwoo & Nate !

Page 9: Lithium Labo #1

もうすこし詳しく

12人のデベロッパが開発に参加中

現在のバージョンは0.5

コードの雰囲気はCakePHP風

MongoDB、Doctrine、Zendなどとの連携例あり

ユニットテストコンソール、コマンドライン

CakePHPの教訓を生かした改良(ORマッパ、View)

表面的な機能は軽いジャブ

9

Page 10: Lithium Labo #1

Copyright © YusukeAndo. 2010 - . All rights reserved. 10

Comparison isn’t matter.

Page 11: Lithium Labo #1

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

Nate said…

12

A lot of things are superficial.

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

Page 13: Lithium Labo #1

ならば何を言いたいのか

13

・・・・・

Page 14: Lithium Labo #1

Lithiumの本質は?

14

PHP5.3

拡張性(flexibility)

Page 15: Lithium Labo #1

機能の特徴とデモ

15

雰囲気を体験

Copyright © YusukeAndo. 2010 - . All rights reserved. 15

Page 16: Lithium Labo #1

インストール

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

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

初期画面

Copyright © YusukeAndo. 2010 - . All rights reserved. 18

Page 19: Lithium Labo #1

ブログチュートリアル

PostsController から Postモデルを呼ぶ

Viewはphpで書く

データベースのデータは今回は先に入れておく

Namespaceの記述などが頻出する

コードの分量はCakePHPよりもさらに少なく

19

Page 20: Lithium Labo #1

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

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

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

実行結果

Copyright © YusukeAndo. 2010 - . All rights reserved. 23

Page 24: Lithium Labo #1

拡張性はどこに?

コアライブラリがほぼ完全に分離されている

静的遅延束縛でstaticも拡張できる

Librariesクラスを使って追加、変更が可能

超先進的なフィルタ機能が使える

コールバックに頼らない拡張

サブクラスを作る必要もない

24

Page 25: Lithium Labo #1

フィルタ機能

基底クラス Object StaticObjectに備わっている

applyFilterメソッドで対象のメソッドと処理を指定

処理はクロージャで指定

処理の最後で次のフィルタをコールしてreturn

どうにかオブジェクトを引っ張りだせば設定可能

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

25

Page 26: Lithium Labo #1

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

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

実行結果

Copyright © YusukeAndo. 2010 - . All rights reserved. 27

Page 28: Lithium Labo #1

これが意味するところは

28

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

Page 29: Lithium Labo #1

まとめ

Lithiumは軽量さと拡張性を追求している

他のライブラリやフレームワークと接続も容易

PHP5.3の機能を徹底的に使っている

静的遅延束縛

ネームスペース

クロージャ

開発は猛スピードで進行中

29

Page 30: Lithium Labo #1

30

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

Page 31: Lithium Labo #1

参考

Lithium Projecthttp://rad-dev.org/

Candycane development bloghttp://blog.candycane.jp/

31

Page 32: Lithium Labo #1

32

質疑応答

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

Business ninja @ shownimalshttp://www.shawnimals.com/characters/709

Copyright © YusukeAndo. 2010 - . All rights reserved. 32