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
AIBuildersDay_track_A_iidaxs
iidaxs
4
1.5k
Authlete で実装する MCP OAuth 認可サーバー #CIMD の実装を添えて
watahani
0
240
M&Aで拡大し続けるGENDAのデータ活用を促すためのDatabricks権限管理 / AEON TECH HUB #22
genda
0
290
戰略轉變:從建構 AI 代理人到發展可擴展的技能生態系統
appleboy
0
140
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
350
半年で、AIゼロ知識から AI中心開発組織の変革担当に至るまで
rfdnxbro
0
150
Introduce marp-ai-slide-generator
itarutomy
0
150
Entity Framework Core におけるIN句クエリ最適化について
htkym
0
130
AI との良い付き合い方を僕らは誰も知らない
asei
1
290
「もしもデータ基盤開発で『強くてニューゲーム』ができたなら今の僕はどんなデータ基盤を作っただろう」
aeonpeople
0
260
アプリにAIを正しく組み込むための アーキテクチャ── 国産LLMの現実と実践
kohju
1
250
普段使ってるClaude Skillsの紹介(by Notebooklm)
zerebom
8
2.5k
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
0
190
Bash Introduction
62gerente
615
210k
4 Signs Your Business is Dying
shpigford
187
22k
Automating Front-end Workflow
addyosmani
1371
200k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
71
New Earth Scene 8
popppiees
0
1.3k
What the history of the web can teach us about the future of AI
inesmontani
PRO
0
380
Docker and Python
trallard
47
3.7k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
2
68
Exploring anti-patterns in Rails
aemeredith
2
210
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
120
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