この記事はMaya-Pythonアドベントカレンダー2016の12月22日の記事です。
はじめに
社内で開発したMayaプラグインをアーティストさんに使ってもらう、みたいなケースにおいて、
- どのツールがどのくらい使われているか
- 例外がどこでどのくらい出ているか
- どんな環境で使われているか
- どのバージョンのプラグインが使われているか
みたいなことが分かると、改修の優先度決め、改修の影響範囲確認、サポートの終了判断といったことに役立ちそうです。
アプリの計測方法は色々ありますが、今回は個人的に使い慣れているGoogleAnalytics(GA)での計測を試してみます。
GAの準備
まずはとにもかくにもGAでアカウントなどを用意する必要があります。
というわけでAnalyticsのサイトにアクセスします。
www.google.com
Googleアカウントがない場合はアカウント作成、ある場合はログインで管理画面に遷移します。
次にGAのアカウント作成画面に遷移すると、まずはウェブサイトとモバイルアプリのどちらかを選択する形になります。
今回はモバイルアプリを選択して登録を進めていきます。
登録完了後、管理画面のプロパティ>トラッキング情報>トラッキングコードに「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は反映までに少し時間がかかるのですが、レポートのリアルタイムという項目を選択すれば、情報は限られますが、その名の通りリアルタイムにトラッキング状況が確認できます。
サンプルコードの説明
サンプルコードはメニューバーの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
結果
そんなこんなでトラッキングが成功すると、こんな感じでイベントの一覧と数や
例外なんかを確認できます。
セカンダリディメンションと検索などを活用すればより詳細に状況の分析をすることができます。夢が広がる。
サンプルコードの補足
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