implementing-search-filter について
検索・フィルター機能を構築するためのフルスタック向けスキルです。React/TypeScript の UI パターンと、Python のクエリ、API 設計、性能最適化を扱います。
主な機能
- 01デバウンス検索とオートコンプリート
- 02アクセシブルなフィルター UI
- 03SQLAlchemy と Django のクエリパターン
- 04Elasticsearch の検索とファセット
- 05検索 API とページネーション
活用シーン
- 01カテゴリや価格で絞り込む商品検索の構築
- 02キーボード操作対応のオートコンプリート追加
- 03動的件数付きファセット検索の作成
- 04バックエンド検索とクエリ性能の最適化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ ancoleman/ ai-design-components --skill implementing-search-filterインストール後、Claude Code で/implementing-search-filterを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
outputs.yamlassets/filter-config-schema.jsonsearch-api-spec.jsonexamples/autocomplete-search.tsxdjango_filter_backend.pyfastapi_search.pyproduct-search.tsxsqlalchemy_search.pyreferences/api-design.mdautocomplete-patterns.mddatabase-querying.mdelasticsearch-integration.mdfilter-ui-patterns.mdlibrary-comparison.mdperformance-optimization.mdquery-parameter-management.mdsearch-input-patterns.mdscripts/debounce_calculator.jsgenerate_filter_query.pyvalidate_search_params.py詳細
検索とフィルタリングの実装
包括的なフロントエンドコンポーネントとバックエンドのクエリ最適化により、検索・フィルタリングのインターフェースを実装します。
目的
このスキルでは、フルスタックにわたって検索・フィルタリング機能を実装するための、本番環境で利用できるパターンを紹介します。フロントエンド向けのReact/TypeScriptコンポーネント(検索入力、フィルターUI、自動補完)と、バックエンド向けのPythonパターン(SQLAlchemyクエリ、Elasticsearch連携、API設計)を扱います。パフォーマンスの最適化、アクセシビリティ、ユーザーエクスペリエンスを重視します。
使用する場面
- カテゴリーや価格フィルターを備えた商品検索を構築する
- 自動補完/タイプアヘッド検索を実装する
- 動的な件数表示を備えたファセット検索インターフェースを作成する
- データテーブルやリストに検索機能を追加する
- 上級ユーザー向けの高度なブール検索を構築する
- SQLAlchemyまたはDjango ORMでバックエンド検索を実装する
- 全文検索にElasticsearchを連携する
- デバウンスやキャッシュによって検索パフォーマンスを最適化する
- アクセシブルな検索エクスペリエンスを作成する
主なコンポーネント
フロントエンドの検索パターン
デバウンス付き検索入力
- パフォーマンス向上のため、300msのデバウンスを実装する
- 検索中に読み込み状態を表示する
- リセット用のクリアボタン(X)を設ける
- キーボードショートカット(Cmd/Ctrl+K)を用意する
references/search-input-patterns.mdを参照してください
自動補完/タイプアヘッド
- キーボード操作に対応した候補のドロップダウンを表示する
- 候補内で一致したテキストを強調表示する
- 最近の検索と人気の項目を表示する
- デバウンスによってリクエストの集中を防ぐ
references/autocomplete-patterns.mdを参照してください
フィルターUIコンポーネント
- 複数選択にはチェックボックスフィルターを使用する
- 数値には範囲スライダーを使用する
- 単一選択にはドロップダウンフィルターを使用する
- 選択中の項目を示すフィルターチップを表示する
references/filter-ui-patterns.mdを参照してください
バックエンドのクエリパターン
データベースクエリの構築
- SQLAlchemyで動的にクエリを構築する
- Django ORMのフィルターチェーンを使用する
- 検索対象の列にインデックスを最適化して設定する
- PostgreSQLで全文検索を行う
references/database-querying.mdを参照してください
Elasticsearch連携
- ドキュメントのインデックス戦略
- 複雑な検索に対応するQuery DSL
- ファセット集計
- 関連度スコアリングとブースティング
references/elasticsearch-integration.mdを参照してください
API設計
- RESTfulな検索エンドポイント
- クエリパラメーターの検証
- カーソルまたはオフセットによるページネーション
- レスポンスのキャッシュ戦略
references/api-design.mdを参照してください
実装ワークフロー
クライアントサイド検索(1000件未満)
- データをメモリに読み込む
- JavaScriptでフィルター関数を実装する
- テキスト入力にデバウンス付き検索を適用する
- 結果を即座に更新する
- Reactでフィルターの状態を維持する
サーバーサイド検索(1000件超)
- 検索APIエンドポイントを設計する
- クエリパラメーターを検証してサニタイズする
- データベースクエリを動的に構築する
- ページネーションを適用する
- メタデータとともに結果を返す
- 頻繁に実行されるクエリをキャッシュする
ハイブリッド方式
- すぐに結果を反映するため、クライアントサイドのフィルタリングを使用する
- バックグラウンドでサーバーの結果を取得する
- 結果を統合して重複を除去する
- UIを段階的に更新する
- 最近の検索をローカルにキャッシュする
パフォーマンスの最適化
フロントエンドの最適化
デバウンスの実装
- lodashの
debounceまたは独自の実装を使用する - 新しい入力があったら保留中のリクエストをキャンセルする
- データ取得中にスケルトンローダーを表示する
- スクリプト:
scripts/debounce_calculator.js
クエリパラメーターの管理
- 共有可能な検索にするため、フィルターをURLと同期する
- URLの状態管理にReact RouterまたはNext.jsを使用する
- 複雑なクエリを圧縮する
references/query-parameter-management.mdを参照してください
バックエンドの最適化
クエリの最適化
- 適切なデータベースインデックスを作成する
- クエリアナライザーを使用してボトルネックを特定する
- クエリ結果のキャッシュを実装する
- スクリプト:
scripts/generate_filter_query.py
検証とセキュリティ
- すべての検索入力をサニタイズする
- SQLインジェクションを防止する
- 検索エンドポイントにレート制限を設定する
- スクリプト:
scripts/validate_search_params.py
アクセシビリティ要件
ARIA パターン
- 検索領域には
role="search"を使用します - 検索結果の更新には
aria-liveを実装します - フィルターには明確なラベルを付けます
- キーボードのみでのナビゲーションに対応します
キーボード操作
- すべての操作可能な要素を Tab キーで移動します
- オートコンプリートの移動には矢印キーを使用します
- Escape キーでドロップダウンを閉じます
- Enter キーで選択または送信します
技術スタック
フロントエンドライブラリ
主なライブラリ:Downshift(オートコンプリート)
- アクセシブルなオートコンプリートのプリミティブ
- 柔軟に使えるヘッドレス/スタイルなしの設計
- WAI-ARIA に準拠
- インストール:
npm install downshift
代替:React Select
- 多機能な選択/フィルターコンポーネント
- 非同期検索を標準搭載
- 複数選択に対応
バックエンド技術
Python/SQLAlchemy
- 動的なクエリの構築
- リレーションシップ読み込みの最適化
- クエリ結果のページネーション
Python/Django
- Django Filter バックエンド
- Django REST Framework のフィルター
- PostgreSQL による全文検索
Elasticsearch(Python)
- elasticsearch-py クライアント
- クエリ構築用の elasticsearch-dsl
同梱リソース
リファレンス
references/search-input-patterns.md- 入力の実装references/autocomplete-patterns.md- タイプアヘッドのパターンreferences/filter-ui-patterns.md- フィルターコンポーネントreferences/database-querying.md- SQL クエリのパターンreferences/elasticsearch-integration.md- Elasticsearch のセットアップreferences/api-design.md- API エンドポイントのパターンreferences/performance-optimization.md- パフォーマンスの最適化に関するヒントreferences/library-comparison.md- ライブラリの評価
スクリプト
scripts/generate_filter_query.py- SQL/ES クエリを構築scripts/validate_search_params.py- 入力を検証scripts/debounce_calculator.js- デバウンスのタイミングを計算
例
examples/product-search.tsx- E コマースの検索examples/autocomplete-search.tsx- オートコンプリートの実装examples/sqlalchemy_search.py- SQLAlchemy のパターンexamples/fastapi_search.py- FastAPI の検索エンドポイントexamples/django_filter_backend.py- Django のフィルター
アセット
assets/filter-config-schema.json- フィルター設定assets/search-api-spec.json- OpenAPI 仕様
コメント
Markdown 対応