今回はアプリのエラー検知ツール「SmartBeat」の開発やゲームに限らずさまざまなジャンルのアプリクラッシュ調査レポートを発表しているFROSK株式会社の仲井さんにインタビュー!
なぜゲームの不具合が起きるのか、起きないためにどういうことが行われているのかなど、現場での実感や専門的な知識を交えつつわかりやすく説明していただきました。
SmartBeat プロダクトマネージャー
仲井 裕紀さん
エラー検知や原因の解析をサポートするサービス「SmartBeat」のプロダクトマネージャー。SmartBeatの1日あたりのエラー検出数は3000万件以上。現在2500以上のアプリに入っていて、アクティブユーザー数は2億人を超える。
10のアプリジャンルに分けてレポートしたアプリクラッシュ調査レポート2019年上半期はダウンロードで見ることが可能。
HP:SmartBeat
目次
デベロッパー向けにエラー検知や原因の解析をサポート
仲井と申します。
現在はデベロッパー向けにエラー検知や原因の解析をサポートするサービス「SmartBeat」のプロダクトマネージャーをやっております。
顧客のデベロッパーにどういう課題があるかを聞いたり、SmartBeatの開発優先順位であるとか、今後のロードマップを考えたりということをやっています。
会社ができたのは2012年で、B2D(ビジネス トゥ デベロッパーズ)をコンセプトにアプリの開発者支援ツールを提供してきた会社です。
今は2014年から始まったSmartBeatをメインに行っています。
アプリクラッシュはどうやって起こるか
アプリクラッシュを含む不具合には色々ありまして、大きく分けるとクラッシュして強制終了だったり、UIがうまく表示されない、アプリが固まる、画面の表示が仕様と異なるというだいたいこの4つですね。
なのでアプリを改善するには、こういう不具合のすべてを減らしていくのが重要かなと思っています。
この中でも詳しく聞くと色々あるんでしょうね。
相当ありますね。
端末のメモリの使いすぎで落ちることもありますし、中の実装ロジックに誤りがあってとか数え切れないくらい原因となるものはあります。
OSで言うと単純にOS自体の不具合の場合もありますが、OSの機能(API)の使い方が間違ってるとクラッシュすることもあります。
使い方とかあるんですね。
それはリリース前のテスト段階だと分かりづらかったりするんですか?
そうですね。
例えばいろんなシチュエーションの重ね合わせだったりするんですよ。
ある条件の場合のみ機能を利用すると発生するとか、特定のローディング時だけ発生するとか色々あるので。
その重ね合わせでいままで見つからなかったものが発生するとクラッシュが起きます。
そもそもゲーム会社さんって無茶苦茶テストされてるんですよ。
外部のテスト会社さんなどに協力してもらう場合もありますし、テストを、3ヶ月とか半年とか実施されます。
それでも見つからないクラッシュもあります。
それだけテストしてても起こるんですね。
端末とOSの組み合わせは2万4000パターン
みなさん、テストはかなりガッツリやられてます。
それでもクラッシュが発生してしまうのは、1つとして端末数が原因なんです。
端末数ですか。
Android端末の種類っていっぱいあるんですけど、利用端末は、上位20端末で、やっと利用シェアが1/3くらいなんですよ。
そのようにたくさんの種類の端末が使われているので、事前にテストをやり切ろうと思ったら20端末でさえ大変なんですが、さらに品質を上げるために、シェアの80%くらいやりたい場合は、200端末くらいテストする必要があるんです。
さらにOSのバージョンと組み合わせると、古めのデータで2015年の場合なんですけど、それでも2万4000パターンあるんですよw
なのですべての環境でやり切るのは不可能かなと思います。
また、iOSでいうと最新バージョンが出て10日前後でシェアの50%がOSをアップロードするんですよ。
それくらいです。
なので10日間隔でiOSユーザーさんの半分の利用環境が変わってしまうため、スピードが早すぎてテストが間に合わないんです。
そうなんです。
そういうこともあって、テストが間に合わないねって話になってます。
それはどうしようもないですね。
それを聞くと僕みたいなユーザー側でも少し可愛そうだなって感じました。
けっこうアップデートされますね。
あとiOSって自動アップデートになってる方が多いので。
なるほど。
自分は自動アップデートはOFFにしていますけど、そのままの方も多いんでしょうね。
端末の環境って想像以上に複雑なんですね。
アプリクラッシュの原因は毎回違う
アプリによっても違いますし、単純なプログラムや実装のミスからたくさんあります。
正直まちまちですね。
割合でいうと実装ミスとインフラ環境とかが原因の場合ってどっちが多いですか?
運営していく中で影響の大きい不具合って、やっぱり実装ミスなんですよ。
実装ミスは全員に対して影響がある場合が多いので。
発生数で言うと、特定の端末依存など一部の環境に発生するような影響が小さいものに比べると、実装ミスのほうが影響は大きいですよね。
そうなりますよね。
じゃあ大規模なエラーって実装ミスなんですね。
うーん・・ソースコードが間違っててということもありますけど、めちゃくちゃ重いファイルがたまたま入っててという場合もありえますね。
それも大きな意味で言うと実装ミスになるんですけど。
そういう場合もあるんですね。
めちゃくちゃ画質いいものをそのまま使っちゃったとか?
それは原因としてあんまり考えたことなかったですね。
そういうファイルサイズが大きいものが出てくる場面になったら、メモリの使いすぎになっちゃって落ちちゃうとか。
想定したユーザーの規模が当たらない場合も
もちろんそれが理由の場合もあります。
一般論にはなっちゃいますが、最初どれくらいの規模になるかは皆さん想定されてると思うんですけど、それが当たらない場合もありますね。
話題作ほど落ちるのでそういうことなのかなとは思ってたんですけど。
話題の規模が想定以上の場合は、サーバー側で処理しきれないために、アプリ上にエラーとして検出されることもあります。
ありますね。
ただ、それ以外が原因の場合もたくさんあります。
障害長期化の原因はサーバー?
障害が長期化する場合ってユーザーの負荷が大きすぎて、それに対応するためにサーバーとかを強化しないといけないから時間がかかるってイメージなんですけど。
ゲームで障害が起こったときに、「またサーバーかよ」とかって決めつけて言ってるのは当たってないかもしれないんですね?
当たってないこともあるでしょうね。
ただサーバーの増強ができない場合もあって、ボトルネックが別のロジックにあったりすると対策しないといけなかったりして。
アプリの作りによってやどういうエラーかで変わるのでケース・バイ・ケースで難しいですけど・・・。
例えばアプリの中身をちょっと治すだけで良かったら、すぐアップデートするだけで治ります。
でも、アプリの不具合だったとしてもサーバーまで影響範囲が広がる場合、データを大きく入れ替えなきゃ動かないとかも、ありうるんですよね。
そうなるとユーザーが起動できない状態、つまりメンテナンスの表示にして、修正する必要がある場合もあります。
そうです。
データやロジックを入れ替えるのでメンテナンス時間がすごく長くなったりもします。
テストも品質にも相当取り組んでいる
テストを相当するっていうのはあると思うんですけど。
開発期間が遅延して、押されて押されて圧縮するのはテスト部分っていうのはあるあるだと思います。
また、安定や品質をどこまで大事にするかっていうのは、開発会社さんによっても違います。
すごいところはメモリをどこまで使うとか設計の段階で決めてたりするんです。
するとすごく安定したアプリになったりとか。
そこは差が出ると思いますね。
なるほど。
トラフィックに対してどれだけサーバーにしっかりお金をかけてるとかだけじゃないんですね。
※トラフィック・・・インターネットやLANなどのコンピューターなどの通信回線において、一定時間内にネットワーク上で転送されるデータ量のこと
デベロッパーさんって、無茶苦茶頑張られてるんですよ。
あるアプリでクラッシュ率を下げようって話があったんですけど、そのクラッシュ率を非常によい(低い)値まで下げられて、0.36%まで下げられたんです。
つまり、1万人のうち36人にしか影響ない状態です。
そこまでやると、Storeのレビュー評価が上がったんです。
落ちるなどの評価をレビューに書かれると★1が多いので、一気に評価が下がってくるんですよ。
だからデベロッパーさんって品質はすごく大事にされてますね。
あとレビューに落ちるって書かれるアプリとクラッシュ率の相関を調査してわかったことがあって、約1%まで下げると落ちるって書かれることが少なくなるんです。
なので1%を目指すと書かれなくなりますよってことは、よくデベロッパーの方にお伝えしていますね。
落ちづらい端末はiPhoneじゃない?
アプリが落ちづらい端末ってあるんですか?
iPhoneって端末の種類が少ないので落ちづらいイメージがあるんですけど。
確かに一般的にはiPhoneの方が落ちづらいって言われてるんですよ。
でも実は弊社のSmartBeatが入ってるアプリのクラッシュ率を取ると、あんまり変わらないんです。
うそとは言わないですけど、SmartBeat利用アプリで見たら変わらなかったですね。
あとiPhoneって最近Androidの最新端末と比べたらメモリが少なくなってきてるんです。
iPhone11で4GBで、これがPixel 4だと6GBだったかな。
だからメモリで言うとそんなに多いほうじゃなくなってきたんです。
そういうのもあってiPhoneが落ちにくいっていうのは言えなくなってきてますね。
端末が進化してもアプリクラッシュは減らない
たぶん変わってないと思います。
それはゲームを見ていただくとわかると思うんですが、どんどんリッチになっていくじゃないですか。
もうずっとパフォーマンスの限界に挑戦し続けてるんですよねw
真のエラーが検知できるのが「SmartBeat」
次はSmartBeatについて聞かせてください。
SmartBeatはエラー検知や原因の解析をしてアプリ品質を向上させることでレビューを改善するためのサービスです。
導入事例で言いますと、現在2500以上のアプリに入っていて、アクティブユーザー数は2億人以上です。
そして1日あたりのエラー検出数は3000万件を超えています。
そうなんです。
よく「不具合対策ちゃんとしていますか?」って言うんですけど、例えばGoogleのデベロッパーコンソールっていう、アプリをリリースしてる人は誰でも見られるツールがあって、そこでも一応エラーって取れるんです。
でもそのエラーの数よりSmartBeatで検出される数は約80倍多いんです。
なので「ちゃんとしていますか?」って言うんですけど。
実は皆さん本当のエラーの数が、相当わかってない可能性がありますよっていう。
それがわかるのがSmartBeatというツールです。
・リアルタイム検知で圧倒的な検知数。
・豊富なエラー情報で、修正工数が大幅削減。
・画面キャプチャでエラーが起きた画面がわかる。
この3つですね。
なのでまずは本当のエラー数見てみませんかっていう話をしていますね。
なんでこんなに違うかと言うと、普通のツールってエラーが起きた後、そのアプリを再起動した時にエラーが起きたことを検知してるんですよ。
でもエラーが起きて動かなくなったらもう2度と使わないことってありますよね。
だから本当の数って取れない仕組みなんです。
SmartBeatはクラッシュした瞬間に取るので、ちゃんと取れるんです。
しかもソースコードレベルで何行目に問題があるかまでわかるんです。
※ログ・・・アプリの動作状況を記録したデータ。
いえ、クラッシュしたタイミングでログは出るんですよ。
でもこのアプリがクラッシュして終了するまでの瞬間ってぐちゃぐちゃなので、ログを取るのが難しいんです。
なので皆さん再起動してきれいになったタイミングで保存されているログを取るんですね。
なるほど。
それだとその後使わなかった人の分は取れないですね。
ですよね。
あと昔Androidで問題が起こった時って、報告を「はい」「いいえ」で選択して「はい」を選んだときしかとばなかったんですよ。
そうなんです。
そういう差もあって、80倍差が出ましたよと。
非エンジニアの人にもわかりやすいツール
個人情報についてですよね。
もちろん、ユーザーの方に、取得の同意を取った上でしか利用しないようにお願いしてますし、スマホ画面上に表示された通知などは撮らず、そのアプリの画面しか残らないようになってます。
はい、導入しているアプリ内で表示している画面だけが対象なので、スマホの画面ってわけじゃないんです。
そのため、もちろん通知の表示内容は、取得しないですし、個人情報入力画面のときはその画面を取得対象から外せるようにできるので、アプリの画面のみを選んで画面キャプチャできるようになってます。
ありがとうございます。
やっぱり画像ってわかりやすいじゃないですか。
詳しい人じゃないとスタックトレースとかコードがとか言われてもわからないと思うんですけど、画像があればここで落ちましたとか言えるので。
だからSmartBeatは非エンジニアの人にもわかりやすいツールかなと思ってます。
※スタックトレース・・・プログラムが不具合を出して止まったときの実行記録。
開発段階から導入をおすすめしています
いえ、こちらからはもっと前の開発段階からをおすすめしています。
もちろんテスト段階からでもいいですし、リリース後からという方もいらっしゃいます。
でも開発段階から入れておくとたまたま落ちたのも全部拾うので。
そうです。
リリースの1年前から入れてもらってるアプリは、リリースされて今何百万ダウンロードとかされてます。
調査する時間が圧倒的に少なくなるので、早めに入れるのをおすすめしています。
課題はメモリリークの原因究明
課題は今対応してるところなんですけど、メモリの使いすぎで端末によって落とされるメモリリークという現象がありまして。
今発生数は取得できるように対応したんですけど、原因を究明するのは難しい状態です。
それを解明できるように改善をしていってますね。
あとメモリリーク以外にも落ちる動作っていっぱいあるので、それを全部解析できるようにっていうのも今後の課題かなと思います。
デベロッパーさんたちがすごく努力して作ったアプリをサポートできるように
やっぱりユーザーさんからすると、1度のクラッシュでゲームへの興味ってどんどんうせていくと思うんですよ。
それはできるだけ減らしていきたいなと思ってまして。
デベロッパーさんたちがすごく努力して作ったアプリなので、それをしっかり楽しんでもらうために、なるべくサポートできるように機能とか強化していきたいなと思っています。
今後もより楽しく詳しく、そしてエラーが少なくなるようなツールになれるように頑張っていきたいと思います。
ほんと生半可な知識で色々文句言っちゃてたなと思いました。
本日はありがとうございました!
FROSK株式会社
SmartBeatやアプリクラッシュ調査レポートを提供。
10のアプリジャンルに分けてレポートしたアプリクラッシュ調査レポート2019年上半期はダウンロードで見ることが可能。
SmartBeat プロダクトマネージャー
仲井 裕紀さん
エラー検知や原因の解析をサポートするサービス「SmartBeat」のプロダクトマネージャー。SmartBeatの1日あたりのエラー検出数は3,000万件以上。現在2,500以上のアプリに入っていて、アクティブユーザー数は2億人を超える。
HP:SmartBeat