概要

Next.js、Elastic Search UI、Fuse.jsを組み合わせた検索アプリケーションの技術構成と実装について説明します。

作成したサイトは以下です。

https://nsf-psi.vercel.app/ja/

GitHubリポジトリは以下です。

https://github.com/nakamura196/nsf

サンプルデータとして、「東京帝國大學本部構内及農學部建物鳥瞰圖(東京大学農学生命科学研究科・農学部)」を使用します。

https://da.dl.itc.u-tokyo.ac.jp/portal/assets/187cc82d-11e6-9912-9dd4-b4cca9b10970

以下はAIが作成しました。

アプリケーション概要

このアプリケーションは、東京大学の建物画像データを対象とした検索システムです。IIIF(International Image Interoperability Framework)プロトコルに対応した建物画像を検索し、地理情報(緯度・経度)やメタデータを表示します。

主な特徴

多言語対応

next-intlによる日本語・英語の多言語対応機能を実装しています。

検索機能

  • 簡易検索 : キーワードによる直感的な検索
  • 詳細検索 : 複数条件を組み合わせた精密な検索(AND/OR条件)
  • ファセット検索 : subject(学部)などカテゴリー別の絞り込み機能
  • ソート機能 : スコア、タイトル、属性値での並び替え
  • 曖昧検索 : Fuse.jsによる入力ミスに寛容な検索(閾値0.3)

UI/UX

  • Tailwind CSSによる洗練されたデザイン
  • ダークモード対応
  • レスポンシブデザインでモバイルフレンドリー
  • React IconsによるアイコンUI

カスタム検索コネクタ

Elastic Search UIとFuse.jsを組み合わせたカスタムコネクタを実装し、フロントエンドのみで全文検索機能を実現しています。

地理情報対応

各建物データには緯度・経度情報が含まれています。

技術スタック

フロントエンド

  • Next.js 15 (App Router)
  • React 19
  • TypeScript
  • Tailwind CSS 4.0

検索システム

  • Elastic Search UI(検索インターフェース)
  • Fuse.js(全文検索エンジン)
  • カスタムAPIConnector(独自実装)

国際化

  • next-intl

その他

  • next-themes (テーマ切り替え)
  • React Icons

アーキテクチャの特長

静的サイト生成(SSG)対応

Next.jsのSSG機能を活用し、高速なページ読み込みとSEO最適化を実現しています。

コンポーネント指向設計

再利用可能なコンポーネントによる保守性の高い設計となっています:

  • レイアウトコンポーネント(Header、Footer、Breadcrumb)
  • 検索機能コンポーネント(SearchBox、Facet、Paging)
  • ページ固有コンポーネント(Hero、Results)

データ駆動型検索

JSON形式の構造化データ(title、subject、地理情報、IIIF画像URL等)を活用し、効率的な検索とフィルタリングを実現しています。

パフォーマンス最適化

  • CSVデータの事前JSON変換による高速読み込み
  • Fuseインデックスの活用による検索性能向上
  • ページネーション・ソート機能の最適化
  • 完全一致(in:)と部分一致フィルターの使い分け

技術的な特筆点

カスタムAPIConnectorの実装

Elastic Search UIのAPIConnectorインターフェースを実装し、Fuse.jsとの統合を行っています。

IIIFプロトコル対応

国際標準のIIIF(International Image Interoperability Framework)に準拠した画像配信を実装しています。

適用分野

このアーキテクチャは以下のような用途で利用できます:

  • 学術機関のデジタルアーカイブ
  • 美術館・博物館のコレクション検索
  • 不動産物件検索システム
  • 商品カタログ検索
  • 地理情報システム(GIS)

まとめ

このアプリケーションは、Next.js、Elastic Search UI、Fuse.jsを組み合わせることで、サーバーサイド処理を必要としない検索システムを実現しています。大量のメタデータと画像を扱うデジタルアーカイブシステムの構築における設計パターンの一例です。