KENTEM TechBlog

建設業のDXを実現するKENTEMの技術ブログです。

アプリの利用状況を見てみよう

この記事は、 KENTEM TechBlog アドベントカレンダー2025 6日目、12月6日の記事です。

こんにちは!モバイルアプリの開発に日々励んでいるKENTEM開発統括部のK.H.です。
丹精込めて作成した機能がみんなに使われて、社会の役に立つ。なんて素晴らしい仕事でしょう。
・・・・ホントですか?ほんとに使われていますか?役に立っていますか?
開発者と利用者の認識が異なることもありますし、どんなに良い機能だったとしても使われてなかったら無駄なものです。
リリース時には良いものを作った!と思いたくなりがちですが、ちゃんと現実を把握して、次に活かしていくことが大事です。
ということで、今回はモバイルアプリの操作ログからユーザーの利用状況の現実を見てみようというお話です。

操作ログの収集

操作ログを見るもなにも、そもそも収集しないと始まりません。
また、開発者側で確認できる必要があるため、オンライン上の格納先が必要になります。
自分で作ってもいいですが、分析ツールも一体化したサービスが世の中にありますので、探してみてください。
今回はAzureのApplication Insightsを利用したログの収集方法を紹介します。

Application Insightsでログの置き場所を作成する

まずはApplication Insightsで一つリソースを作成します。必要な設定等は無いので、名前以外はデフォルトで大丈夫です。 作成されたApplication Insightsのリソースに移動し、概要に表示されているConnectionStringをコピーしておきます。 コピーしたConnectionStringの中身を見ると「;」区切りでいくつかの情報が格納されています。 [InstrumentationKey]と[IngestionEndpoint]を抽出しておいてください。後ほど使います。

アプリからログを送る

ログの置き場所が用意できたので、モバイルアプリからログをアップロードします。
今回は単純な.NET MAUIアプリで試してみます。ただボタンを4つ配置しただけのアプリです

それぞれのボタンがクリックされた時にログを送信します。

private readonly HttpClient _httpClient = new HttpClient();
private void SendLogAsync(string eventName)
{
    //ログデータ
    var telemetryItem = new
    {
        name = "Microsoft.ApplicationInsights.Event",//固定
        time = DateTime.UtcNow.ToString("o"),
        iKey = "[InstrumentationKey]",
        data = new
        {
            baseType = "EventData",//固定
            baseData = new
            {
                name = eventName,
                //自由に追加情報も入れられる。customDimensions列に格納される。
                properties = new Dictionary<string, object>
                {
                    { "userId", "user123" }
                }
            }
        }
    };

    //転送用データ。複数のログデータも送ることが可能
    var payload = JsonSerializer.Serialize(new[] { telemetryItem });
    var content = new StringContent(payload, Encoding.UTF8, "application/json");
    var url = "[IngestionEndpoint]/v2/track";
    var request = new HttpRequestMessage(HttpMethod.Post, url)
    {
        Content = content
    };
    request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    _httpClient.SendAsync(request);
}

[InstrumentationKey]と[IngestionEndpoint]にはApplication InsightsのConnectionStringから取得した内容を代入してください。
ではアプリを実行し、ボタンをクリックして、ログが送られているか確認してみます。
アプリから送られたログはCustomEventsテーブルの中に格納されています。 無事にApplication Insightsにログがアップロードされていることが確認できます。

操作ログの集計

ログの一覧を見ていてもあまり気づきを得られません。機能の利用率や利用者数の推移等、様々な集計を行なうことで分析に使えるようになります。
Application Insightsには集計してグラフ化する機能もありますのでご紹介します。

Application Insightsで集計

では試しに、機能の利用回数の一覧を出してみましょう。 先ほどログを確認したページの右側でKQLモードにします。 クエリを記載できるようになるので、以下のクエリを入力して実行します。

customEvents
| summarize UsageCount = count() by FeatureName = tostring(name)

集計した結果はグラフで見ることが可能です。
細かい設定はできませんが、棒グラフ円グラフ等いくつかの見た目が用意されています。

KQL

さらっとクエリを書きましたが、これはKQLと呼ばれるMicrosoftが開発した大規模データのクエリ言語です。
このクエリ言語を学ばなければならないというのが、Application Insightsを使ったログ集計の一番の難点です。
他の分析ツールだともっとGUIベースで簡単に見れたりします。
ただ、クエリなので自由度もかなり高く、複雑な集計を行なえるという意味では利点もあります。
ハードルの高さはAIを駆使してなんとか乗り越えましょう。

実際の製品のログの紹介

サンプルデータでは味気ないので、最後に実際の製品のログを集計したものと活用事例を紹介します。

とある機能の利用時間帯

当社の製品は企業向けのアプリなので、日中の利用が多いことがわかります。 また、メンテナンスを行いたい時など、何時ぐらいが良いかの判断に使えます。

とある機能の利用者数の推移

良い機能なのに利用者数が少ない、機能に気づいていない人が多いのでは?そんな気づきから8月に機能の入り口を目のつきやすい場所に移動させました。
見事に利用者が増え、作戦が成功したことが伺えます。

おわりに

今回はApplication Insightsを使った操作ログの収集と集計の方法を紹介させていただきました。
開発するときは検討を重ねて作っていくものの、リリース後に振り返ることは少なかったりします。 しかし、利用状況を確認していくことで、製品の隠れた課題に気づけるかもしれません。 もしかしたら、ちょっとしたテコ入れでもっと多くの人に役立つ機能になる可能性もあります。
操作ログを活用して、より良い製品開発に繋げていきましょう。

KENTEMでは、様々な拠点でエンジニアを大募集しています! 建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。 recruit.kentem.jp career.kentem.jp