NEXTSCAPE blog

株式会社ネクストスケープの社員による会社公式ブログです。ネスケラボでは、社員が日頃どのようなことに興味をもっているのか、仕事を通してどのような面白いことに取り組んでいるのかなど、会社や技術に関する情報をマイペースに紹介しています。

MENU

アクセスデータ分析ツール「Mixpanel」の紹介

はじめに

この記事は「NEXTSCAPE Advent Calendar 2023」の9日目の記事になります。
qiita.com
株式会社ネクストスケープ、ソリューションビジネス部所属の小野塚です。

唐突ですが、皆様の会社ではデジタルマーケティングに関する取り組みとして何か行っておりますでしょうか。
例えば簡単なものでいえばGoogle Analyticsによるアクセス解析、あとはABテストやMA(Marketing Automation)等々が挙げられます。
弊社で扱ってきたツール・サービス等ではSitecoreやKenticoといったCMSがありまして、単純なCMSとしての機能だけなく、アクセス解析やABテストも備えたオールインワンCMSとして販売されています。
今回はGoogle Analyticsのようなアクセス解析ツール(Webトラッキングツール)である「Mixpanel」を紹介してみたいと思います。
mixpanel.com

Mixpanel概要

Mixpanelはアメリカに存在する会社名でもありまして、その名を冠したWebトラッキングツール「Mixpanel」を開発・販売しています(以下「Mixpanel」はツール名を表すものとします)。
皆さまご存じの通り、こういったWebトラッキングツール、アクセス解析ツールは数多くありまして、先述のGoogle Analytics(以下「GA」)もそうですし、正確な定義はわかりませんが、ヒートマップのようなツールもWebトラッキングツールと言えるかと思います。
Mixpanelはヒートマップのような視覚的な情報ではなく、GAのような数値を収集・出力するものになります。

では、GAとの違いは何かといいますと、GAもGA4への移行にあたってクッキーやGoogleアカウントを元に個人をある程度特定し、イベント寄りの情報収集・表示を行うようになったようですが、Mixpanelはサイト内の会員情報等を元により具体的な情報を収集します。
つまり、「特定のユーザー」がどのページを見て、何をしたか(フォーム入力、製品購入等)を記録し、Mixpanel上のダッシュボードに出力するため、よりユーザー中心の測定・解析が行えます。
そのため、GAに取って代わるものではなく、ユーザーによっては併用する場合もあるようです。
今回はMixpanelのはじめの一歩としてどのようにMixpanelへデータを送信し、その送られたデータをMixpanel上でどのように確認することができるかをお見せしたいと思います。

ユーザー登録

まずは公式サイトの右上「Get Started」を選択し、アカウント作成・登録を行います。

以下の画面に遷移するのでメールアドレスを登録し、メールがそのアドレスに送られるのでメール内のリンクをクリックして承認を行います。

次に必要事項を入力します。
以下の様な自身の業務内容に関する質問があり、あとはその後に会社名、社員数等も聞かれます。

次に以下のような画面になります。
一旦ここで登録は終わっていまして、各ボタンをクリックするとオンラインマニュアルの各ページに遷移するだけですので、各ページに移動する前に「Copy your project token」のホワイトボードアイコンをクリックしてトークンをコピーしておきましょう。

実装(JavaScriptの場合)

今回はJavaScriptでの実装方法をお見せします。
まずはお約束として以下のコードをシステム(Webサイト)の初期化時に実行します。

