iOSアプリログから品質の低下を検知する話

はじめに

はじめまして、AirレジのiOSアプリ開発を担当している保田です。

現在Airレジチームでは、ログからアプリパフォーマンスの低下を検知する仕組み作りに取り組んでいます。 今回はその取り組みについて、どのように実現しているかをご紹介させていただきます。

背景

昨年5月に、Airレジのリニューアルを行いました。 しかし、この時に「レシートの印刷が遅くなった」「レシートの印刷ができない」という声を多数いただいてしまいました。

app_review

ユーザーの業務の中でも特に重要な「会計・決済」という部分を預かる以上、 このような品質の低下をいち早く検知して、解消していかなくてはいけないということで今回の取り組みを開始しました。

社内テストでも性能面の評価を実施していたものの、実際の業務の特定パターンにおいて起きる事象もあったため、本番環境の品質の低下を検知する仕組みが求められました。

ログの収集

「アプリパフォーマンスの低下を検知する」という目的上、色々な項目のログを収集していくことになります。 そのため、スキーマレスで新しい項目を追加しやすいTreasure Dataを利用してログの収集を行っています。 Treasure Dataに収集されたログを加工してRedshiftに流し、Tableauを利用して分析を行っています。

※ 余談ですがアプリからTreasure Dataへのログ送信には自前でSDKを実装しています。
https://github.com/recruit-lifestyle/TreasureDataSDK

収集事例

先述したプリンターを例にとり、特にレシートの印刷時間に関してどのようにして収集・分析を行っているかをお伝えします。

測定対象の定義

まず、測定対象の定義を行います。
今回はレシートの印刷時間を「ユーザーがボタンをタップしてから、印刷が完了して印刷中の画面のロックが解除されるまで」と定義しました。

ログの埋め込み

設定した定義に従ってログの埋め込みを行います。
このとき既にボトルネックになりそうな箇所に見当がついている場合はその部分を計測できるようにログを埋め込みます。 今回の場合だと「印刷用データ生成に時間がかかっているのではないか?」という仮説があったため下記の3箇所にログを埋め込みました。

log

また、処理の合間にユーザーの操作が入る場合は要注意です。測定結果にユーザーが操作した時間が含まれてしまい、パフォーマンスの計測とは言えなくなってしまいます。 今回の場合だと印刷ボタンをタップしたタイミングでAirペイなどの外部決済アプリとの連携を行う場合があったので、 外部決済を行ったときの印刷を集計時に識別できるようにしました。

分析

収集したログの分析を行います。
ログの分析はTableauを利用して行っており、ディレクター・分析チーム・エンジニアが集まって議論をしながら進めることもあります。

分析結果をお見せすることはできないのですが、印刷時間の測定に関して言うと

  • iOSのOSバージョンによって印刷時間に差異はない。
  • 端末の世代によっては印刷時間に1割程度の差がある。

などの新たな発見がありました。

品質低下の検知

Airレジチームではアプリレビュー申請前にQAチームがアプリ機能を一通り網羅するテストを行っています。

この時に送信されたログから計測される時間と本番ログから計測される時間を比較することによって、 これからリリースされるバージョンでデグレが発生していないかを検知できるようになりました。

最後に

レシート印刷時間を例にアプリパフォーマンスの低下をいち早く検知する仕組みに関してご紹介させていただきました。 安定して新しい価値を素早くユーザーに届けるためには、このように品質の低下をいち早く検知できる仕組みを整えていくのが大事だと考えています。

また、リクルートライフスタイルではこのような仕組みを一緒に作ってくれるiOSエンジニアを積極的に募集しています。 興味がありましたら是非下記バナーをポチってみてください!