GAでMayaのプラグイン利用状況を計測する

f:id:tm8r:20161222010226j:plain
この記事はMaya-Pythonアドベントカレンダー2016の12月22日の記事です。

はじめに

社内で開発したMayaプラグインをアーティストさんに使ってもらう、みたいなケースにおいて、

  • どのツールがどのくらい使われているか
  • 例外がどこでどのくらい出ているか
  • どんな環境で使われているか
  • どのバージョンのプラグインが使われているか

みたいなことが分かると、改修の優先度決め、改修の影響範囲確認、サポートの終了判断といったことに役立ちそうです。

アプリの計測方法は色々ありますが、今回は個人的に使い慣れているGoogleAnalytics(GA)での計測を試してみます。

GAの準備

まずはとにもかくにもGAでアカウントなどを用意する必要があります。

というわけでAnalyticsのサイトにアクセスします。
www.google.com

Googleアカウントがない場合はアカウント作成、ある場合はログインで管理画面に遷移します。
次にGAのアカウント作成画面に遷移すると、まずはウェブサイトとモバイルアプリのどちらかを選択する形になります。
f:id:tm8r:20161220212847p:plain

今回はモバイルアプリを選択して登録を進めていきます。
登録完了後、管理画面のプロパティ>トラッキング情報>トラッキングコードに「UA-XXXXXXXX-Y」というフォーマットのコードが確認できるので、これをメモっておきます。

PythonからGAを叩く準備

今回は以下のライブラリを利用します。
github.com

ソースを落としてMayaが読めるところに置くなり、後ほど記載するサンプルコードと同じディレクトリに置くなり、お好きな形で導入してください。

GAに送る情報を考える

ウェブサイトなどでトラッキングする分には提供されてるJSを使えばよいんですが、そうでない場合はMeasurement Protocolを用いてリクエストを行います。
上のライブラリはこの操作をラップしてくれるものです。

というわけで早速GAに色々情報を送りたいんですが、一体どんなパラメータに何を入れればよいのだ、ということでパラメータのリファレンスを見てみます。
Measurement Protocol Parameter Reference  |  Analytics Measurement Protocol  |  Google Developers

はい。
とんでもない量のパラメータで目眩がしますね!

ヒットという単語がちょいちょい出てきますが、このヒットというのはGAに送信する操作を示します。
このヒットにはいくつか種類があり、トラッキングの際は必ず指定を行う形になります。
今回は以下のような使い方を考えてみます。

種類 用途
screenview 画面の表示
event イベント(ボタンクリックなどの操作)
exception 例外

次に、必ず送るユーザーやアプリの情報をパラメータに割り当ててみます。

パラメータ 用途
ul 言語 ja-jp
an アプリケーション名 ga_plugin_example
aid アプリケーションID ga_plugin_example_id
av アプリケーションのバージョン 0.0.1
aiid アプリケーションインストーラID Autodesk Maya 2015 SP6
cd1 OS(カスタムディメンション1) Darwin-14.5.0-x86_64-i386-64bit

カスタムディメンションというのはGAのプロパティごとに20個まで設定できるユーザー独自のパラメータです。
通常OSなどはuseragentをもとにGoogleさんが勝手に出してくれるんですが、Mayaはuseragentを持っていないのと、自前でuseragentを組み立てるのは推奨されていないので、OS用のカスタムディメンションを自分で作成します。

管理画面のプロパティ>カスタム定義>カスタムディメンションから登録することができます。
「範囲」という項目は「ヒット」にしておきます。

あとは各ヒットの種類ごとのパラメータについて考えてみます。

screenview

パラメータ 用途
cd スクリーン名 GATrackingWindow

画面の表示に関しては画面名が分かればよいので、cdだけを基本のパラメータに加えて送る形で考えてみます。

event

パラメータ 用途
cd スクリーン名 GATrackingWindow
ec イベントカテゴリ ToolAction
ea イベントアクション ButtonPressed
el イベントラベル button1

例は仮置きなのであれですが、この設計をしっかりしておくと同カテゴリや同アクションでの絞り込みにより、有用なレポートが期待できます。
また、どこで発生したかも把握しておきたいので、screenviewと同様にcdをセットします。

