改善・その他社内の生産性を上げるための自動化を行っています。HeadSpinというサービスをトライアルしてみたので、サービス自体やその感想についてご紹介したいと思います。HeadSpinとはモチベーションHeadSpinの主な機能デバイスファーム自動テスト実行環境パフォーマンスモニタリング感想SDKを入れる必要がない安心感iOSのデバイスファーム・テスト実行環境・パフォーマンスツールとしての独自性テスト実行環境をある程度任せられる何をモニタリングし、どのエンジニアにフィードバックするかまとめHeadSpinとはHeadSpinはモバイルアプリのパフォーマンスをモニタリングする環境として、デバイスファーム・自動テスト実行環境・モニタリングをノンストップで提供しているサービスです。多様なネットワーク、ロケーション、デバイスを使い、お客さまが使う状況に近い形でパフォーマンスのテストを行うことができます。AndroidのUIテスト自動化を行なっています。これらのテストは本番環境に対してではなく、検証環境に対して行なっています。後)は現状手動で行なっています。将来的にはこの本番環境に対するテストも自動化していきたいというモチベーションがあり、HeadSpinを使うことによってこれらを簡単に、かつお客さまが使う状況に近い形でテストできるのではないかと考えました。具体的には実機を利用する4Gなどのネットワークを利用する東京などのロケーションで利用するまたHeadSpinを使うと、本番環境でのパフォーマンスモニタリングもできるため、それらを活用したエンジニアへのフィードバックもできるのではと考えました。HeadSpinの主な機能デバイスファームHeadSpinでは様々なロケーション・ネットワークの端末がデバイスファームとして用意されており、それらをWebUI上でコントロールすることができます。ベースに作られており、同じ操作性でコントロールすることができます。HeadSpinはiOSにも対応しているところが特徴的で、画面操作やアプリインストール、スクリーンショット撮影や画面回転などがWebUI上から可能です。HeadSpin上でのiOSのデバイスコントロール画面(デモ環境)自動テスト実行環境HeadSpinでは上記のデバイスに対して簡単に自動テストを実行させることができます。どちらともAppiumを利用しました。URLとCapabilitiesを指定することで、指定のデバイスでテストを実行させることができます。desired_capsendまたAppiumの場合、AppiumサーバーはHeadSpin側で提供されています。そのため、Appiumをローカル環境やCI環境でインストールする必要がありません。それによって、今回の場合はRubyの実行環境のみ必要になったので、CircleCIを使って定期的にテスト実行できる環境を簡単に作ることができました。Desktopでも、HeadSpinのデバイスと簡単に接続することができます。DesktopでのHeadSpin接続画面パフォーマンスモニタリングWebUI上でのデバイス操作や、自動テスト実行によるパフォーマンスは、Sessionとして記録することができます。それぞれのSessionのUIでは、フレームレートやCPUなどのデバイスのパフォーマンスと、APIやCDNへのレスポンスタイムなどを見ることができます。HeadSpin上でのSessionUI(デモ環境)Sessionに記録しているタイミングで動画も記録されているため、具体的にどの部分・操作でそのパフォーマンスが出ているかは直感的に見つけることができます。これらのデータをHeadSpin側で提供されているDBに格納することができます。このDBをGrafanaやLookerなどのBIツールと連携することによって、継続的にモニタリングすることができます。Grafanaを使ったダッシュボード感想ここからは実際のトライアルを元にした私の感想です。SDKを入れる必要がない安心感HeadSpinを使うに当たっては、アプリケーションに別途SDKなどを入れる必要はありません。SDKを入れたことによる思わぬ不具合やパフォーマンス低下などを心配する必要がないのは、導入するに当たってハードルが低く感じました。STFがありますが、iOS版はありませんでした。HeadSpinではiOSのデバイスファームとしてだけではなく、テスト実行環境・パフォーマンスツールまでノンストップで提供されています。テスト実行環境をある程度任せられる先ほども書いた通り、Appiumなどのテスト実行環境などをHeadSpinに任せることができるため、自分たちがメンテナンスしないといけない部分はかなり少ないと感じました。デバイスを操作するためのadb・ideviceコマンドもHeadSpinのAPI経由で呼び出すことができるため、柔軟性が高い印象を受けました。何をモニタリングし、どのエンジニアにフィードバックするかこれは私たちの中でも悩んだ部分でした。Android)向けにフィードバックする想定でした。HeadSpinでは、外側からネットワークなども含めたパフォーマンスを測るため、モバイルアプリケーションのコードレベルでフィードバックできるものではありません。モバイルアプリケーションのみのフィードバックをしたい場合には、一工夫したり別のツールと組み合わせる必要が出て来るかと思います。逆に言うと、HeadSpinではお客さまが実際に使う状況で、APIやCDNへのレスポンスタイムを含めたトータルのパフォーマンスを計測することができます。これによって、モバイルエンジニアだけでなくバックエンドエンジニア・SREエンジニアなどに価値ある情報・フィードバックを提供できるかもしれません。まとめメルカリだと、特にJP版はサービスとしての規模も大きくなり、様々なお客さまが快適に使ってもらう重要性は高くなっていると考えています。その中で、実際にお客さまが使う状況でアプリケーションがどのようなパフォーマンスへの影響が出ているのかは重要な情報です。効果が出るものではありませんが、HeadSpinで得られた情報・フィードバックを元にお客さま体験を向上させるためのアクションが取れていければと思います。