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
2025年の医用画像AI/AI×medical_imaging_in_2025_generated_by_AI
tdys13
0
210
日本Rubyの会: これまでとこれから
snoozer05
PRO
6
250
MariaDB Connector/C のcaching_sha2_passwordプラグインの仕様について
boro1234
0
1.1k
MySQLとPostgreSQLのコレーション / Collation of MySQL and PostgreSQL
tmtms
1
1.4k
技術選定、下から見るか?横から見るか?
masakiokuda
0
170
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
3
210
Building Serverless AI Memory with Mastra × AWS
vvatanabe
1
800
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
440
AR Guitar: Expanding Guitar Performance from a Live House to Urban Space
ekito_station
0
270
普段使ってるClaude Skillsの紹介(by Notebooklm)
zerebom
8
2.6k
AWS re:Inventre:cap ~AmazonNova 2 Omniのワークショップを体験してきた~
nrinetcom
PRO
0
110
[Neurogica] 採用ポジション/ Recruitment Position
neurogica
1
140
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
0
190
Typedesign – Prime Four
hannesfritz
42
2.9k
Building AI with AI
inesmontani
PRO
1
590
Amusing Abliteration
ianozsvald
0
78
The SEO Collaboration Effect
kristinabergwall1
0
320
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Building Flexible Design Systems
yeseniaperezcruz
330
39k
GitHub's CSS Performance
jonrohan
1032
470k
It's Worth the Effort
3n
187
29k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Darren the Foodie - Storyboard
khoart
PRO
0
2k
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