読者です 読者をやめる 読者になる 読者になる

プログラミング - THIS IS IT !

より良い開発をすべく日々奮闘しているプログラマーです。設計やDDDに興味があります。主にPHPネタを書いてます。 Crocos Inc./日本Symfonyユーザー会

Symfony勉強会#10に参加しEventListenerについて発表してきました

Symfony2 勉強会 日記 php

先日7月26日に、Symfony 勉強会#10 が開催されました。

会場は株式会社ヒトメディアさんにご提供いただきました。 @imunew さん、会場提供の申し出ありがとうございました。 また準備に協力いただいたヒトメディアの皆様ありがとうございました。

今回開催された「勉強会#10 」ですが、前回の勉強会#9 が4/19から約3ヶ月での開催となりました。

ここ数年私の記憶ではではSymfony勉強会は、半年とか1年に1回ぐらいペースでしか開催されていなかったのでとても早い間隔での開催でした。

勉強会の内容は「Silexワークショップ」と「参加者LT」の2本立てでした。

前半 Silexワークショップ

Creating A Simple REST Application With Silexの写経やコールドリーディングなど行いました。

参加者にSllexについて聞いてみたところ、知らないという方がわりと多かったようです。

ワークショップ中は私の画面を映しならが進めていきました。

composerでsilexのインストールを行うところから始めて、コードを書いていきました。

  • $app->abort()と書くのが例外を投げているのが分かりづらい
  • 写経する元のコードが間違っている。ハマりどころが多いから自分で考えて書けということかな?
  • ここはHTTP status code 204であってるんだっけ?
  • HTTP_CREATED 200はおかしくない? 201だよね

と画面を見ながら色々話しながら進めていきました。

元の記事には書いてなかったのですが、個人的にSilexのテストコードを書いて見たかったので写経から逸れてやってみることに。

テストコードを書いている途中でsymfony/browser-kitが必要になったので、composerでインストールする。

http://silex-users-jp.phper.jp/doc/html/testing.htmlに習い、

"symfony/browser-kit": ">=2.3,<2.4-dev"

をcomposer.jsonに追記し(browser-kitのversionが古いという問題はさておき)インストール

$ composer update

しかしcomposerがまったく反応せずインストールが進まない。。

f:id:okapon_pon:20140729010125p:plain

この状態で数分間固まる。処理が進んでいるのかも分からず。。

まさにcomposerの闇を垣間見た瞬間でした。。

結果的にはその後の@_nishigoriさんの発表に繋がったのでそれはそれで良かったと思います。

時間はかかりましたが最終的にはインストールも完了し、写経も最後まで進めることができました。

後半 LT

発表は計8名の方が行いました。

タイトル 発表者
4年ほどSilexを使ってきた経験の話 @Tetsujin
1000万ユーザーのソーシャルゲームのバックエンドにSymfonyを使った話 @modeelf
EventListener使いこなし術 @okapon_pon
そろそろComposerについてひとこと言っておくか @_nishigori
Symfony2 を drone.io でCI する @HideyukiTakei
パーフェクトRailsで個人的に良かったところ @tdakak
Symfonyでの実装パターン、のような話 @hidenorigoto
DBマイグレーション管理どうしてますか? @brtriver

私は3番目で「EventListener使いこなし術」というタイトルで発表してきました。

使いこなし術と題しつつ、比較的初心者向きのお話でした。

簡単にまとめると

  • コントローラー実行前の共通処理はEventListenrに書きましょう
  • EventListenerを使えばアイデア次第で色んなことを実現できます。
  • Symfony はHWに全て従う必要はないので、必要に応じてオレオレ作ってもいいじゃない

という内容でした。

資料にも書いていますが、サンプルコードは以下のGistにあります。

コントローラーにbefore()メソッド持たせるためのサンプル。皆さんは真似しないように(笑) https://gist.github.com/okapon/fd2dfdacf87e417f7957

オレオレ認証をEventListen使って作ってみた https://gist.github.com/okapon/88f5bd56a886c287a7d1

LTで気になった話

個人的には@hidenorigotoさんの「Symfonyでの実装パターン、のような話」が気になりました。

Criteriaパターンと言うのを初めて聞いたのですが、動的条件をCriteriaで表しておき、Specificationにインジェクションすることで「仕様を1箇所にまとめておくことができる」のがメリットだと理解しました。

ですがRepositoryが肥大化しても実際の開発でさほど問題を感じてないのが現状で、むしろCriteriaを導入するには以下の2つのデメリットがあるように思えました。

  • CriteriaをRepositoryとは別に書かなければならない実装コスト
  • DBの検索条件がRepository一箇所に固まってないことで、どんな条件で検索されているのか逆に分かりづらくなる(気がする)

それらを上回るメリットがありそうかというと直感的には理解できなかったです。

懇親会で聞いてみたかったのですが、チャンスを逃してしまいもったいない無いことをしてしまいました。

また今度聞いてみることにします。

懇親会

「懇親会からが本番」というSymfony勉強会の多分に漏れず長い懇親会となりました。

懇親会LTで@imunew さんが「恋と愛のちがい」を発表され大変盛り上がっていました。

『恋や愛の対象もオブジェクト』 『愛はDI、恋はサービスロケータ』

これで火がついた@hidenorigotoさんが 「そして概念メタファーのお話」へ発展させました。

恋は奪うもの、奪いあうものと言えば資源があり、恋愛は戦争メタファーであると。

Symfonyにかかれば、全てのお話はオブジェクトや概念、モデリングのお話に帰結されてしまいます(笑)

やっぱりSymfonyコミュニティーは面白いですね。

感想

Symfony勉強会は相変わらず濃い勉強会でした。 発表は話きれていない部分が多かったのでもう少しうまくなりたいのと、資料はもう少し作りこまないといけないなと思いました。 次回こそ事前準備がんばろう。。

最近は自分も含めて色々な人が発表なり参加されるようになってそれも楽しく今後が楽しみです。

次回はおそらくSymfony温泉!楽しみ!