<!-- Paste this right before your closing </head> tag -->
<script type="text/javascript">
  (function (f, b) { if (!b.__SV) { var e, g, i, h; window.mixpanel = b; b._i = []; b.init = function (e, f, c) { function g(a, d) { var b = d.split("."); 2 == b.length && ((a = a[b[0]]), (d = b[1])); a[d] = function () { a.push([d].concat(Array.prototype.slice.call(arguments, 0))); }; } var a = b; "undefined" !== typeof c ? (a = b[c] = []) : (c = "mixpanel"); a.people = a.people || []; a.toString = function (a) { var d = "mixpanel"; "mixpanel" !== c && (d += "." + c); a || (d += " (stub)"); return d; }; a.people.toString = function () { return a.toString(1) + ".people (stub)"; }; i = "disable time_event track track_pageview track_links track_forms track_with_groups add_group set_group remove_group register register_once alias unregister identify name_tag set_config reset opt_in_tracking opt_out_tracking has_opted_in_tracking has_opted_out_tracking clear_opt_in_out_tracking start_batch_senders people.set people.set_once people.unset people.increment people.append people.union people.track_charge people.clear_charges people.delete_user people.remove".split( " "); for (h = 0; h < i.length; h++) g(a, i[h]); var j = "set set_once union unset remove delete".split(" "); a.get_group = function () { function b(c) { d[c] = function () { call2_args = arguments; call2 = [c].concat(Array.prototype.slice.call(call2_args, 0)); a.push([e, call2]); }; } for ( var d = {}, e = ["get_group"].concat( Array.prototype.slice.call(arguments, 0)), c = 0; c < j.length; c++) b(j[c]); return d; }; b._i.push([e, f, c]); }; b.__SV = 1.2; e = f.createElement("script"); e.type = "text/javascript"; e.async = !0; e.src = "undefined" !== typeof MIXPANEL_CUSTOM_LIB_URL ? MIXPANEL_CUSTOM_LIB_URL : "file:" === f.location.protocol && "//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//) ? "https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js" : "//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js"; g = f.getElementsByTagName("script")[0]; g.parentNode.insertBefore(e, g); } })(document, window.mixpanel || []);
</script>

そして、以下の処理を呼び出します。
やっていることは初期化とユーザーID(今回は「onozuka」というユーザー名にします)の登録、そしてそのユーザーが実行したイベント(今回はページビューで、価格のページを見た場合の例)をMixpanelに送る、というものになります。
ちなみに「YOUR_TOKEN」の部分には最初のユーザー登録のところで取得したトークンを貼り付けます。

mixpanel.init('YOUR_TOKEN', {debug: true, track_pageview: true, persistence: 'localStorage'});
 
// Set this to a unique identifier for the user performing the event.
mixpanel.identify('onozuka')
 
// Send a default page view event with additional properties
mixpanel.track_pageview({"page": "Pricing"});

出力結果

さて、一度でも上で書いた処理が通ればMixpanelにデータが送信されているなので確認してみましょう。
Mixpanelにログインすると以下のように色々な情報が表示されていますが、まずは画面上部のタブのうち、「Events」をクリックします。

すると以下の画面に遷移するのですが、ここにデータが1つ登録されていて、これが上のコードで実行された結果となります。
確かに私のID「onozuka」と、イベント名として「Page View」が記録・表示されています。

この行の左端の「>」をクリックすると以下のようにデータの詳細が表示され、更に詳しい内容を確認することができます。

画面上部の「Export」をクリックすると以下のようなダイアログが表示されまして、イベント情報をCSVやJSON形式でエクスポートすることも簡単にできます。

なので、出力したCSVデータを更に別のシステムに投入し、見やすい形で表示する、あるいは他のデータと組み合わせて解析を行う。。といったこともできるのではないでしょうか。

C#によるMixpanelへのデータ連携

さて、今回はJavaScriptによる実装例を挙げてみましたが、SDKが用意されている言語としてはJavaScript以外にSwift、Flutter、Unity、PHP、Java等々、色々と用意されています。
が。。弊社ネクストスケープではC#がメインで扱っている言語となりまして、公式としてはSDKが提供されていません。
JavaScriptでも問題は無いのですが、実は有志の方々がGithubにおいてC#のSDKを提供してくれていまして、.NET4.6.1及び.NET Standard2.0で実行可能です。
github.com
(我々が関わっているわけではないですが)C#使いの方は是非ご利用ください。

終わりに

以上がMixpanelの簡単な紹介となります。
最初に説明したMixpanelのアカウント登録時にMixpanelが準備したサンプルプロジェクトのサンプルデータを見ることもできます。
詳細な説明は割愛させていただきますが、MixpanelはFreeプランがありまして無料で試すことが可能です。
mixpanel.com
イベント数20Mまで無料で利用でき、20Mを超えると「その月は」管理画面が参照できなくなります。
ただ、データが残っていますので翌月になって制限が解消されれば20Mを超えた月も確認可能です
個人的に試してみるだけであれば全く問題無いと思いますので興味のある方はまずはお試しいただければと思います。

弊社はMicrosoft社のパートナーとしてAzureのさまざまなリソース・機能を利用したWebサイト、ツール開発を得意としております。
しかしながら、こういったSaaSのサービスについても良いものがあれば積極的に調査・採用し、弊社が開発したものと組み合わせることでお客様の満足度をより高められればと思います。
もしお困りの方がいらっしゃいましたら、是非お気軽にお問い合わせください。
www.nextscape.net