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
2
920
Symfony Best Practiceを読もう!(ついでに翻訳した話)
Symfony Meetup #15 オープニングトークの資料
はない
November 06, 2016
Tweet
Share
More Decks by はない
See All by はない
2018年目標を達成できなかった私が 今年こそ達成するためにしていること
hanahiroaze
3
510
組み合わせテストを簡単にするgemを作った話
hanahiroaze
0
240
MySQLとデッドロックの話
hanahiroaze
1
1.4k
ここが変だよ。このテスト〜テストケース爆発と戦う〜
hanahiroaze
1
1.6k
E2E Test Tips
hanahiroaze
0
160
テストことはじめ
hanahiroaze
0
480
Symfony2のi18n対応
hanahiroaze
0
810
開発合宿に行ってきました
hanahiroaze
0
150
GitHubよちよち会#3
hanahiroaze
0
170
Other Decks in Technology
See All in Technology
Cloud WAN MCP Serverから考える新しいネットワーク運用 / 20251228 Masaki Okuda
shift_evolve
PRO
0
110
オープンソースKeycloakのMCP認可サーバの仕様の対応状況 / 20251219 OpenID BizDay #18 LT Keycloak
oidfj
0
200
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
2
420
M&Aで拡大し続けるGENDAのデータ活用を促すためのDatabricks権限管理 / AEON TECH HUB #22
genda
0
280
2025年のデザインシステムとAI 活用を振り返る
leveragestech
0
350
AgentCore BrowserとClaude Codeスキルを活用した 『初手AI』を実現する業務自動化AIエージェント基盤
ruzia
7
1.7k
2025年の医用画像AI/AI×medical_imaging_in_2025_generated_by_AI
tdys13
0
130
ESXi のAIOps だ!2025冬
unnowataru
0
390
AWS re:Invent 2025~初参加の成果と学び~
kubomasataka
1
200
Microsoft Agent Frameworkの可観測性
tomokusaba
1
120
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
0
470
AIエージェントを5分で一気におさらい!AIエージェント「構築」元年に備えよう
yakumo
1
110
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
93
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
89
Facilitating Awesome Meetings
lara
57
6.7k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
280
[SF Ruby Conf 2025] Rails X
palkan
0
640
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
20
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
230
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
WCS-LA-2024
lcolladotor
0
390
Crafting Experiences
bethany
0
22
The SEO Collaboration Effect
kristinabergwall1
0
310
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