はじめに
本記事では、DatadogのRUMの機能を、Xcodeで作成したiOSアプリに仕込む方法について解説します。
Datadogの設定
DatadogのUX MonitoringメニューからReal User Monitoringを選択します。
Application typeは「iOS」を選択します。Application nameは任意で良いです。(ここでは「testMobileApp」としています)
監視対象のiOSアプリ
今回は、私が作成した既存のITイベント検索アプリを使います。やってることは単純で、connpassのAPIを使って、キーワード検索した結果をiOSアプリの画面にリスト表示し、結果リストのイベント名をクリックするとSafari Viewを起動してイベントページを開くというものです。
ファイル構成は以下の通りです。
ファイル名 | 内容 |
---|---|
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です。設定すると左側のコードスニペットに内容が反映されるので、このコードスニペットをコピーします。
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」を追加します。
iOSアプリにDatadog RUM 初期処理のコードを記述
DatadogRumInit.swiftにDatadogで生成されたコードスニペットを貼り付ける形で記載します。
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() を呼び出すコードを記述しました。
let druminit: () = DatadogRumInit().ddInit()
Xcodeで作成したアプリを実行し操作する
Xcode上で追加コードを記述したアプリをビルド、実行し、エミュレーターでアプリを操作します。適当に操作すると、Datadogへのデータ送信が開始します。
Datadogでの確認
数分かかりますが、通信が確立したことを確認するとDatadogのRUM設定画面の3番「Verify your installation」に「Data is reporting successfully!」と表示されます。
RUMのアプリケーション一覧から、今回作成したtestMobileAppを選択すると、デフォルトで生成されたモニター画面(ダッシュボード)が表示され、取得したデータが表示されているのが確認できます。
Session & Replays を選択してみると、こちらにもデータが反映されているのがわかります。
終わりに
いかがでしたでしょうか?非常に簡単にiOSアプリにRUMを仕込むことができることが分かったと思います。一方で、RUMは本格的に利用しようとするとそれなりにコストもかかります。バランスよく必要なところに上手く利用していけると良いですね。
以上です。