myamioブログ

Astroブログの検索機能について(Pagefind)

機能の概要

Astroはブログ全体の記事を対象とした全文検索機能が実装可能です。静的サイト検索ライブラリ「Pagefind」を採用することで、サーバーサイド処理を必要とせず、高速かつ軽量な検索体験を提供します。記事数の増加に伴い過去の記事を探しやすくなるよう、インデックスの自動生成とユーザーへの迅速な結果表示を目的として設計されています。

この検索機能でできること

検索機能は、以下のようなことができます。

  • 全文検索: 記事のタイトル、本文、タグをすべて検索対象としています。
  • 言語別索引: 日本語版と英語版でインデックスを分離管理しており、言語ごとに適切な結果を表示します。
  • リアルタイム検索: キーワードを入力するたびに、結果がリアルタイムで表示されます。
  • 自動インデックス生成: サイトのビルド時に自動的に検索インデックスが生成されるため、手動での更新作業は不要です。

仕組みと動作環境

検索機能は、静的ファイルとして生成されたデータに依存して動作します。

  • 構成: 検索パッケージを依存関係に追加し、サイトビルド実行後に自動で検索インデックスを生成する設定となっています。生成されたデータは出力ディレクトリ内に格納されます。
  • ページ配置: 検索UIを表示するためのページコンポーネントを配置し、必要な属性を設定して利用しています。
  • 動作環境: 検索機能はビルド出力された静的ファイルに依存するため、開発環境では動作せず、本番環境でのみ利用可能です。

検索の使い方

ユーザーは以下の方法で検索機能を利用できます。

  • アクセス方法: ページヘッダーの「検索」リンク、または /search(日本語)、/en/search(英語)のURLに直接アクセスします。
  • 検索操作: 検索ボックスにキーワードを入力すると、リアルタイムで結果が表示されます。結果をクリックすると詳細ページへ遷移します。
  • 検索のコツ:
    • 複数キーワード: スペース区切りで入力すると、複数のキーワードを含む記事に絞り込まれます。
    • タグ検索: タグ名を入力することで、該当タグが付いた記事を検索できます。
    • 部分一致: 含まれるテキストに対して部分一致検索が行われます。

カスタマイズと注意点

本機能の仕様として、以下のカスタマイズおよび制限事項があります。

  • 検索対象の除外: 特定のHTML要素に属性を追加することで、検索インデックスから除外できます。
  • デザイン調整: CSS変数を定義することで、サイトのテーマに合わせた色変更が可能です。
  • 運用上の注意点: インデックスはビルド時に生成されるため、新規記事公開後は必ずビルドを再実行する必要があります。また、開発サーバーでは検索機能が無効になる仕様です。

よくある質問

一般的な問題と対策は以下の通りです。

  • 検索結果が表示されない: ビルドが実行されているか、インデックスディレクトリが存在するか確認します。ブラウザコンソールのエラー確認も有効です。
  • 検索が遅い: 記事数が多い場合、初回読み込みで時間がかかることがあります。ブラウザキャッシュを有効化することで改善します。
  • 新しい記事が反映されない: インデックスはビルド時点のスナップショットであるため、必ずビルドを再実行してください。
  • 言語別検索の不具合: 記事の言語設定およびコレクション配置が正しいか確認します。キャッシュクリアも試行してください。

機能追加について

以下のような機能追加が可能です。

  • 検索結果の重み付けカスタマイズ
  • 検索履歴機能の追加
  • 検索キーボードショートカット(Cmd+Kなど)の実装

関連記事