0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel × Redis】初心者向け「キャッシュ戦略」ガイド【実践3種】

0
Last updated at Posted at 2025-12-04

目次

  1. はじめに:なぜスタートアップにRedisが不可欠なのか?
  2. 5秒でわかるRedisの仕組み(机と書庫の話)
  3. 【準備編】Laravel SailでRedisを一瞬で立ち上げる
  4. 【実践Lv.1】DB負荷を劇的に下げる「データキャッシュ」の極意
  5. 【実践Lv.2】ユーザーを待たせない「非同期処理(キュー)」の魔法
  6. 【実践Lv.3】サーバーが増えても安心な「セッション管理」
  7. 現場でハマらないための「落としどころ」と注意点
  8. まとめ

1. はじめに:なぜスタートアップにRedisが不可欠なのか?

スタートアップやベンチャー企業において、最も重要な資源は**「スピード」**です。これは開発速度だけでなく、プロダクトの応答速度も含みます。

「ページを開くのに3秒かかる」
これだけで、ユーザーの40%は離脱すると言われています。離脱は、そのまま利益の損失に直結します。

また、急激なアクセス増加(バズった時や広告出稿時)にサーバーが耐えられずダウンしてしまうことは、スタートアップにとって死活問題です。

そこで登場するのが Redis(レディス) です。
Redisを使えば、以下の3つを同時に実現し、組織に貢献できます。

  1. ユーザー体験の向上(サイトがサクサク動く)
  2. インフラコストの削減(DBサーバーの台数を減らせる)
  3. スケーラビリティの確保(急なアクセス増でも落ちにくい)

この記事では、Laravelを使って今日からすぐに現場で導入できる、具体的かつ実践的なRedis活用法を解説します。

2. 5秒でわかるRedisの仕組み(机と書庫の話)

エンジニア以外の方にも説明できるように、簡単な言葉で理解しましょう。

  • MySQL(データベース) = 「巨大な書庫」
    • データは確実に保存されますが、遠くの部屋まで取りに行くので時間がかかります。
  • Redis(インメモリデータストア) = 「作業机の上」
    • 手元にあるので一瞬で取れますが、机の上(メモリ)はスペースが限られており、電源を切ると消えることもあります。

「よく使う資料(データ)だけ、書庫(DB)から机(Redis)にコピーしておく」
これがRedisを使う基本的な考え方です。これだけで、毎回書庫まで走る必要がなくなり、業務(レスポンス)が圧倒的に速くなります。

3. 【準備編】Laravel SailでRedisを一瞬で立ち上げる

現代の開発現場ではDockerが主流です。Laravel Sailを使えば、設定ファイルを書く必要すらほぼありません。

手順はこれだけです。

docker-compose.yml を確認してください。デフォルトでRedisが含まれているはずです。

redis:
    image: 'redis:alpine'
    ports:
        - '${FORWARD_REDIS_PORT:-6379}:6379'
    volumes:
        - 'sail-redis:/data'
    networks:
        - sail

次に、.env ファイル(環境設定)で、キャッシュの保存先をRedisに指定します。

# キャッシュの保存先をRedisに変更
CACHE_DRIVER=redis

# セッション管理もRedisに変更(後述)
SESSION_DRIVER=redis

# キュー(非同期処理)もRedisに変更(後述)
QUEUE_CONNECTION=redis

これで、あなたのLaravelアプリケーションは「机(Redis)」を使う準備が整いました。

4. 【実践Lv.1】DB負荷を劇的に下げる「データキャッシュ」の極意

ここからが本番です。現場で最もよく使う「データキャッシュ」を実装します。

シチュエーション

「トップページのお知らせ一覧、毎回DBから取得する必要ある?」

1分間に1000アクセスあった場合、1000回DBに問い合わせが飛びます。しかし、お知らせの内容なんて数分間は変わりませんよね?

解決策:Cache::remember を使う

Laravelには、天才的に便利なメソッド Cache::remember があります。

use Illuminate\Support\Facades\Cache;
use App\Models\News;

public function index()
{
    // 'top_news' というキーで、600秒(10分)間キャッシュする
    $newsList = Cache::remember('top_news', 600, function () {
        // キャッシュがない時だけ実行される処理(DBへの問い合わせ)
        return News::orderBy('created_at', 'desc')->take(5)->get();
    });

    return view('top', compact('newsList'));
}

