2014/04/19 Symfony 勉強会 #9
自己紹介
業界での立ち位置(?)
監修/監訳した本
プログラマとして
- Symfony 歴は 2 年くらい(フルタイムではない)
- Symfony1 時代はほぼ知らない
- Java, Ruby, JavaScript, elisp, PHP
- github 上では JavaScript プログラマ?
- 代表作は power-assert
Why Symfony?
- なぜ Symfony を選んだか
- 「コードがしっかりしている」
- メンテ方針がしっかりしている(長期サポート, 後方互換性)
- DIベースの疎結合設計で自分でアーキテクチャを進化させやすい
- 中長期的な生産性が高まることを期待できる
Agenda
- Background of Symfony
- What is Symfony?
- How to learn Symfony?
Symfony の背景
Symfony のバックグラウンド
Symfony には三つのバックグラウンドがある
- Web
- PHP
- OOP
Web ── URL, HTTP, HTML(JSON)
- "I don't like MVC because that's not how the web works. Symfony2 is an HTTP framework; it is a Request/Response framework."
- Symfony2 と HTTP の基礎
- 『Webを支える技術』
PHP
- いわゆる「モダン PHP」が必要
- PHP: The Right Way
- Composer
- 『パーフェクトPHP』
OOP: Object Oriented Programming
- SOLID 原則: アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技
- アーキテクチャと語彙: エンタープライズ アプリケーションアーキテクチャパターン
- TDD と設計: 実践テスト駆動開発 テストに導かれてオブジェクト指向ソフトウェアを育てる
SOLID 原則
-
Single responsibility principle
単一責任の原則(SRP) -
Open/closed principle
オープン・クローズドの原則(OCP) -
Liskov substitution principle
リスコフの置換原則(LSP) -
Interface segregation principle
インターフェイス分離の原則(ISP) -
Dependency inversion principle
依存関係逆転の原則(DIP)
Agenda
- Background of Symfony
- What is Symfony?
- How to learn Symfony?
Symfony は何者なのか
Java プログラマから見た Symfony
- ペロッ! これは……SSH!
- Spring (or Seasar2)
- SpringMVC (or Struts)
- Hibernate
- DI がアーキテクチャの基盤
- とてもよく似ている
- 勝手知ったる世界
- もちろんデメリットも知っている
- n周目の知見を生かせるか
Rails プログラマから見た Symfony
- (Symfony1 から見た Symfony2 でもある)
- 構造も思想も全く異なる(Symfony1は似ていた)
- Rails に DI は無い
- Rails は密結合の強力さ
- Symfony は疎結合の柔軟さ
- それでも似ているところ
- フルスタックフレームワーク
- RESTful, migration, asset pipeline
Symfony is NOT opinionated
- Symfony にはレールが無い
- (少なくともレールが無いように見える)
- 押しが弱い
- 短期的な生産性も低い
- そのかわりなんでも乗せられる
- なんでも共通化できる
- DDD を突き詰めるも良し
- シンプルなパラダイムに寄せるも良し
二つの顔
- フルスタックフレームワークとしての顔
- コンポーネントの集合としての顔
- Symfony Standard Edition と Symfony Components
- 個々に完結した構成部品と、それをつなぎ合わせたフルスタックフレームワーク
- さらにそれを取り囲むコミュニティ
- "Symfony is a PHP Framework, a Philosophy, and a Community - all working together in harmony."
≠ MVC
- "I don't like MVC because that's not how the web works. Symfony2 is an HTTP framework; it is a Request/Response framework."
- Symfony は MVC フレームワークではなく HTTP フレームワークであり、つまりは Request/Response フレームワークである
本当にザックリ理解すると
もう少し倍率を上げると
全体像を掴むためのオススメ資料
Agenda
- Background of Symfony
- What is Symfony?
- How to learn Symfony?
Symfony の学びかた
English!
- 情報量に決定的な差がある
- ドキュメント量
- 書籍やブログの数
- ユーザ数にも差がある
- Newest 'symfony2' Questions - Stack Overflow
- 少なからず英語に立ち向かうしかない
- でも公式ドキュメント日本語訳は強い味方
- そして翻訳に参加しましょう!
Symfony の公式ドキュメント
- Symfony の公式ドキュメント
- 公式ドキュメント日本語訳
- ドキュメントとしてはかなり充実している部類
- 実は調べるとだいたいのことが書いてある
- 本家は PDF にして読めるのでタブレットで読む
- 俯瞰の視点は Symfony 関係のカンファレンス資料で補う
Symfony 情報収集
- A week of symfony
- Twitter の #symfony ストリーム
- Twitter の #symfony_ja ストリーム
- はてブの symfony タグ
- PHPメンターズ -> "practical.symfony"タグ
- 本家コミットログ(大量に流れてくる)
Joind.in 便利
- 複雑なものを複雑なまま捉えない
- 講演にはシンプルな視点へのヒントがある
- Joind.in はカンファレンスのまとめサイト
- Event: Symfony Live Portland 2013 - Joind.in
- Event: Symfony Live London - Joind.in
- Event: Symfony Live Berlin 2013 - Joind.in
- Event: SymfonyLive London 2014 - Joind.in
2大難関 Component
Form Component を知るなら
Security Component を知るなら
コードを読む
- PhpStorm, IntelliJ IDEA 超強力
- (個人的にはこれらが無いと PHP のコードリーディングができない)
- Type hinting と indexing の使用感は、 Java で Eclipse を使う感じに近づいている
- Symfony のコードはドキュメントがキッチリ書かれていてテストコードもあるので、適切な道具があれば読みやすい
- デバッグパネルを見る
- 自分でテストを書いて動かしてみる
シンプルな物から積み上げて学ぶ
- Pimple
- Pimpleでシンプルに正しくDIを理解する
- Silex
- フラットなPHPからSilexへ - ぷぎがぽぎ
- Symfony2 vs フラットなPHP
- Symfony Components を増やしながら理解を深める
- Web フレームワークをつくろう - Symfony コンポーネントの上に
- The Traveling Symfony Circus // Speaker Deck
- オレオレを育てると Symfony SE に近づく現象
ありがとうございました
今日話したこと
- Background of Symfony
- What is Symfony?
- How to learn Symfony?