Symfony勉強会 #6 に参加してきた

2012年7月1日

symfony-logo

6月30日、Symfony勉強会 #6 に参加しました。それぞれの発表者の方々のセッションのメモです。

目次

  1. 一歩先ゆくエンジニアから見たSymfony (@hidenorigoto)
  2. symfony1系の総まとめ (@brtriver)
  3. Symfonyのアーキテクチャ探索 (@fivestr)
  4. Silex ワークショップ (講師: @chisei)
  5. 効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門(@fivestr)
  6. Composerでパッケージ管理 (@ooharabucyou)
  7. Zombie.jsで始めるサーバーサイドブラウザテスト(@brtriver)
  8. オブジェクトの振舞を明確化するためのモックについて(@hidenorigoto)
  9. LTの補足
  10. 感想

一歩先ゆくエンジニアから見たSymfony (@hidenorigoto)

スライドは下記

なぜSymfonyがよいか?

  • 良いソフトウェアを開発するためには、先人の知見を学び利用・適用することが必要。
  • ドメインレイヤーを大切にするフレームワークが必要。Symfonyは、ドメインレイヤーがフレームワークから分離している。
  • Symfonyはドメインレイヤーを意識して開発され、上記要件を満たす。
  • このような視点にもとづいていれば、フレームワークの流行に振り回されることがない。
  • 芯の通った技術と知識を身につけることで、長く生き残れる

ドメインレイヤーとは?

  • ドメイン=問題領域
  • ドメインをとらえる=何がビジネスの中心なのかをとらえる
  • ドメイン駆動設計=ドメインを中心に設計する

symfony1系の総まとめ (@brtriver)

symfony1の今

  • バグが発見された場合のみ、修正&リリース
  • 新機能の開発はなし
  • 本家から、symfony1ではなくsymfony2を使うようアナウンスされている
  • 2012年11月以降、全くメンテナンスされなくなる

symfonyのベストプラクティスを解説したスライド

30 Symfony Best Practices

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チュートリアルを記事にまとめました。

Symfony勉強会 #6 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-logo
Symfony勉強会 #6 LTの補足 コントローラのテストを短くする試み

Symfony2勉強会 #6 でLTをしてきました。 まとまりのないLTになってしまい、思い出すのも恥ずかしいのですが、 ...

続きを見る

感想

午前中の公演、ワークショップ、午後の公演、気づけばあっという間でした。

公演の内容はレベルが高く、新しい知識がどんどん流れてきて、理解するのもメモを取るのも大変で、終わった後はクタクタでした。ここで得た知識は、きちんとふりかえりをして自分のものにしたいと思います。

初LTにも挑戦し、偉人の方々からフィードバックもいただくことができ、楽しい時間を過ごすことができました。

スタッフの皆様、参加された皆様、ありがとうございました。

-技術ブログ
-,