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にも挑戦し、偉人の方々からフィードバックもいただくことができ、楽しい時間を過ごすことができました。
スタッフの皆様、参加された皆様、ありがとうございました。