exception

パラメータ 用途
cd スクリーン名 GATrackingWindow
exd 例外の説明 MyException on button_command

例外の説明は150byteまでなので、簡潔に何がどこで起きたかを送信する形を考えてみます。
cdをセットするのはevent同様です。

それぞれ文字数の制限などの詳細に関しては、上で紹介したパラメータのリファレンスをご参照ください。

いざ実装

github.com
というわけで出来上がったサンプルコードがこちらになります。
ga_plugin_example.modというモジュール設定ファイルがあるので、こちらを所定の位置に配置し、中に記載されているパスを書き換えます。
GA用のライブラリはとりあえずこのリポジトリのpythonディレクトリにぶち込んでおく感じでも動きます。

モジュールまわりの話は以下の記事をどうぞ。
tm8r.hateblo.jp

あとはpython>ga_example_tool>tracker.pyにTRACKING_CODEという変数があるので、こちらをメモしておいたトラッキングコードに差し替えれば動作が確認できます。

GAは反映までに少し時間がかかるのですが、レポートのリアルタイムという項目を選択すれば、情報は限られますが、その名の通りリアルタイムにトラッキング状況が確認できます。
f:id:tm8r:20161220223254p:plain

サンプルコードの説明


サンプルコードはメニューバーのGA_Tools>Test>GATrackingWindowで起動して、このようなWindowを生成します。
Button1もButton2も標準出力に文字列を出力しますが、Button2はランダムで例外を送出します。

今回利用しているライブラリではREADMEに記載されている通り、以下のようにトラッキングを行うことが出来ます。

from UniversalAnalytics import Tracker

tracker = Tracker.create('UA-XXXXX-Y', client_id = CUSTOMER_UNIQUE_ID)
tracker.send('event', 'Subscription', 'billing')

純粋にtracker.sendをトラッキングを実行したいところで呼び出してもいいんですが、基本的にはWindowを生成したとき、なんらかのボタンを押したりしたときにトラッキングできれば十分です。
というわけで、実行時、実行完了時にトラッキングを行うようなデコレーターがあればよさそうです。

サンプルコードでは、それぞれbefore_tracking、after_trackingという名前で実装しています。
デコレーターの第一引数にはヒットの種類を、あとは必要に応じて辞書などでパラメータを渡すことができます。
また、after_trackingでは中で例外をキャッチし、ヒットの種類をexceptionとして、例外のmessageと呼び出し元の関数名をexdパラメータとしてトラッキングを行います。
https://github.com/tm8r/ga_plugin_example/blob/master/python/ga_example_tool/tracker.py#L35

結果

そんなこんなでトラッキングが成功すると、こんな感じでイベントの一覧と数や
f:id:tm8r:20161220225848p:plain

例外なんかを確認できます。
f:id:tm8r:20161220225906p:plain

セカンダリディメンションと検索などを活用すればより詳細に状況の分析をすることができます。夢が広がる。
f:id:tm8r:20161220230250p:plain

サンプルコードの補足

Mayaのプラグイン開発って普通にやってるとMaya再起動をする羽目になるので、これを回避する処理を入れてます。
具体的にはuserSetup.pyの以下の部分。
https://github.com/tm8r/ga_plugin_example/blob/master/python/userSetup.py#L15
Window起動時にreloadを挟む形になっているので、コードを書き換えてツールを起動し直せばMayaの再起動なしに更新が反映されます。らくちん。

おわり

というわけでGAとMayaの連携で色々と有用なレポートを得られそうなことが分かりました。
今回は使ってませんが、uidというユーザーの識別子をセットするパラメータもあるので、これを活用すればアーティストさんにヒアリングをしなくても問題解決ができたりもしそうです。すてきね。
(※uidは個人情報の取扱がNGになので、そちらは注意が必要です)

GAの基本的な知識などに関してはGAIQという資格試験用の学習ガイドが参考になるので、興味がある方は見てみてもよいかと思います。
support.google.com

スポンサーリンク