なぜこれが組織貢献になるのか?

  1. 最初の1人目:DBへ取りに行き、その結果をRedisに保存します。
  2. 2人目〜1000人目:DBには行かず、Redisから一瞬でデータを返します。
  3. 結果:DBの負荷が1/1000になります。サーバー代が浮きます。サイトが速くなりユーザーが喜びます。

これが「現実的な問題解決」です。

5. 【実践Lv.2】ユーザーを待たせない「非同期処理(キュー)」の魔法

次に、Redisを「キュー(待ち行列)」として使う方法です。これはUX(ユーザー体験)を劇的に改善します。

シチュエーション

「会員登録ボタンを押した後、メール送信完了まで5秒間クルクル待たされる」

ユーザーは「固まった?」と思って離脱したり、連打したりします。これは最悪です。

解決策:重い処理は「後でやる(非同期)」

メール送信などの重い処理は、Redisという「ToDoリスト」にタスクを放り込んで、ユーザーにはすぐ「登録完了!」と返事をしましょう。

1. ジョブクラスを作成

php artisan make:job SendWelcomeEmail

2. コントローラーでの処理

use App\Jobs\SendWelcomeEmail;

public function register(Request $request)
{
    // ユーザー作成処理...
    $user = User::create($request->all());

    // 【重要】ここでメール送信を「予約」するだけ!一瞬で終わる。
    SendWelcomeEmail::dispatch($user);

    // ユーザーを待たせず、すぐに完了画面へ
    return redirect()->route('complete');
}

3. 裏側でワーカーを動かす
サーバー側で、Redisに溜まった「ToDo(メール送信タスク)」を消化するプロセスを動かしておきます。

php artisan queue:work

なぜこれが組織貢献になるのか?

ユーザーの体感待ち時間が5秒から0.1秒になります。
「このサービス、サクサク動く!」という信頼感は、エンジニアが作れる最大のブランド価値です。

6. 【実践Lv.3】サーバーが増えても安心な「セッション管理」

最後に、スタートアップが成長フェーズに入った時に直面する問題です。

シチュエーション

「アクセス増でWebサーバーを2台に増やしたら、ログインが勝手に切れるようになった」

デフォルト(file保存)では、サーバーAでログインした情報がサーバーAの中にしかありません。ロードバランサーがユーザーをサーバーBに振り分けた瞬間、「誰やお前?」となりログアウトしてしまいます。

解決策:セッション情報の共有場所としてRedisを使う

RedisはWebサーバーの外にあるので、どのサーバーからでもアクセスできます。

設定は簡単です。先ほど .env で設定したこれだけです。

SESSION_DRIVER=redis

これだけで、Laravelはセッション情報を自動的にRedisに保存・参照します。

なぜこれが組織貢献になるのか?

インフラを拡張(スケールアウト)する際の最大の障壁を取り除くことができます。
「いつでもサーバーを増やせる状態」を作っておくことは、急成長を目指すベンチャーにおいて、CTOや経営層から非常に感謝されるポイントです。

7. 現場でハマらないための「落としどころ」と注意点

「なんでもかんでもRedisに入れればいい」というのは素人の考えです。プロとして評価されるための「落としどころ(注意点)」を押さえましょう。

  1. キャッシュの更新(無効化)を忘れない
    • 管理画面でお知らせを更新したのに、サイト側は古いキャッシュ(10分前のまま)が表示され続ける、というのはよくある事故です。
    • 対策:データ更新時に Cache::forget('top_news'); を仕込むか、キャッシュ時間を適切に短く設定しましょう。
  2. Redisは「消えてもいいデータ」が基本
    • Redisはメモリ上で動いているため、再起動などでデータが消える可能性があります。
    • 対策:絶対に消えてはいけない「売上データ」や「ユーザー基本情報」は必ずMySQLなどのRDBに保存し、Redisはあくまで「コピー」や「一時置き場」として使いましょう。

8. まとめ

Redisを導入することは、単なる技術的な挑戦ではありません。

  • ページ表示速度の向上 → ユーザー体験とCVR(コンバージョン率)の向上
  • DB負荷の軽減 → サーバーコスト削減と安定稼働
  • スケーラビリティの確保 → ビジネスの急成長に対応できる基盤作り

Laravelを使っていれば、これらが驚くほど簡単に実装できます。
「技術を使って、ビジネスを止めない、加速させる」
これこそが、ベンチャー・スタートアップで求められるエンジニアの姿です。

まずは、一番重たいトップページのクエリひとつから、Cache::remember を試してみてください。その0.1秒の短縮が、チームへの最大の貢献になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?