サーバーサイドエンジニアの熊木(@k_kumaki_)です。
先日、私が担当しているヤクメドにA/BテストツールとしてAWSのサービスであるCloudWatch Evidentlyを導入したので、その経緯や内容についてまとめます。
目次
CloudWatch Evidentlyとは
AWS上でA/Bテストやフィーチャーフラグの管理ができるサービスです。 比較的新しいサービスのため、馴染みのない方も多いかもしれません。
導入に至った経緯
私が開発しているサービスであるヤクメドでは、UX向上のためA/Bテストを実施しています。
そのA/Bテストツールとして、Google Optimizeを使用していましたが、この度2023年9月30日をもってサポートが終了することが発表されました。そのため、A/Bテストの代替案を探す必要がありました。
導入理由
一番の理由は低価格であることです。 CloudWatch EvidentlyではEvidentlyイベントとEvidently分析ユニットに基づいて課金が発生する仕組みになっています。 これをもとに料金を試算すると、他のサービスに比べてかなり低額でA/Bテストを実施できるためCloudWatch Evidentlyを採用することとしました。
導入方法
1. プロジェクトの作成
ここではプロジェクト名と説明を設定するのみです。 また、データストアとしてS3かCloudWatch Logsが選択できるので、今回はS3を選択しました。 発生したイベントをデータストアに保存して、他のサービスと組み合わせることでより柔軟な分析が可能になります。
ヤクメドではTerraformでAWSリソースの管理をしており、以下のコードで作成しました。
resource "aws_evidently_project" "evidently" { name = "${local.prefix}-evidently" description = "${local.prefix}-evidently" data_delivery { s3_destination { bucket = aws_s3_bucket.evidently_logs.id prefix = "${local.prefix}-evidently" } } tags = { Name = "${local.prefix}-evidently" } depends_on = [aws_s3_bucket_policy.evidently_logs] }
2. 機能の追加
次に作成したプロジェクトに機能を追加します。 どういった分岐をするか、ユーザートラフィックを何%ずつ割り振るかなどの設定を行います。
3. アプリ側の対応
ヤクメドではバックエンドはRailsで書かれているため、CloudWatch EvidentlyのSDKを導入しました。
どこからでも使用できるA/Bテスト用のモジュールを作成し、以下のようなリクエストをCloudWatch Evidentlyに送信します。
evidently_client.evaluate_feature( { entity_id: entity_id, # ユーザーを特定する一意のID feature: feature, # 設定した機能名 project: project, # 設定したプロジェクト名 } )
レスポンスとして、以下のような形式で返ってきます。
今回は機能でブール値を設定したためvalueとしてbool_value
が返却されており、これをもとにアプリ内で分岐をさせることができます。
#<struct Aws::CloudWatchEvidently::Types::EvaluateFeatureResponse details="{}", reason="DEFAULT", value=#<struct Aws::CloudWatchEvidently::Types::VariableValue::BoolValue bool_value=true, double_value=nil, long_value=nil, string_value=nil, unknown=nil>, variation="LP">
よかった点
自分で細かな定義が可能
- アプリ側で設定している情報に対して細かく制御が可能
- 例えば、特定の地域のユーザーやChromeを使用しているユーザーなど細かく分けられます
参考: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Evidently-segments.html
導入が簡単
- この記事にも書いた通り、元々AWSを使っているサービスであればかなり簡単に導入することが可能です
終わりに
今回は、シンプルな構成での導入をご紹介しました。
CloudWatch Evidentlyを導入してみてまだ数週間ですが、Google Optimizeと遜色なくA/Bテストを行うことができています。 この記事が、A/Bテストツールでお悩み中の方の参考になれば幸いです。
是非読者になってください!
メドピアでは一緒に働く仲間を募集しています。
ご応募をお待ちしております!
■募集ポジションはこちら
■エンジニア紹介ページはこちら