今日も適当ダイアリー

PHP や Javascript や Symfony、BEAR.Sunday などのWeb周りのことを中心に。それ以外のことも気まぐれに投稿します。

PHP5.4+ で開発が行われている BEAR.Sunday フレームワークを動かしてみる

PHP5.4 Advent Calendar 2011 6日目です。
5日は @chobi_e さんによる 5.4のSession周りの変更について でした。

さて、勢いにまかせて Advent Calender に名乗り出たもののネタをどうしようか、と思っていたら、先日開催された Symfony 勉強会兼忘年会@koriym 師匠に出会いいたく感銘を受けました。
そこで、@koriym さんが開発をされている BEAR.Sunday を動かしてみたいと思います。

BEAR はリソース指向の PHP フレームワークで、現行のバージョンは BEAR.Saturday というコードネーム(?)で開発されています。
その次期バージョンとして PHP 5.4+ で開発が行われているのが BEAR.Sunday です。

※下記は開発中のバージョンに対しての動作結果になりますので、下記のとおり行っても動かなかったり、今後構造が変更される可能性が高いです。

インストールは下記のコマンドで行えます。

$ git clone git://github.com/koriym/BEAR.Sunday.git
$ cd BEAR.Sunday

現在の最新は dev2 ブランチのようです。

$ git checkout -b dev2 origin/dev2
$ git submodule update --init

サンプルアプリケーションを動かすには下記のようにします。

$ php apps/01-helloworld/htdocs/index.php get /Hello 
[HEADER]X-Cache-Since: Tue, 06 Dec 2011 00:54:15 +0900 (15120)
[HEADER]X-Request-Per-Second: 0
[HEADER]X-Memory-Peak-Usage: 1,310,720
[BODY]

Hello World

ビルトインウェブサーバー対応

ビルトインウェブサーバーにも対応予定で、開発やデバッグに活用できることになるかと思います。

実はここで実際に動かしてみようと思ったのですが、私の環境+取得したバージョンではうまく動きませんでした……。(devブランチ版では動いたのですが)

Trait によるページ単位でのテンプレートエンジン選択

(2012/07/13追記)
コメント欄で、開発者でもある @koriym 氏より指摘いただきましたが、この機能は現在(2012/07/13)、DIによる「テンプレートエンジンの注入」に変更されています。
以下は執筆当時の内容となりますのでご注意ください。

BEAR.Sunday の現在の実装では、Trait を用いてページ単位でテンプレートエンジンを変更することが可能です。

apps/02-template-engine/Page 配下に Page リソースがあり、4つのテンプレートエンジンの切り替えのサンプルが実装されています。
以下の2つのテンプレートエンジンの例を見れば分かる通りなのですが、基本的に変更されているのは、10行目の Trait の利用を指定する use 文のみです。
Trait によって、疎結合になり水平方向に展開されている(BEAR.Sunday の開発方針の一つとして「継承より合成を好む」と語られています)のが見て取れます。何をどうしているのか、が初めてこのコードを見ても直感的に分かる、というのも重要なポイントですね。
テンプレートエンジンに PHP を使ったページ

namespace template\Page;

use BEAR\Resource\Object as ResourceObject,
BEAR\Resource\AbstractObject as Page,
BEAR\Resource\Resource;

class Php extends Page
{
use BEAR\Framework\Link\View\Php; ///<

public function __construct()
{
}
:


テンプレートエンジンに Twig を使ったページ

namespace template\Page;

use BEAR\Resource\Object as ResourceObject,
BEAR\Resource\AbstractObject as Page,
BEAR\Resource\Resource;

class Twig extends Page
{
use BEAR\Framework\Link\View\Twig; ///<

public function __construct()
{
}
:


まもなくデビューする PHP5.4 と併せて PHP5.4+ なフレームワークも要注目です!

BEAR 自体を紹介することは出来ませんでしたが、非常に興味深いフレームワークであり、コードを読むと様々なチャレンジが凝縮されているのがよくわかります。
Symfony 勉強会でも、グローバル変数や、goto 文の使用などが注目されていましたが、開発"慣れ"している方にとっては、ハッと思わされるような事が多くあります。ただ、BEAR.Sunday では「敢えて」そのように書かれており、その背景には深い考察があります。

BEAR(Sunday) に興味を持った方は、下記ブログなどで設計思想や設計方針が語られていますので、是非そちらもチェックしてみてくださいね。

@koriym さんは「PHP はスクリプト言語です」とも投げかけていました。これについては、昨日 @BEARSunday でつぶやかれていましたので興味のある方はそちらも要チェックですよ。

さて、PHP5.4 Advent Calender 7日目は @Hiraku さんです!