6月30日、Symfony勉強会 #6 に参加しました。それぞれの発表者の方々のセッションのメモです。
目次
- 一歩先ゆくエンジニアから見たSymfony (@hidenorigoto)
 - symfony1系の総まとめ (@brtriver)
 - Symfonyのアーキテクチャ探索 (@fivestr)
 - Silex ワークショップ (講師: @chisei)
 - 効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門(@fivestr)
 - Composerでパッケージ管理 (@ooharabucyou)
 - Zombie.jsで始めるサーバーサイドブラウザテスト(@brtriver)
 - オブジェクトの振舞を明確化するためのモックについて(@hidenorigoto)
 - LTの補足
 - 感想
 
一歩先ゆくエンジニアから見たSymfony (@hidenorigoto)
スライドは下記
なぜSymfonyがよいか?
- 良いソフトウェアを開発するためには、先人の知見を学び利用・適用することが必要。
 - ドメインレイヤーを大切にするフレームワークが必要。Symfonyは、ドメインレイヤーがフレームワークから分離している。
 - Symfonyはドメインレイヤーを意識して開発され、上記要件を満たす。
 - このような視点にもとづいていれば、フレームワークの流行に振り回されることがない。
 - 芯の通った技術と知識を身につけることで、長く生き残れる
 
ドメインレイヤーとは?
- ドメイン=問題領域
 - ドメインをとらえる=何がビジネスの中心なのかをとらえる
 - ドメイン駆動設計=ドメインを中心に設計する
 
symfony1系の総まとめ (@brtriver)
symfony1の今
- バグが発見された場合のみ、修正&リリース
 - 新機能の開発はなし
 - 本家から、symfony1ではなくsymfony2を使うようアナウンスされている
 - 2012年11月以降、全くメンテナンスされなくなる
 
symfonyのベストプラクティスを解説したスライド
Symfonyのアーキテクチャ探索 (@fivestr)
スライドは下記
Symfony1
Platform:単体でも利用可能なライブラリのこと。
Plugin:別のライブラリを簡単に組み込んで使用する仕組み。自作も可能。
Symfony2
symfony1の経験から1から書きなおされた。別物とよく言われるが、設計思想は一緒。
- Framework と Platform がより明確に分離
 - Pluginの仕組みがより汎用的に Bundle Component
 
Component
- 単体で利用可能なライブラリをパッケージ化したもの
 - EventDispatcher, Routing, など
 
Bundle
Pluginのような仕組み。
すべての機能がBundleとしてパッケージ化されるのでいつでも再利用可能になった。
- Symfonyのフレームワーク自体もBundle。FrameworkBundleがそれ。
 - アプリもBundle。何をするにもBundle。ライブラリもBundle。
 - DoctrineBundle, MonologBundle ...
 
DIコンテナ
依存関係の管理を引き受ける。
コンポーネント間の依存管理を行う。
symfony1で複雑化した依存関係の管理はDIコンテナに統一された。
ORM
symfony1とSymfony2でアーキテクチャが変更されている。
- symfony1 Active Record
 - Symfony2 Data Mapper
 
Silex ワークショップ (講師: @chisei)
ワークショップで学んだSilexチュートリアルを記事にまとめました。
効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門(@fivestr)
スライドは下記
@fivestrさんが本を書こうと思ったきっかけ、エンジニアとしての歩みや失敗談、書籍を執筆するにあたっての裏話なども聞くことができました。
- 複雑な問題について、複雑なコードで解決しようと思っていた。メンテナンスしづらいと言われたこともあった。
 - 失敗して学んだことは、MVC, オブジェクト指向、デザインパターン、リファクタリング、設計原則、ドメイン駆動設計
 - 学んだことはどれも新たに閃いたわけではなく、形式化されたものだった
 - 学んだ知識を共有したい、経験の浅い人でも学べるように、わかりやすく、万遍的に解説した本が書きたい
 
Composerでパッケージ管理 (@ooharabucyou)
スライドは下記
http://www.slideshare.net/ooharabucyou/composer-13500941
composerとは
ライブラリの依存管理を行うツール
依存管理とは、フレームワーク同士の要求バージョンの管理のこと。
常にリリースできるものを用意する必要がある。
何がよいのか?
- テストがしやすい。リリーサブルなため
 - 環境構築は定義ファイルを配布するだけで済む
 - ライブラリのバージョンアップの対応が容易
 - デプロイの自動化
 - ライブラリをバージョン管理ツールにコミットすることがなくなる
 
欠点
composer本体を更新したときに、動かなくなってしまうことがある。
安定版のリリースが望まれる。
Zombie.jsで始めるサーバーサイドブラウザテスト(@brtriver)
Zombie.jsの特徴
- すごく速い
 - Seleniumで30分かかっていたテストが10分くらいに短縮した例も
 - javascript ajax 関係なし
 - ファイルアップロードもできる
 - BDDしたいならvowsがおすすめ
 - behatからzombie.jsも呼べる(変なハマリ方するかも)
 
オブジェクトの振舞を明確化するためのモックについて(@hidenorigoto)
スライドは下記
https://speakerdeck.com/hidenorigoto/symfony6
モックとは
- テストの時に使う代理オブジェクト
 - テストコード側から動的に書き換えすることができる
 - PHPUnit_MockObjectはPHPUnitに同梱されている。Symfony2本体のテストもこちらを使用している
 - ぱっと見、assert がないので何をしているかわかりづらい
 - PhakeやMockeryを使うと可読性が高くなる
 - メソッドが呼ばれたかどうかをテストすることができる。そのメソッドの先で何をしているかは関心がない。
 - 通常、テストコードでモック化するのは、隣接オブジェクトのみ
 - 隣接していないオブジェクトのモックを作る必要がある場合、何か問題がある兆候
 
LTの補足
私のLTの補足です。
- 
																								
																					 - 
															
Symfony勉強会 #6 LTの補足 コントローラのテストを短くする試み
Symfony2勉強会 #6 でLTをしてきました。 まとまりのないLTになってしまい、思い出すのも恥ずかしいのですが、 ...
続きを見る
 
感想
午前中の公演、ワークショップ、午後の公演、気づけばあっという間でした。
公演の内容はレベルが高く、新しい知識がどんどん流れてきて、理解するのもメモを取るのも大変で、終わった後はクタクタでした。ここで得た知識は、きちんとふりかえりをして自分のものにしたいと思います。
初LTにも挑戦し、偉人の方々からフィードバックもいただくことができ、楽しい時間を過ごすことができました。
スタッフの皆様、参加された皆様、ありがとうございました。