「クロコスにおけるSymfony2 のお話」というネタでブログを書きました。
タイトルの通りですが、クロコスでどのようにSymfony2が使われているのか書きました。
社外でのSymfonyの使われ方について、なかなか見たり聞いたりする機会は少ないと思います。
Symfony2にはいわゆるレールというものがなく、開発者に何かを強要するようなことはありません。 設計は開発者に委ねられます。
しかしその柔軟さゆえ「どのように開発するのが正解なのかわからない」という話を聞くことがあります。
Symfonyで開発するにあたり、正解というものはないと思います。 自分のプロジェクトにあった好きなスタイルで開発するのがよいでしょう。
クロコスでの開発スタイルはあくまで1つの事例として紹介したにすぎません。 こういうやり方や考え方もあるんだと参考になれば幸いです。
Symfony勉強会#10に参加しEventListenerについて発表してきました
先日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がまったく反応せずインストールが進まない。。
この状態で数分間固まる。処理が進んでいるのかも分からず。。
まさに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温泉!楽しみ!
PHPカンファレンス関西に参加してきました。
もう1月近く前になりますが、6/28日に行われたPHPカンファレンス関西 2014に参加してきました。 スタッフの皆様はお疲れ様でした。
前回ブログを書いたのが、2013-10-27 (http://okapon-pon.hatenablog.com/entries/2013/10/27) ということで、あまりにブログ離れし過ぎているのでせめて記録だけでもと思い、日記ということで書いておきます。
初のPHPカンファレンス関西参加
PHPカンファレンス関西は今回が初めての参加でした。
東京以外で行われている勉強会に参加すること自体、先日参加した「BEAR.Sunday meetup #3 in Osaka」に続き2回目でした。
感想
基調講演は、郡山さんの「全てを結ぶ力」でした。
講演者、@koriymさんのブログ記事 基調講演「全てを結ぶ力」にも一部公開されています。
基調講演は素晴らしい内容でした。
私のチープな表現では全てを表現しきれないですし、まとめることなんてできはしないのですが、
- WEBの始まり、PHPの始まり、全ては1人の人間(開発者)から始まった。(BearSundayやその他の多くの開発者も)
- PHPに未来はあるか? PHPは変化し続ける言語だから未来がある
- 歴史の中でみたWEB:図書館から始まり、印刷革命からの本、そしてWEB/電子書籍へ(メディアシフトのまっただ中にいるのではないか?)
- 私たちエンジニアの仕事は宇宙に星をつくるようなもので、WEBという歴史を作ることに参加しているのではないか(そう考えるとワクワクしませんか?)
この辺りのお話に心を揺さぶられました。
講演タイトル「全てを結ぶ力」ということで、一貫して「結びつく」というテーマでお話されており、聞いていワクワクし鳥肌が立ちました。
郡山さんだから話せる内容だし、魅力的だったのだと思います。
P.S.
ランチの時に郡山さんから基調講演裏話ということで、基調講演にかけられた想い試行錯誤などお話を聞けたのでは幸運でした。
そういえば朝もたまたま会場近くのスタバでご一緒しました。ベア吉が描かれたTシャツを見せて「これ分かります?」と嬉しそうに質問されたのが印象的でした。(その時は隣の席で近すぎた為わからず…講演の時にはバッチリベア吉だと分かりました。)
Symfony2.3 Standard Edition と 2.2 の差分
久々の更新です。
小ネタ程度に投稿しておきます。
Symfony2.3がリリースされてからもうだいぶ日もたっているのですが、2.3と2.2を比べてみました。
比べたと言ってもチェンジログを追ったわけでも変更点を説明するわけでもなく、vendorディレクトリ以下を除くStandart Editionのdiffををとっただけです。
たまたま、前回のSymfony勉強会(http://okapon-pon.hatenablog.com/entry/symfony-study8)で2.2でアプリを作ったので、それに 2.3のStandard Edition を放り込んで diffを見てみようと思っただけです。
では早速そののdiffについて
https://github.com/okapon/symfony-workshop/compare/master...update2.3
ぱっと見でよみとれるのは、JMSSecurityExtraBundle.git がスタンダードエディションから外れたので、それ関連のDemoコードが変わったり、debugコンポーネント、intlコンポーネントが使われるようになってるぐらいですかね。
configファイルの違いは多少は参考になるかもです。
以上です。
Symfony 勉強会 #8 に参加&開催してきました
先日5/25日に、Symfony 勉強会 #8 に参加、またワークショップの講師としてお手伝いしてきました。
会場はいつもお世話になっている 株式会社 VOYAGE GROUP さんでした。@brtriver さん会場の手配ありがとうございました。
前半
まず、前半には2つのセッション「Symfonyの基礎」と「Symfonyの最新情報」で、Symfonyというフレームワークがどういうものなのかというお話を、@hidenorigotoさんと@brtriver さんにお話いただきました。
「これだけは押さえておこう!Symfonyの基礎」
@hidenorigoto さん
http://phpmentors.jp/post/51433385026/8-symfony
まとめ→ Symfonyは良い線をいっている
「Symfony最新動向」
@brtriver さん
スライド等はないですがブログはこちら
http://d.hatena.ne.jp/brtRiver/20130529/1369842211
前半の話から
Symfony界の大御所お二人の安定感ある非常に分かりやすいお話でした。
基礎に関しては@hidenorigoto さんのスライドを見て頂くとして、お二人のお話で共通して話題となっていたのは、安心してつかえるフレームワークと言う点ですね。
- フレームワーク自体がしっかりテストされていること。
- 「リリーススケジュールが示されている」こと
これら2点はバージョンアップを重ねていくオープンソースのフレームワークを使う側としては、これらがきちんとサポートされているのは非常に安心できるのではないでしょうか。
【参考】
Symfony2本体コードのテストページ(Travis CI)
https://travis-ci.org/symfony/symfony
※テストが落ちていることもありますが、それは機能している証拠です
【参考】
Symfonyのリリーススケジュール
http://symfony.com/doc/current/contributing/community/releases.html#schedule
後半ワークショップ
こちらは私の担当でした。 当日ワークショップで内容については、私のgithubのサンプルリポジトリのwikiにてご確認いただけます。
ブログチュートリアル
https://github.com/okapon/symfony-workshop/wiki
また実際に動くコードをダウンロードしていただくことも可能です。Gitでtagを打っているので、wikiの各章とtagのpart1~8の対応を見ながらソースの変更を追いかけることもできます。
タグごとのアーカイブ
https://github.com/okapon/symfony-workshop/tags
完成形をまるっとDLしたい方は中央の、ZIPよりアーカイブをダウンロード下さい。
ブログチュートリアルのリポジトリ
https://github.com/okapon/symfony-workshop
このチュートリアルは初めてSymfonyに触れる方を対象にしているため、例えば「本来SymfonyのFormの組立ならこう書く」みたいな話であったり、本来WEBアプリケーションとして考慮すべきことは割愛しています。
最後の15分ほど準備不足で駆け足で進めましたが、ほとんどの方がCRUDのあたりまで作りきることができたようです。
ワークショプの合間合間に教えて頂いた@brtriver さんの tipsが本当に素敵でした。
- コマンドは重複がなければ省略形でも実行可 (app/console router:debug なら app/console r:de)
- プロファイラーは過去のものも見れる
私も知らなかったので勉強になりました。
LT
- ○○を支える技術 - Symfony導入事例 - by @_nishigori
- 「Profiler が無いと開発できないカラダになってしまいました」+「DIを用いてクラスを差し替えられるお話*1」 by @brtriver
ProfilerについてはMySQLのEXPLAINが見れることの実演など
【参考】
BEAR.Ace: Ace online editor utility for PHP
https://github.com/koriym/BEAR.Ace
app_dev.phpに1行追加するだけで、syntaxエラーが発生した場合に、WEB上でエディタを立ち上げて編集できてしまうのはすごかったですね
謝辞や感想
初めてのワークショップの講師でしたが、@hidenorigotoさん、@brtriverさん、@_nishigoriさんにサポート頂きなんとかやり切ることができました。
また、Symfonyに興味を持って集まってくださった皆様ありがとうございました。
最後にDIを用いてサービスをつくる部分に関しては、本当に口頭のみの説明となってしまったうえ、私自身の力不足でDIの良さ、がコントローラー側に漏れ出さないようServiceを作ることなど十分に伝えることができなかったので、@hidenorigoto さんにサポート頂きました。ありがとうござます。
感覚的になんとなくDIやドメイン駆動設計の良さを感じているだけでは、いざ自分の口で表現しようとした時に十分伝えきることができないのだということを改めて感じました。
ブログでの情報発信や勉強会での発表を通して、磨いていきたいなと思いました。
次回はLTにも挑戦したいですね。
せっかくですので宣伝というか宣言しておきます。
こちらの日本Symfonyユーザー会のblogチュートリアルが古くなってしまっているので、今回のワークショップで作成した内容をベースに書き換えていきたいなと思います。
最後に
Symfonyを使っていて分からないことがありましたら、Symfonyユーザー会のメーリングリストまでお気軽にご質問下さい。
https://groups.google.com/forum/?fromgroups#!forum/symfony-users-ja
P.S. しんふぉにゃんかわいい
(公開後追記)
当日中や翌日にさっそくブログを書いてくださった方々もいらっしゃいます。
http://shiro-goma.hatenablog.com/entry/2013/05/26/005456
http://blog.livedoor.jp/ryo511-web/archives/27470234.html
http://tdak.hateblo.jp/entry/20130527/1369581393
http://frog377.hatenablog.com/entry/2013/05/26/211227
拙い講師でしたがトータルで見て、比較的満足度の高い勉強会となったようで良かったです。こういうのを読むと開催して良かったなと本当に思います。
私自身もいい刺激をもらうことができ、非常にモチベーションが上がりました。
皆様、ありがとうございました。