かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Microsoft Tech Summit 2017 で Visual Studio Mobile Center について登壇してきました その3「未紹介機能編」

1つ前の記事

blog.okazuki.jp

ということで、速報的な記事と感想記事を書いたので、せっかくなんで技術的なことを少し書きたいと思います。

もっと Analytics

Visual Studio Mobile Center では Test 機能が見栄えがいいので印象に残りがちですしセッション構成もそういう感じになってます。

f:id:okazuki:20171110200810p:plain

ただ、サーバーに繋いだ状態でテストするとなると、Assertとかまできちんとかけようとするとちょっと大変なんですよね。 サーバーのデータ可変だったりするし…。

ということで、一番とっつきやすい Anaytics あたりをもう少しご紹介したいと思います!

Export

Analytics は、いい感じっぽいレポートを出してくれるので満足感は高いです。

f:id:okazuki:20171110202208p:plain

でも、そこにある以外のレポートを作りたかったら…?というか自分で TrackEvent に仕込んだカスタムなプロパティ情報をもとに、検索したかったら?とか出来ません。 ということで餅は餅屋という感じで Analytics のログは Application Insights に Export 出来たりします。

Mobile Center のアプリの Settings → Export → New Export → Application Insights で紐づけすれば完成です。

f:id:okazuki:20171110202601p:plain

ちょっとどれくらいのリアルタイムで反映されるのかは知らないですが、結構いい感じにログが溜まります。 Azure のポータルを開くとリソースグループに、どうみてもMobile Centerから来ましたみたいなやつが作られてます。

f:id:okazuki:20171110203022p:plain

Application Insights のポータルをぽちぽちしてるだけでも、そこそこ色々見れます。例えばセッションのところをいじってると、特定のユーザーの一連の操作の流れとか見れるし

f:id:okazuki:20171110203443p:plain

あとは特定バージョン使ってる人の分布とか

f:id:okazuki:20171110203928p:plain

特定のイベントがどれくらい発生してたとか

f:id:okazuki:20171110204245p:plain

ユーザーがどんな風に操作してるのかを俯瞰したり

f:id:okazuki:20171110204625p:plain

ぽちぽちしてるだけでもいろいろ見れるのですが、Application Insights の概要タブのところで上の方に分析という選択肢があります。

f:id:okazuki:20171110205758p:plain

これを押すと、自分で好きなクエリを書いて分析することが出来ます。 Visual Studio Mobile Center からは、customEvents というものが飛んでるみたいです。

なのでクエリのところに customEvents と書いて実行するとログがざざざ~っと表示されます。

f:id:okazuki:20171110210045p:plain

あとは | で区切って where とかでフィルタリングしたりします。例えば過去3日間の select image のイベントのみに絞るのはこうやります。

customEvents
| where timestamp >= ago(3d)
| where name == "select image"

こういう風になります。

f:id:okazuki:20171110210357p:plain

クエリは書いてると補間も効くし、そこまで難しくないです。ただ、自分が埋め込んだカスタムイベントのプロパティの中身を見るのがちょっと難しいです。 クエリの結果を展開していくと、こういう風に見えるので…

f:id:okazuki:20171110210601p:plain

customEvents
| project customDimensions.Properties.url

みたいにいけるかと思いますよね?(project は SQL でいうところの SELECT) 実はこれではだめで…なんと JSON 文字列が来てるみたいなので、こういう風に書きます。

customEvents
| extend p = parsejson(tostring(customDimensions.Properties))
| mvexpand p
| where p.url != ""
| project p.url

extend で文字列化した Properties を parsejson して変数につっこんで mvexpand すると使えるようになります。 これがわかるまで凄く時間かかりました。どうも dynamic な型だったりすると tostring しないといけないとかいろいろあるみたいです。

集計もできます。例えば、過去3日で一番見られた画像ってどれ?っていうのを見つけたかったらこういう感じです。

customEvents
| where timestamp >= ago(3d)
| where name == "select image"
| extend p = parsejson(tostring(customDimensions.Properties))
| mvexpand p 
| summarize count() by tostring(p.url)
| order by count_ desc nulls last 

f:id:okazuki:20171110211428p:plain

この画像っぽいですね。

ちなみに表形式の出力じゃなくてグラフもできます。render ってやるだけ。

customEvents 
| where timestamp >= ago(3d) 
| where name == "select image"
| extend p = parsejson(tostring(customDimensions.Properties))
| mvexpand p
| summarize count() by tostring(p.url)
| order by count_ desc 
| render piechart 

f:id:okazuki:20171110211922p:plain

あとは、怪しいログをみつけたら、その session_id でフィルタリングすればユーザーがどんな操作をしてたのかとかもクエリでさくっと書けるし、使い方は無限大。

Application Insights のクエリのリファレンスはこちらを参照してください。

Azure Log Analytics

その他に…

Mobile Center のビルドは凄く簡単なんだけどちゃんとカスタムも入れるポイントがあります。 こちらが詳しいです。

公式ドキュメント

Build Scripts | Microsoft Docs

実際にやってみた人の記事

qiita.com

ここで触れられている環境変数ないのつらたんっていうのは思ってたのですが、先日対応されたみたいです。(多分セッション当日朝起きたらふってきたアップデートだと思われる…)

まとめ

Visual Studio Mobile Center はいいぞ。