かまずにまるのみ。

文鳥とかビールとか

Hello BEAR, Hello World!

この記事は BEAR.Sunday Advent Calendar 2014 7日目の記事です。

 

BEAR.Sunday はもうすぐ 1.0 のリリースが控えている、注目の PHPフレームワークです。
作者は @koriym さんという日本のエンジニアさんです。
雑誌の連載記事や PHP の書籍などでもたびたび取り上げられているので、気になっている方も多いのではないでしょうか。
名前は聞いたことあるけどまだ詳しく知らない方、BEAR.Sunday のクマさんロゴに惹かれて興味を持った方へ向けて、BEAR.Sunday の世界をちょっとだけご紹介したいと思います。

f:id:tdakak:20141207194802p:plain

BEAR.Sunday の魅力

BEAR.Sunday で特筆すべきなのは、その設計思想です。
BEAR.Sunday が提供する枠組みは大変シンプルで力強いものです。
これを実現するために、BEAR.Sunday にはたくさんの技術や思想やアイデアが詰まっています。
このたくさんの知識を前にして「BEAR.Sunday って何だか難しそうだな……」という印象を抱いてしまう方もいらっしゃるかもしれません。(何を隠そう、私自身がそうです……)
しかし逆に考えると、BEAR.Sunday に触れることは新しい知識を得るチャンスでもあります。

BEAR.Sunday とは

BEAR.Sunday マニュアル - イントロダクション には以下のように書かれています。
この2行の中に、たくさんのキーワードが出ていますね。

BEAR.SundayはアプリケーションをRESTアーキテクチャで構築するリソース指向フレームワークです。「依存性の注入」と「アスペクト指向プログラミング」を用いた疎結合なシステムは意図が読みやすく簡潔なコーディングを可能にします。

BEAR.Sunday の素

BEAR.Sunday は様々な要素で構成されています。

f:id:tdakak:20141207194808p:plain

リソース

BEAR.Sunday を端的に表現するものとしてよく用いられているのが「リソース指向フレームワーク」という言葉です。
BEAR.Sunday ではすべてが REST リソースとして扱われます。
ページも、データも、画像もすべてリソースです。
リソースはアプリケーション内部でも URI で取得できます。

REST(Representational State Transfer)

上記に「REST リソース」と書きましたが、それでは REST とは何でしょうか。
RESTafarian である @tkawa さんの言葉を借りると Webの「建築様式」(Architectural Style) / Webのしくみを形作るための大枠になる取り決め(制約)
BEAR.Sunday ではこの制約に則って設計を行います。

オブジェクト指向プログラミング(Object-oriented programming / OOP

koriym さんから OOP に関するお話を伺う機会が今までに何度かありましたが、その中で依存関係逆転の原則やデメテルの法則、"Tell, Don't Ask." などのキーワードがたびたび出てきました。

依存性の注入(Dependency injection / DI)

DI はデザインパターンのひとつです。
DI に関しては PHP メンターズさんの記事がおすすめです。

アスペクト指向プログラミング(Aspect-oriented programming / AOP

wikipedia では以下のように説明されています。

オブジェクト指向ではうまく分離できない特徴(クラス間を横断 (cross-cutting) するような機能)を「アスペクト」とみなし、アスペクト記述言語をもちいて分離して記述することでプログラムに柔軟性をもたせようとする試み。

AOP に関する記事って今まで何度か探してみましたが、あまり見かけないですね。
今回の BEAR.Sunday Advent Calendar 2014 5日目に、@zingooo さんによる DI と AOP に関する記事が公開されています。

BEAR 関連プロジェクト

BEAR について調べていると BEAR. や Ray. というプロジェクトがいくつか出てきます。
BEAR.Sunday マニュアル - イントロダクション - パッケージ に、各パッケージに関する簡潔な解説があります。

  • BEAR.Resource
  • BEAR.Sunday
  • BEAR.Package
  • Ray.Di
  • Ray.Aop

他にも

BEAR.Skeleton というプロジェクトがあります。
その名の通りスケルトンです。
BEAR.Sunday を使ったアプリケーション作成時のベースとして利用できます。

また、BEAR.Sunday の前身として BEAR.Saturday が存在しています。

f:id:tdakak:20141207221151p:plain

BEAR.Sunday で遊んでみたい!

実際に BEAR.Sunday を動かして遊んでみたい人には、まずは本家チュートリアルがオススメです。
https://bearsunday.github.io/manual/ja/tutorial.html

デモアプリケーションの実装や動きを見て見たい人は BEAR.Package で Demo.Sandbox を動かしてみるのもよいかもしれません。

$ composer create-project bear/package apps/Demo.Sandbox dev-develop
$ cd apps/Demo.Sandbox/
$ http://0.0.0.0:8080

f:id:tdakak:20141207223136p:plain

BEAR.Sunday のチュートリアルやデモアプリケーションについては、今度改めて書きたいと思います( ˘ω˘)
アドベントカレンダーの実施期間中にできたらいいな……)