RedisでリアルタイムA/Bテストツールを自作する方法【完全ガイド】
A/Bテストは、今日のデジタル経済において競争力を維持したいマーケターにとって欠かせない手法となっています。既存のアイデアを検証し、新しいアイデアを実験し、何が効果的で何がそうでないかを明確にすることができます。
この情報がなければ、Webページの最適化は試行錯誤の連続となり、時間と労力を大きく浪費してしまいます。しかし残念ながら、市販のA/Bテストソフトウェアは高価であり、その恩恵を受けられない人も少なくありません。
そこで登場したのがRedisです。プログラマーのThiago Camargo氏は、Redisを活用することでこうした障壁を取り払い、リアルタイムで動作するオープンなA/Bテストツールを作り上げました。Redisの強力なデータ処理機能により、ユーザーは自由に変数を選んで実験を行い、Webページを最適化する最も効果的な方法を見つけ出すことができます。
この記事では、Thiago氏がどのようにこのアプリケーションを構築したのかを詳しく見ていきます。なお、Redis Launchpadでは、本記事以外にも革新的なアプリケーションが多数公開されていますので、ぜひ読み終えた後にチェックしてみてください。
目次
- 何を構築するのか?
- 必要なもの
- アーキテクチャ
- はじめに
- 仕組み
1. 何を構築するのか?
今回構築するのは、シンプルでありながら強力で、スケーラブルかつリアルタイムに動作するA/Bテストツールです。以下では、必要なコンポーネントとそれぞれの役割を確認しながら、アプリケーションをゼロから組み立てる方法を紹介します。
2. 必要なもの
- Kotlin: オープンソースのプログラミング言語。GoogleもAndroidアプリ開発に採用しています。
- Gradle: 多言語対応のソフトウェア開発向けビルド自動化ツール。
- Lettuce: ノンブロッキングなリアクティブアプリケーションの構築に使用。
- RedisGraph: グラフの隣接行列を疎行列で表現し、線形代数によってグラフをクエリします。
- RedisTimeSeries: 数百万規模のサンプルやイベントを超高速で取り込み・クエリできます。
- RedisJSON: Redisキーに対してJSON値の保存・更新・取得を可能にします。
3. アーキテクチャ
- Swagger上で、Webサイトでテストしたい変数をもとに実験を作成します。この例では、画面の色が売上に与える影響をテストしています。
- トリガーイベントによって、実験に自動的に参加させるユーザーが決定されます。
- サブスクリプションに登録したユーザーはトリガーイベント(コンバージョン)として記録され、どの色の場所で発生したかも併せて記録され、結果の測定に活用されます。
A/Bテストとは?
A/Bテスト(スプリットテストとも呼ばれます)とは、変数の2つ以上のバージョンをサイト訪問者に表示し、どちらがコンバージョンにより大きな影響を与えるかを検証する体系的な実験プロセスです。
その目的は、ブランド・製品・サービスを市場においてより効果的に訴求する方法を明確にすることにあります。
例えば、Webサイトで販売している製品があるとしましょう。実験できる変数の一つとして、製品の横にあるCTA(行動喚起)ボタンが挙げられます。CTAのA/Bテストには、次のような観点があります。
- 配置
- デザイン
- カラー
- サイズ
- コピーライティング
これらの変数をスプリットテストすることで、コンバージョン獲得に最も効果的なCTAのバージョンを特定できます。
4. はじめに
前提条件
- Docker
- Gradle 7.2 のインストール
- Maven 3.8.1
- OpenJDK のインストール
- Swagger APIドキュメント
ステップ1:リポジトリをクローンする
ステップ2:ビルドタスクを実行する
ステップ3:Redisモジュールをセットアップする
Docker Desktopを使用している場合は、ボリュームマウントのためにファイル共有オプションが有効になっていることを確認してください。以下のコードでRedisをセットアップします。
ステップ4:アプリケーションを実行する
以下のコードでDockerを起動します。
仕組み
Experiments API
ここでは、トリガーベースの重み付け登録による、スケーラブルなA/Bテスト実験の作成方法を紹介します。
実験の作成方法
このステップでは、さまざまな変数をA/Bテストできる実験を作成します。ここでは、画面の色ごとの売上への影響をスプリットテストしたいマーケターになりきって進めていきます。
まずは以下のコードを使用します。
注目すべき点として、上部の「goalIds」を「purchase」に変更し、画面の色ごとの売上件数を測定できるようにしています。さらにその下で、実験の「id」を「subscription1」と設定しました。
トリガーイベントとしては「user-plan-screen-view」を挿入しています。これにより、イベントが発生すると、ユーザーは自動的に実験へ登録されます。
続いて、バリアントとして「red」と「blue」を指定します。これらがA/Bテストの対象となる2つの変数です。
実験の取得方法
レスポンス例:
Remote Config API
ここでは、動的かつスケーラブルなリモートクライアント設定サービス(Firebaseの代替)の作成方法を紹介します。
リモート設定の更新方法
リモート設定の取得方法
レスポンス例:
Event API
このステップでは、時系列イベントのインデックス化を行います。
イベントの送信方法
Summary API – 汎用サマリーサービス
これはシンプルかつ柔軟なサマリーサービスで、さまざまな種類のアプリケーションの集計データを保持・管理できます。対象となるのは、ゲームのスコアボード、製品評価、ユーザー評価、増加型メトリクスなど多岐にわたります。
サマリーの更新方法
サマリーの取得方法
レスポンス例:
Drawer API – 汎用Key/Valueサービス
柔軟なプロパティストレージを提供します。
Drawerの更新方法
Drawerの取得方法
レスポンス例:
使用されているRedisクエリ
以下のコマンドの多くは、LettuceのRedis Command Annotationを使って実装されています。
Graph
- enrollEmitterOnExperiment
- fetchParticipantsOnExperiment
- graphQuery
TimeSeries
- pushEvent
JSON
- setObject
- getObject
- setPathValue
- getPathValue
Core
- HSET
- HGET / HGETALL
- HEXISTS
- …
まとめ:すべての人にA/Bテストを
A/Bテストは、今日のデジタル市場で競争するあらゆるマーケターにとって不可欠な存在となっています。しかし、そのためのソフトウェアの入手にはコストがかかり、多くの人が最適化されていないWebサイトのまま運営せざるを得ないのが現状です。さらに、自前でスプリットテストツールを開発しようとすると、プログラミング面での難易度も高いという課題があります。
こうしたアプリケーションを構築するには、コンポーネント間でデータを効率的にやり取りできる、柔軟で強力なデータベースが必要です。しかし、Redisはこれらの障害をすべて取り払ってくれました。
Redisの高度なデータ処理能力により、コンポーネント間のデータ伝送は超効率的かつ信頼性の高いものとなり、非常に応答性の高いアプリケーションが実現しました。つまり、ラグも遅延もなく、ユーザーとアプリケーションの間に摩擦が生じません。
ノートパソコン1台でRedisを動かすだけで、Webサイト上のあらゆる変数をA/Bテストでき、ターゲット市場との距離をぐっと縮めることができます。このアプリケーションの制作過程について詳しく知りたい方は、ぜひYouTube動画をご覧ください。
この記事を楽しんでいただけたなら、Redis Launchpadにも他にも多数の記事がありますので、ぜひ覗いてみてください。リアルタイム車両追跡システムの構築から、途上国の農作物保険を守るドローンシステムの開発まで、世界中のプログラマーがRedisを活用して日常をより良いものにしています。
あなたなら、Redisで何を作りますか?
このアプリを作ったのは誰?
Thiago Camargo
このアプリケーションが気に入った方は、Thiago氏のGitHubページを訪れて、彼が取り組んでいるプロジェクトの最新情報をぜひフォローしてみてください。
-
Redis PERSISTコマンド徹底解説 – キーの有効期限を削除して永続化する方法
このチュートリアルでは、Redisデータストアに保存されたキーから有効期限(タイムアウト)を削除するためのコマンド「PERSIST」の使い方を、redis-cliを使いながら詳しく解説します。 EXPIRE / PEXPIRE または EXPIREAT / PEXPIREAT コマンドでキーに有効期限を設定すると、そのキーは揮発性(Volatile)状態になります。これは「有効期限が設定されているキー」を意味します。PERSISTコマンドを実行すると、キーに関連付けられた有効期限が削除され、キーは永続(Persist)状態に変化します。つまり、削除されない限り半永久的にデータが保持されるように
-
JedisライブラリでRedisのPub/Subシステムを実装する方法【Javaサンプルコード付き】
このチュートリアルでは、Java向けクライアントライブラリ「Jedis」を使用して、RedisのPub/Sub(パブリッシュ/サブスクライブ)システムを実装する方法を解説します。 Jedisライブラリとは Jedisは、Redisデータストア用のJavaクライアントライブラリです。軽量で非常に扱いやすく、Redis 2.8.x、3.x.x以降のバージョンと完全な互換性があります。シンプルなAPI设计で、Redisの各種コマンドを直感的に操作できるのが特徴です。 RedisのPub/Subシステムとは Redisは、Publish/Subscribe(パブリッシュ/サブスクライブ)型のメッセージ