2
2

Datadog RUM で iOSアプリをUXモニタリングする

Last updated at Posted at 2023-10-11

はじめに

本記事では、DatadogのRUMの機能を、Xcodeで作成したiOSアプリに仕込む方法について解説します。

Datadogの設定

DatadogのUX MonitoringメニューからReal User Monitoringを選択します。
Screenshot 2023-10-11 at 14.39.39.png

New Applicationをクリックします。
Screenshot 2023-10-11 at 14.42.19.png

Application typeは「iOS」を選択します。Application nameは任意で良いです。(ここでは「testMobileApp」としています)
Screenshot 2023-10-11 at 14.44.41.png

監視対象のiOSアプリ

今回は、私が作成した既存のITイベント検索アプリを使います。やってることは単純で、connpassのAPIを使って、キーワード検索した結果をiOSアプリの画面にリスト表示し、結果リストのイベント名をクリックするとSafari Viewを起動してイベントページを開くというものです。
Screenshot 2023-10-11 at 14.49.15.png

ファイル構成は以下の通りです。

ファイル名 内容
ConnpassEventsApp.swift アプリ本体のストラクト。WindowGroupとしてContentViewを読み込み。
ContentView.swift アプリのUIを定義しているストラクト。今回Datadog RumのIntial処理はここで呼び出すことにした。
ConnpassData.swift connpass APIで取得したデータを管理、ハンドリングするためのクラス。
SafariView.swift 結果リストをクリックした際に別ビューでイベントページを表示するためのSafariView。
DatadogRumInit.swift Datadog RUM のInitializeを実装しているストラクト。今回新たに追加。

Datadog RUM で環境変数を設定

Datadogでデータを見たときになんのデータか分かるように、環境変数のdd.env"meijo-prod" を設定します。このアプリを名城大学の授業向けに作ったので、ここではこのようにしていますが、この値は何でもOKです。設定すると左側のコードスニペットに内容が反映されるので、このコードスニペットをコピーします。
Screenshot 2023-10-11 at 15.02.27.png

Xcodeのプロジェクトにライブラリを読み込む

AppleのSwift Package Managerを使って統合するには、Package.swiftに依存関係として以下を追加します。(バージョンは今後変わっていく可能性があるので適宜変更してください)

.package(url: "https://github.com/Datadog/dd-sdk-ios.git", .upToNextMajor(from: "2.0.0"))

CocoaPodsを使ってライブラリ「dd-sdk-ios」をインストールする場合はこちら。

pod 'DatadogCore'
pod 'DatadogRUM'

Carthage(カーセージ/カルタゴ)の場合はこちら。

github "DataDog/dd-sdk-ios"

XcodeではGUIベースでライブラリを追加することもできます。プロジェクトを右クリックし、「Add Package Dependencies」から「dd-sdk-ios」を追加します。
Screenshot 2023-10-12 at 9.45.34.png

iOSアプリにDatadog RUM 初期処理のコードを記述

DatadogRumInit.swiftにDatadogで生成されたコードスニペットを貼り付ける形で記載します。
Screenshot 2023-10-11 at 15.05.07.png

SwiftではswiftファイルのTop Levelに直接処理は記述できないので、DatadogRumInitというストラクトを作成し、ddInitという関数を定義しています。

import Foundation
import DatadogCore
import DatadogRUM

let appID = "dd173261-5b45-4e19-af30-0cb2bf58679d"
let clientToken = "pubd323c6d27671593d6338dc7b659c8e3d"
let environment = "meijo-prod"

struct DatadogRumInit {
    func ddInit() {
        print("ddInitが呼ばれました")
        Datadog.initialize(
            with: Datadog.Configuration(
                clientToken: clientToken,
                env: environment,
                site: .us1
            ),
            trackingConsent: .granted
        )

        RUM.enable(
            with: RUM.Configuration(
                applicationID: appID,
                uiKitViewsPredicate: DefaultUIKitRUMViewsPredicate(),
                uiKitActionsPredicate: DefaultUIKitRUMActionsPredicate()
            )
        )
    }
}

アプリ起動時、最初にUIを描画するために呼ばれるContentView.swiftの最初に、先程作成した ddInit() を呼び出すコードを記述しました。
Screenshot 2023-10-11 at 15.09.07.png

let druminit: () = DatadogRumInit().ddInit()

Xcodeで作成したアプリを実行し操作する

Xcode上で追加コードを記述したアプリをビルド、実行し、エミュレーターでアプリを操作します。適当に操作すると、Datadogへのデータ送信が開始します。
Screenshot 2023-10-11 at 14.49.15.png

Datadogでの確認

数分かかりますが、通信が確立したことを確認するとDatadogのRUM設定画面の3番「Verify your installation」に「Data is reporting successfully!」と表示されます。
Screenshot 2023-06-06 at 0.06.18.png

RUMのアプリケーション一覧から、今回作成したtestMobileAppを選択すると、デフォルトで生成されたモニター画面(ダッシュボード)が表示され、取得したデータが表示されているのが確認できます。
Screenshot 2023-10-11 at 15.14.03.png

Session & Replays を選択してみると、こちらにもデータが反映されているのがわかります。
Screenshot 2023-10-11 at 15.14.45.png

終わりに

いかがでしたでしょうか?非常に簡単にiOSアプリにRUMを仕込むことができることが分かったと思います。一方で、RUMは本格的に利用しようとするとそれなりにコストもかかります。バランスよく必要なところに上手く利用していけると良いですね。

以上です。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2