【初心者向け】Laravelで簡単検索機能を実装|あいまい・完全一致・複数条件に対応

こんにちは、フロントエンドエンジニアのてりーです。
僕の詳しいプロフィールはこちら

Laravelを使った検索機能は、多くのWebアプリケーションで重要な役割を果たします。

  • ECサイトで特定の商品を探す。
  • ブログサイトで記事を絞り込む。
  • 社内システムで特定のデータを検索する。

しかし、Laravelを使った検索機能にはいくつかのパターンや最適な設計があります。
この記事では、Laravelで効率的に検索機能を実装する方法を初心者でもわかりやすく解説します。

・Laravelでの検索機能の基本実装方法
・ 検索パターン(あいまい検索・完全一致検索・複数条件検索)
・ 検索機能をユーザビリティよく改善するポイント

📚 Laravelの基礎から学びたい方へ
👉Laravel学習に役立つおすすめ教材

🛠️ Laravel公式ドキュメント
👉Laravel公式ドキュメント

Laravel検索機能の種類と実装パターン

Laravelの検索機能には、大きく分けて以下の3つのパターンがあります。

① あいまい検索(部分一致検索)

🔹 目的
キーワードの一部にマッチするデータを検索。

🔹 例
・キーワード:「Lara」
・結果:「Laravel」「Laravelの使い方」

🔹 コード例

$articles = Post::where('title', 'LIKE', "%{$search}%")->paginate(8);

🔹 ポイント

LIKE演算子を使用して部分一致検索を実現
・検索精度を柔軟に保ちながら、ユーザー体験を向上

② 完全一致検索

🔹 目的
キーワードが完全一致するデータを検索。

🔹 例
・キーワード:「Laravel」
・結果:「Laravel」(「Laravelの使い方」は含まれない)

🔹 コード例

$articles = Post::where('title', $search)->paginate(8);

ポイント
LIKEを使わず、= で完全一致を指定
・検索精度が高く、ビジネス要件に適合しやすい

③ 複数条件検索

🔹 目的
複数のフィールドに対して条件を指定し、検索の柔軟性を高める。

🔹 例
・キーワード:「Laravel」「PHP」
・検索対象: タイトル・本文・タグ

🔹 コード例

$articles = Post::where('title', 'LIKE', "%{$search}%")
    ->orWhere('tag', 'LIKE', "%{$search}%")
    ->orWhere('body', 'LIKE', "%{$search}%")
    ->paginate(8);

🔹 ポイント
orWhereを使用して複数条件を指定
・より広範なデータを柔軟に取得できる

検索機能の具体的な実装手順

以下の3つのステップでLaravelの検索機能を構築します。

  1. フォームを作成
  2. コントローラに検索処理を記述
  3. ページネーションを追加

① フォームを作成

検索用の入力フォームを作成します。

<form class="form-inline my-2 my-lg-0 ml-2">
  <div class="form-group">
    <input type="search" class="form-control mr-sm-2" name="search" value="{{request('search')}}" placeholder="キーワードを入力" aria-label="検索...">
  </div>
  <input type="submit" value="検索" class="btn btn-info">
</form>

🔹 ポイント
value="{{request('search')}}" で検索キーワードを保持

② コントローラに検索処理を記述

$articles = Post::orderBy('created_at', 'asc')->where(function ($query) {
    if ($search = request('search')) {
        $query->where('title', 'LIKE', "%{$search}%")
              ->orWhere('tag','LIKE',"%{$search}%")
              ->orWhere('body','LIKE',"%{$search}%");
    }
})->paginate(8);

🔹 ポイント
検索キーワードが存在する場合に検索処理を実行
paginate(8) でページネーションを設定

③ ページネーションを追加

<div class="d-flex justify-content-center">
    {{ $articles->links() }}
</div>

🔹 ポイント
・Laravel標準のページネーションを利用。
・見た目をカスタマイズする場合は以下のコマンドを実行

php artisan vendor:publish --tag=laravel-pagination

