Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Symfony Best Practiceを読もう!(ついでに翻訳した話)
Search
はない
November 06, 2016
Technology
950
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Symfony Best Practiceを読もう!(ついでに翻訳した話)
Symfony Meetup #15 オープニングトークの資料
はない
November 06, 2016
More Decks by はない
See All by はない
2018年目標を達成できなかった私が 今年こそ達成するためにしていること
hanahiroaze
3
540
組み合わせテストを簡単にするgemを作った話
hanahiroaze
0
270
MySQLとデッドロックの話
hanahiroaze
1
1.4k
ここが変だよ。このテスト〜テストケース爆発と戦う〜
hanahiroaze
1
1.6k
E2E Test Tips
hanahiroaze
0
180
テストことはじめ
hanahiroaze
0
510
Symfony2のi18n対応
hanahiroaze
0
840
開発合宿に行ってきました
hanahiroaze
0
160
GitHubよちよち会#3
hanahiroaze
0
180
Other Decks in Technology
See All in Technology
テックカンファレンス三大ステークホルダーの文化人類学 ─ 違いを認め合う関係性作り
bash0c7
4
920
CloudWatchから始めるAWS監視
butadora
0
270
『モンスターストライク』 の運営に伴走する! データ民主化への 解析グループの3つのアプローチ
mixi_engineers
PRO
0
150
セキュリティ研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
28
22k
Azure Durable Functions で作った NL2SQL Agent の精度向上に取り組んだ話/aidevday2026
thara0402
0
110
文字起こし基盤の信頼性
abnoumaru
0
150
システム監視入門
grimoh
5
710
QAと開発の両側から進める AI活用 -QAプロセスAI支援ツールキットと Inner Loop / Outer Loopの取り組み-
legalontechnologies
PRO
2
310
AI時代におけるエンジニアの新たな役割──FDEとクオリアの探求/登壇資料(戸井田 裕貴)
hacobu
PRO
0
600
AI Native なプロダクト組織の立ち上げ方 : 生産性 100 倍への挑戦
mikesorae
0
1.7k
事業成長とAI活用を止めないデータ基盤アーキテクチャの設計思想
hiracky16
0
750
実践が先生だった— 新卒サーバーエンジニア1年目のリアル
mixi_engineers
PRO
0
180
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
BBQ
matthewcrist
89
10k
How STYLIGHT went responsive
nonsquared
100
6.2k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
430
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
740
Visualization
eitanlees
152
17k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Odyssey Design
rkendrick25
PRO
2
730
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
190
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
370
Git: the NoSQL Database
bkeepers
PRO
432
67k
Transcript
4ZNGPOZ#FTU1SBDUJDFΛ ಡ͏ ͍ͭͰʹ༁ͨ͠ !IBOBIJSP@B[F
ͳ·͑ɿՖҪɹߦ UXJUUFSɿ!IBOBIJSP@B[F ॴଐɿIJUPNFEJB 4ZNGPOZྺɿ̍ 99
http://cef65270.com/wp-content/uploads/2014/12/0581.png 初めまして。Best Practice
http://docs.symfony.gr.jp/symfony2/best_practices/
None
http://symfony.com/doc/current/best_practices/index.html
http://symdoc.kwalk.jp/
http://bit.ly/2ebuOOi
None
http://qiita.com/advent-calendar/2016/symfony
Best Practice 一覧 ・Symfonyを使ってプロジェクトを始めるなら、Symfonyインストーラを使いましょう。 ・アプリケーションロジックはAppBundle1箇所にまとめましょう。 ・インフラに関連する環境設定は、app/config/parameters.ymlに定義しましょう。 ・アプリケーションに関するパラメーターは全てapp/config/parameters.yml.distに定義しましょう。 ・アプリケーションの振る舞い関する設定はapp/config/config.ymlに定義しましょう。 ・変更されることが予想されいてない設定は定数として定義しましょう。 ・バンドルにセマンティックなDIを定義してはいけません。
・サービスの名前は必要な時に探し出せるように、一意性を保ちつつできるだけ短くしましょう。 ・独自のサービスを定義するにはYAMLを使いましょう。 ・サービスクラス名をパラメーターとして設定するのはやめましょう。 ・Doctrineエンティティーのマッピングにはアノテーションを使いましょう。 ・コントローラーはフレームワークバンドルを拡張して作りましょう。可能な限り、ルーティング、キャッシュ、セキュリティの設定はアノテーションで記述しましょう。 ・コントローラーが使うテンプレートを指定するのに@Templateアノテーションを使ってはいけません。 ・単純かつ有効な場合は、Doctrineエンティティに対する問い合わせを自動化するParamConverterを使いましょう。 ・テンプレートにはTwigを使いましょう ・app/Resources/view/ディレクトリ配下にテンプレートを格納しましょう。 ・AppBundle/Twig/ディレクトリ配下に拡張機能を格納して、app/config/services.ymlで設定しましょう。 ・PHPのクラスとしてフォームを定義しましょう。 ・data transformerなどカスタムフォームクラスを使っていないのであれば、AppBundle\Formネームスペースにフォームタイプクラスを配置しましょう。 ・フォームクラスや、コントローラーではなくテンプレートにボタンを追加しましょう。 ・翻訳ファイルにはXLIFF形式のファイルを使いましょう。 ・コンテンツの翻訳には文字列ではなく、キーを使いましょう。 ・正規に許可された2つの異なる認証システムとユーザが無い限り (たとえば、メインのサイトへのログインと API のためだけのトークンシステム)、 anonymous キーを有効にしたファイヤーウォールを1つだけ設けることを推奨します。 ・ユーザーパスワードの生成にはbcryptエンコーダーを使いましょう。 ・一般的なURLパターンによる保護にはaccess_controlを使う。 ・利用可能である場所では、@Securityアノテーションを使う。 ・複雑な状況にある場合は、security.authorization_checkerサービスで直接セキュリティをチェックする。 ・細かな制限のためにセキュリティVoterを定義する。 ・管理機能を経由したユーザーがあらゆるオブジェクトにアクセスするの制限するために、Symfony ACLを利用する。 ・web/ディレクトリ配下にアセットを格納しましょう。 ・Webアセットをコンパイルして、結合、最小化するのにGruntJSのようなフロントエンドツールに満足いかないのであれば、アセティックを使いましょう。 ・最低でも作ったページがきちんとロードされるかを確認するファンクショナルテストを書きましょう。 ・ファンクショナルテストで使うURLはURLジェネレーターを使うのではなく、ハードコーディングすべし。
Best Practice 傾向と対策 ・お手元にBlogチュートリアルが動く環境をご用意ください。 サンプルコードがBlogチュートリアルに沿っている。 サンプルコードはBest Practiceを体現しているので、良いお手本になる。 http://qiita.com/hanahiro_aze/items/9bc8e81c0dde9dd677a2 http://symfony.com/doc/current/setup.html
Best Practice 傾向と対策 ・まずは「◯◯するべからず」より、「□□すべし」に注目する。 Symfony1.x,2.xでのアンチパターンや、 3rdパーティ製バンドルによって持ち込まれた悪い実装例が紹介されています。 「昔は〜だったから、〜がよくなかった。−することで解決出来るから−しよう。」 という話法が使われている。 ・Best
Practiceを読む前におさえておきたい用語 DI/セマンティック/EventDispatcher/アノテーション/ParamConverter/ data transformer/認証・認可 本文ではwikipediaへのリンク/Symfonyのドキュメントへのリンクが貼られているが、 事前に読んでおいた方がBest Practiceの内容に集中出来る。
Best Practice 傾向と対策 ・時間がない人向け http://hanahirodev.hatenablog.com/
Best Practice 傾向と対策 ・時間がない人向け コントローラー/フォーム/テストを読むことをお勧めします。 WHY?: コントローラーにはSymfonyの思想、フォームには誤用の例がのっており、 これをおさえずに開発し始めてしまうと、後々直すのが大変だから。 テストは始めに書かないと、一生書かない気がするから。
Best Practice 傾向と対策 ・そもそもBest Practice とは? - アンチパターン/バッドノウハウの修正 - Fabianのコンセプトを提示
- 開発スピード向上、複雑さの低減、品質の上昇に寄与 - 必ずしも従う必要はないし、Best Practiceに 合わせるためにリファクタリングする必要もない。
May The Best Practice Be With You