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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
はない
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
520
組み合わせテストを簡単にするgemを作った話
hanahiroaze
0
250
MySQLとデッドロックの話
hanahiroaze
1
1.4k
ここが変だよ。このテスト〜テストケース爆発と戦う〜
hanahiroaze
1
1.6k
E2E Test Tips
hanahiroaze
0
170
テストことはじめ
hanahiroaze
0
490
Symfony2のi18n対応
hanahiroaze
0
820
開発合宿に行ってきました
hanahiroaze
0
150
GitHubよちよち会#3
hanahiroaze
0
170
Other Decks in Technology
See All in Technology
予期せぬコストの急増を障害のように扱う――「コスト版ポストモーテム」の導入とその後の改善
muziyoshiz
0
620
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.8k
Amazon ElastiCacheのコスト最適化を考える/Elasticache Cost Optimization
quiver
0
360
AIと新時代を切り拓く。これからのSREとメルカリIBISの挑戦
0gm
0
510
Claude Codeベストプラクティスまとめ
minorun365
58
32k
Azure Durable Functions で作った NL2SQL Agent の精度向上に取り組んだ話/jat08
thara0402
0
110
今日から始めるAmazon Bedrock AgentCore
har1101
4
310
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
17k
KubeCon + CloudNativeCon NA ‘25 Recap, Extensibility: Gateway API / NRI
ladicle
0
170
Amazon Bedrock AgentCore EvaluationsでAIエージェントを評価してみよう!
yuu551
0
210
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
2
700
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
3.9k
Side Projects
sachag
455
43k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Making Projects Easy
brettharned
120
6.6k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
220
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
61
Bash Introduction
62gerente
615
210k
Designing Powerful Visuals for Engaging Learning
tmiket
0
210
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
52
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
The browser strikes back
jonoalderson
0
350
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