Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Scaling WhatsApp OTP delivery with Laravel + Redis (what we learned building CrunchzApp)

2025年09月24日に「Reddit /r/programming」が公開したITニュース「Scaling WhatsApp OTP delivery with Laravel + Redis (what we learned building CrunchzApp)」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

LaravelとRedisでWhatsApp OTPを大量配信するシステム「CrunchzApp」を開発。OTPの即時性確保のためRedisでメッセージ処理を分散し、WhatsApp APIの制限を避けるため負荷を分散。安全なテストや外部API監視の課題解決策を紹介する記事。

ITニュース解説

あるSaaSプラットフォーム「CrunchzApp」の構築経験から得られた知見は、システムエンジニアを目指す人にとって非常に参考になるものだ。このプラットフォームは、WhatsAppを利用した認証コード(OTP)や通知を、非常に多くのユーザーに、素早く確実に配信することを目指して作られた。メッセージを大量に、しかも遅延なく送信するシステムを構築する際には、様々な技術的な課題に直面する。この解説では、CrunchzAppの開発チームが直面した具体的な課題と、それらをどのように解決したのかを詳しく見ていく。

CrunchzAppが利用した主要な技術スタックは、Laravel 12、InertiaJS React、MariaDB、Redis、そしてHorizonである。Laravelはウェブアプリケーションを効率的に開発するためのフレームワークで、システムの土台を作る。InertiaJS Reactはユーザーが直接触れるウェブ画面の開発に使われ、MariaDBはユーザー情報やメッセージ履歴などの永続的なデータを保存するデータベースだ。そして、今回の話の中心となるのがRedisとHorizonである。Redisは高速なデータアクセスが可能なインメモリデータストアで、一時的なデータやキャッシュ、そしてメッセージのキュー管理に強みを発揮する。HorizonはLaravelとRedisを連携させ、大量のバックグラウンド処理(ジョブ)を効率的に管理するためのツールだ。

開発チームが最初に直面したのは「メッセージキューのスケーリング」という課題だ。OTPはユーザー認証のためにほぼ瞬時に届く必要があるが、WhatsAppのメッセージ送信APIは、外部サービスとの通信であるため、時として遅延したり、大量の要求が集中すると処理が滞ったりすることがある。この遅延がOTPの即時性を損ねる大きな要因となる。

この課題に対し、CrunchzAppはRedisとHorizonを組み合わせた「分散キュー」という仕組みを導入した。これは、メッセージ送信の要求を直接WhatsApp APIに送るのではなく、まず一旦Redis上に構築されたキュー(待ち行列)に登録するというものだ。システムはまず、メッセージ送信の要求をキューに受け付けて「すぐに処理を開始した」と返答し、実際のWhatsApp APIへの送信は、Horizonがキューからジョブを順番に取り出して、バックグラウンドで処理する。これにより、ユーザーからの要求が集中しても、システムは応答を遅らせることなく次々と受け付けられる。さらに、万が一WhatsApp APIへの送信が一時的に失敗した場合に備え、「リトライ/バックオフ戦略」を最適化した。これは、一度の失敗で諦めるのではなく、時間を置いて複数回再試行する仕組みだ。再試行の間隔を徐々に広げていくことで、相手のシステムに過度な負担をかけることなく、安定したメッセージ配信を目指す。

次に「チャンネルの負荷分散」という課題があった。WhatsApp APIには、短時間に大量のメッセージを送信しようとすると、一時的に送信を制限する「スロットリング」という仕組みがある。これは悪用を防ぐための措置だが、サービス提供側にとっては大量配信の障害となる。

この問題に対処するため、CrunchzAppは複数のWhatsAppチャンネル(メッセージを送信するためのアカウントや設定の単位)を用意し、それらのチャンネルにメッセージを均等に振り分ける「ラウンドロビンアルゴリズム」を実装した。これは、メッセージを順番に異なるチャンネルから送ることで、特定のチャンネルに負荷が集中するのを防ぎ、スロットリングによる制限を回避するという方法だ。これにより、より多くのメッセージを安定して送信できるようになった。

システムの信頼性を確保する上で重要なのは「安全なテスト環境」の設計だ。CrunchzAppのようなサービスでは、新しい機能やチャンネルを追加する際に、本番環境のユーザーに誤って影響を与えてしまうリスクがある。しかし、本番と同じ環境でしかテストできない部分も存在するため、このバランスを取ることが難しかった。

CrunchzAppでは、新しいWhatsAppチャンネルが追加されると、自動的に7日間の「サンドボックスモード」(砂場のように隔離されたテスト環境)で起動するように設計した。このサンドボックスモードは、サブスクリプションの無料試用期間と連携しており、本番環境と同じAPIインターフェースを使用しつつも、メッセージの送信先や送信数に制限を設けることで、安全にテストが行えるようにしている。これにより、開発者は実際の運用に近い環境でテストしつつ、顧客への影響を最小限に抑えることができる。

最後の課題は「サードパーティの信頼性監視」だった。WhatsAppのような外部APIを利用するシステムでは、メッセージが遅延したり、何らかの理由で拒否されたりすることがある。この時、問題が自社のシステム内で発生しているのか、それともWhatsApp側の問題なのかを迅速に特定することが重要だ。

この課題を解決するため、CrunchzAppは詳細な「ログ記録」と「アラートシステム」を構築した。メッセージの送信要求からWhatsApp APIとのやり取り、そして最終的な配信結果まで、全てのステップを細かく記録するログを整備した。さらに、問題が発生した場合には、開発者や運用担当者に自動的に通知が飛ぶアラートシステムを導入した。これにより、問題発生時にどこで何が起きているのかを正確に把握し、迅速に原因を究明して対応することが可能になった。

CrunchzAppの開発経験は、キューを多用するアプリケーションで「リアルタイム性」を維持することの重要性、外部APIに依存するシステムの信頼性を監視するための戦略、そして開発者にとって使いやすいAPIと、システム内部の複雑な処理とのバランスをどう取るかという、システムエンジニアが常に考えるべき課題を示している。これらの知見は、スケーラブルで信頼性の高いシステムを構築するための貴重な教訓となるだろう。

関連コンテンツ

関連IT用語