SymfonyのFormTypeはフォームの定義をバックエンドとフロントエンドで共有できる非常に強力なツールですが、
FormTypeの一種で<select>などの選択式フォーム項目の選択肢をエンティティと自動でマッピングしてくれる「EntityType」を使う際には、
パフォーマンスの面で気をつけなければならない点がいくつかあります。
特に重要なのは、N+1問題の考慮です。大量のレコードを持つエンティティに対して無造作にEntityTypeを使ってしまうと、しばしばN+1問題が発生し、意図せず大量のクエリが発行されてしまいます。
また、<select>のユーザー体験を向上させるためにSelect2やselectize.jsなどのライブラリを導入してインクリメンタル検索などを実現することはよくあると思いますが、EntiyTypeによってエンティティのレコード数だけ<option>を持つような<select>が出力されてしまうと、Select2やselectize.jsの初期化処理に数秒オーダーの時間がかかってしまい逆にUXが悪化するといったこともよく起こります。
Symfonyユーザーの多くがEntityTypeが持つこれらの問題に長らく苦しめられてきましたが、実はそれも今は昔。
Symfony UX Autocompleteというライブラリの登場でこれらの問題は完全に解決してしまいました。
Symfony UXは、Symfonyアプリケーションにフロントエンドの処理を簡単に追加するためのライブラリ群で、その中でも私の一押しがSymfony UX Autocompleteです。
このトークでは、上述のEntityTypeの問題をSymfony UX Autocompleteによって完全に解決するまでの手順と実際のユーザー体験の変化を具体的にお伝えします。
話すこと:
・Symfony UX Autocompleteについて
・EntityTypeが使われているSymfonyアプリケーションへのSymfony UX Autocompleteの導入方法
・Symfony UX Autocomplete導入前後のユーザー体験の変化について
話さないこと:
・Symfonyの基本的な使い方
・Autocomplete以外のSymfony UXライブラリについて