こんにちは、@ttskch です。

5/31(土) に開催された Nagoya.php vol.5 に参加してきました。 今回は、PHP のフレームワークである BEAR.Sunday をみんなで触ってみましょうという内容でした。

光栄なことに BEAR.Sunday 作者の @koriym さんがわざわざワークショップを作成してくださったので、ひとまずみんなでこの内容を実践してみましょうということになりました。

後日ご本人に伺ったところによると、@koriym さん的には “小一時間で手軽にひと通り体験できるワークショップ” というコンセプトで作ってくださったらしいのですが、なんだかんだで割と悪戦苦闘しながら実践する結果になりました(笑)

勉強会当日の朝にはじめて BEAR.Sunday をインストールしてみたレベルの初心者ですが、同じようにこれから BEAR.Sunday を触ってみたいという方がこのワークショップを活用できるように、実際に触ってみた感想などを記録しておきます。 (内容に間違いがあれば twitter 等で指摘していただけると幸いです。)

はじめに ― BEAR.Sunday はリソース指向フレームワーク

まず BEAR.Sunday について少しだけ説明させていただきます。(私の理解している範囲で…)

BEAR.Sunday は、一般的なフルスタックフレームワークとは思想が異なる、 リソース指向 のフレームワークです。 MVC のレイヤーは存在せず、全てを リソース という概念で表現します。 (“Because Evenrthing is A Resource” で BEAR だそうです。)

リソースには アプリケーションリソースページリソース の二種類があり、いずれも RESTful なインタフェースの実装 (GET/POST/PUT/DELETE) として表現されます。

(MVC で例えるのは良くないかもしれませんが) イメージ的にはアプリケーションリソースがモデル、ページリソースがコントローラに近い感じです。

また、BEAR.Sunday はフレームワーク標準で DI と AOP をサポートしており、

  • REST
  • DI
  • AOP

この 3 つが BEAR.Sunday というフレームワークの主な特徴と言えるかと思います。

(公式 にも BEAR.Sunday is a resource orientated framework with a REST centered architecture, implementing Dependency Injection and Aspect Orientated Programming' at its core. って書いてあるし。)

ワークショップの内容

今回実践したワークショップの内容は https://github.com/BEARSunday/bearsunday.github.io/wiki/workshop こちらです。

ざっと内容をご紹介すると、以下のような流れになっています。

基本編

  1. アプリケーションのインストール
  2. フレームワークのインストール
  3. アプリケーションリソースファイルの作成
  4. CLI でアクセスしてみる (異常系)
  5. CLI でアクセスしてみる (正常系)
  6. CLI で Web API サーバを立ち上げて REST クライアントからアクセスしてみる
  7. Web ページとして動作させてみる
  8. 独自にページリソースファイル (およびビューテンプレート) を作って動作させてみる

DI チャレンジ

  1. このアプリにログ機能を付けてみよう、ただし DI でね

AOP チャレンジ

  1. このアプリに実行時間を測る機能を付けてみよう、ただし AOP でね
  2. AOP でバインドするメソッドを、名指しじゃなくてアノテーションで指定できるようにしてみよう (応用)
  3. 計測した実行時間をログに出力してみよう、もちろんロガーは DI でね (応用)

追記

実践した内容を wiki に追記してほしいとのご依頼を @koriym さんより直々にいただいたので、上記の DI チャレンジ および AOP チャレンジ の内容は「やってみよう」形式ではなく実装例付きのチュートリアルに変更させていただきました。

感想

  • アプリをインストールしたあとで依存としてフレームワークをインストールするという順序が珍しいなぁと思いました (小並感)
  • リソース指向を全く理解していないままいきなりアプリケーションリソースを作って動かしてみるという流れに少し戸惑いましたが、実際に書いて動かしてみる中で自然と理解できました
  • アプリの振る舞いもページもすべて「リソース」という同じインタフェースで実装するというのは実はすごく直感的なのではと感じました
  • Ray.DI (BEAR.Sunday に組み込まれている DI コンテナ) を初めて使いましたが、Interface のクラス名に対してインジェクトできるのが気に入りました
  • AOP も初めての体験でしたが、処理をフックして振る舞いを追加するという発想はすごく面白いと感じました

我ながら低レベルな感想ですが(笑)、少し触ってみてフレームワークとしてはすごく興味深いと感じたので、とりあえず個人プロジェクトで何か作ってみようかなと思っています。

最後に、私の実践例を リンクしておきます ので、よろしければ参考にしてみてください。 ワークショップのお題に沿って (だいたい) コミットを分けてあるので分かりやすいかと思います。

関連リンク