コマンドを実行すると、4つほどファイルが生成されます。
これで完成です!

よりLaravelについて深く学びたい方は、こちらも参考にして下さい!
👉Laravel学習に役立つおすすめ教材

FAQ:Laravel検索機能に関するよくある質問と解決策

Laravelで検索機能を実装する際、多くのエンジニアが直面する課題や疑問点があります。
以下ではよくあるエラーや疑問点について詳しく解説し、解決策を提案します。

Q1: 検索結果が表示されない

🔹 原因
・検索キーワードが間違っている
・データベースに対象データが存在しない
・WHERE句の条件に一致するデータがない

🔹 解決策

1 検索キーワードを確認
検索フォームのvalue="{{request('search')}}"が適切に値を渡しているか確認

2 デバッグツールを使用
Laravel Debugbarやdd($articles)を使用し、検索クエリが期待通りに動作しているか確認

Laravel Debugbarの使い方はこちら!
👉Laravel Debugbarを使ってサクサクデバッグしよう!

3 データベースを確認
MySQLやPostgreSQLのCLIツール、Adminerを使って直接データを確認

Q2: 検索処理が遅い

🔹 原因
・データ量が膨大
・インデックスが適切に設定されていない
・複雑なクエリが原因でパフォーマンスが低下している

🔹 解決策

1 インデックスを設定
検索対象のカラム(例: title, tag, body)にインデックスを追加

ALTER TABLE posts ADD INDEX(title);

2 クエリの最適化
Laravel DebugbarやEXPLAINを使用して、クエリの実行計画を確認

3 キャッシュを活用
頻繁に使われる検索クエリの結果をキャッシュ化

Cache::remember('search_results', 60, function() {
    return Post::where('title', 'LIKE', "%{$search}%")->get();
});

Q3: ページネーションが機能しない

🔹 原因
paginate メソッドが正しく使用されていない
・フロントエンドのリンクが適切にレンダリングされていない

🔹 解決策
1 Controllerを確認
paginateが正しく設定されているか確認

$articles = Post::where('title', 'LIKE', "%{$search}%")->paginate(8);

2 Bladeファイルを確認
ページネーションリンクが正しく出力されているか確認

{{ $articles->links() }}

3 ページネーションのカスタマイズ
見た目を変更する場合、以下のコマンドでテンプレートを公開

php artisan vendor:publish --tag=laravel-pagination

Q4: 検索結果が多すぎて見づらい

🔹 解決策

1 検索条件を追加
ユーザーが絞り込み条件を指定できるようにする(例: カテゴリ、日付、タグなど)

if ($category = request('category')) {
    $query->where('category', $category);
}

2 ページネーションを活用
一度に表示するデータ量を少なくし、ページを分けることで見やすくする

Q5: 検索機能にリアルタイム性を追加したい

🔹 解決策

1 JavaScript(AJAX)を使用
検索フォームの送信を非同期化し、リアルタイムで検索結果を表示

2 Laravel Scoutを導入
検索エンジン(Algolia、MeiliSearch)を使用して、高速な全文検索を実現

composer require laravel/scout

まとめ:Laravelで効果的な検索機能を作るためのポイント

この記事ではLaravelに備わっている機能を使って検索機能を実装るす方法を解説していきました。

🔹 Laravel検索機能の要点

  • あいまい検索: 柔軟なキーワードマッチングで利便性向上
  • 完全一致検索: 正確性を重視する場合に有効
  • 複数条件検索: タイトル、タグ、本文など複数フィールドを対象にすることで柔軟な検索が可能

🔹 効率的な検索機能の実装ステップ

  1. 検索フォームを作成: キーワード入力欄を設置し、適切なリクエストを送信
  2. Controllerで検索処理: 条件を組み合わせ、柔軟な検索クエリを実行
  3. ページネーションの導入: 検索結果を適切に分割して表示
  4. パフォーマンスの最適化: インデックス設定やキャッシュの活用