Slide 1

Slide 1 text

4ZNGPOZ#FTU1SBDUJDFΛ ಡ΋͏ ͍ͭͰʹ຋༁ͨ͠࿩ !IBOBIJSP@B[F

Slide 2

Slide 2 text

ͳ·͑ɿՖҪɹ޺ߦ UXJUUFSɿ!IBOBIJSP@B[F ॴଐɿIJUPNFEJB 4ZNGPOZྺɿ̍೥ 99

Slide 3

Slide 3 text

http://cef65270.com/wp-content/uploads/2014/12/0581.png 初めまして。Best Practice

Slide 4

Slide 4 text

http://docs.symfony.gr.jp/symfony2/best_practices/

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

http://symfony.com/doc/current/best_practices/index.html

Slide 7

Slide 7 text

http://symdoc.kwalk.jp/

Slide 8

Slide 8 text

http://bit.ly/2ebuOOi

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

http://qiita.com/advent-calendar/2016/symfony

Slide 11

Slide 11 text

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ジェネレーターを使うのではなく、ハードコーディングすべし。

Slide 12

Slide 12 text

Best Practice 傾向と対策 ・お手元にBlogチュートリアルが動く環境をご用意ください。    サンプルコードがBlogチュートリアルに沿っている。  サンプルコードはBest Practiceを体現しているので、良いお手本になる。 http://qiita.com/hanahiro_aze/items/9bc8e81c0dde9dd677a2 http://symfony.com/doc/current/setup.html

Slide 13

Slide 13 text

Best Practice 傾向と対策 ・まずは「◯◯するべからず」より、「□□すべし」に注目する。  Symfony1.x,2.xでのアンチパターンや、  3rdパーティ製バンドルによって持ち込まれた悪い実装例が紹介されています。  「昔は〜だったから、〜がよくなかった。−することで解決出来るから−しよう。」  という話法が使われている。   ・Best Practiceを読む前におさえておきたい用語  DI/セマンティック/EventDispatcher/アノテーション/ParamConverter/  data transformer/認証・認可    本文ではwikipediaへのリンク/Symfonyのドキュメントへのリンクが貼られているが、  事前に読んでおいた方がBest Practiceの内容に集中出来る。

Slide 14

Slide 14 text

Best Practice 傾向と対策 ・時間がない人向け   http://hanahirodev.hatenablog.com/

Slide 15

Slide 15 text

Best Practice 傾向と対策 ・時間がない人向け  コントローラー/フォーム/テストを読むことをお勧めします。  WHY?:       コントローラーにはSymfonyの思想、フォームには誤用の例がのっており、       これをおさえずに開発し始めてしまうと、後々直すのが大変だから。       テストは始めに書かないと、一生書かない気がするから。

Slide 16

Slide 16 text

Best Practice 傾向と対策 ・そもそもBest Practice とは? - アンチパターン/バッドノウハウの修正 - Fabianのコンセプトを提示 - 開発スピード向上、複雑さの低減、品質の上昇に寄与 - 必ずしも従う必要はないし、Best Practiceに  合わせるためにリファクタリングする必要もない。

Slide 17

Slide 17 text

May The Best Practice Be With You