Eight 事業部の辰濱です。
私は現在、Eight 事業部の Global Team にて Eight のアプリの海外展開に携わっています。
先日開催された iOSDC Japan 2018 にて LT が採択され、Eight の海外展開の話を紹介しました。
当日の発表資料がこちらです。
www.slideshare.net(※レギュラーセッションではなく LT だったので、LT の温度感に合わせた資料になっています)
本記事は iOSDC Japan 2018 では紹介しきれなかった内容や、Android での海外展開対応も合わせて紹介します。
トーク公募に応募した背景
Eight は 2017 年秋に海外向け(主にインドがターゲット)にアプリをリリースしました。
日本ではある程度安定して動作しているので、英訳をあてて海外のストアへもリリースしました。
しかしながら、海外展開はそんなに甘くありませんでした……。
同じバイナリにも関わらず、
- アプリのダウンロードが進まない
- アプリがなかなか起動しない
- 名刺のアップロードが使い物にならない
- クラッシュや通信エラーの表示が多発する
といった状態です。
報告通りの再現手順を行っても、日本国内ではなかなか再現できません。
これらの問題の解決のために、実際にインドに赴いて調査を行い、チーム一丸となって改善を積み重ねてきました。
そして、現在では海外でもようやく安定して動作するようになっています。
日本ではなかなか気づくことができないグローバル展開の知見を共有したく、トーク募集に応募した次第です。
インドのインターネット環境について
日本とは驚くぐらい異なっています。
価格面
- 2017年中頃までは、通信単価は高かった
(無料アプリでも 「100MB もあれば実質有料アプリ」と言われた)
- 2017年末頃から、通信単価がぐっと下がった
(データ定額プランが月額1,000円以下)
- 2018年には数百円で 40GB / 月のデータ通信&電話使い放題というプランも出てきた
(サービス先行でインフラが追いついていない)
インフラ面
- 電波の弱いアンテナを数立てて、通信エリアを確保している
- 建物の中に入ると電波が弱くなる
- 車での移動中は通信が安定しない
- インターネット人口が急増していて、通信回線の取り合いになっている
- しばしば接続が切れていることがある
- 数分の停電も日常茶飯事
速度面
- 変動が激しい
- オンラインビデオ通話ができる場合もある
- 数 kbps しか出ない場合もある
こんな環境では、バイナリサイズの大きなアプリはダウンロードやアップデートさえ障壁となります。
(100MB もあるアプリでは、ダウンロード中に 20% の人が離脱するとのデータがあります)
ちょっと前までは、Android アプリの自動アップデートはデフォルトで off になっているとのことでした。
(モバイルデータ通信ではなく、Wi-Fi 環境下でのみアップデートすることが多いそう)
そのため、アプリの最新版が浸透するのにも思った以上に時間が掛かります。
同じバイナリでも、インターネット環境が違うと、ここまで動作に違いが出るのか…と痛感しました。
現地調査
現地の端末・SIM でのデバッグだけでなく、現地でよく使われているアプリを現地の SIM で使って確認を行いました。
私は 2018年3月に2週間、7月に2週間インドに赴きました。
現地のスマホショップの風景。(建物の 1F だけが異色です)
インドのスマホ市場は Android の独占状態にあります。
iPhone は高級品で、一部のビジネスマンしか持っていません。
(インドでの移動では定番の Uber に何十回と乗っても、一度たりとも iPhone を使っているドライバーには出会いませんでした。)
そして、町中には OPPO, Vivo, Samsung などのスマホ端末のお店が多数あります。
日本と違って店舗で端末だけを購入することが容易です。
現地でよく使われているアプリには、Facebook や Instagram など画像を投稿・閲覧するアプリも含まれていましたが、現地ではさほどストレスなく画像の投稿や閲覧が行えました。
なぜなのでしょうか・・・
よくよく観察してみると次のことがわかってきました。
低速通信環境を配慮したアプリの UX
ポイントは
- 通信が完了する前に画面遷移を行う
- 通信が完了していなくても、ユーザ操作を画面に反映する
- 通信に失敗しても自動でリトライを行う
- 画像は段階的表示を行う
です。
通信が完了する前に画面遷移を行う
Twitter や Facebook などでは、投稿を送信する操作を行った直後に画面遷移を行っていました。
写真を添付していない、たった数十文字の Twitter への投稿でも同様です。
通信が完了していなくても、ユーザ操作を反映する
Twitter の投稿や LINE のメッセージでは、投稿が完了していなくても(そして、オフラインで送信操作をしても)画面上では 投稿が完了したかのように 見せていました。
通信に失敗しても自動でリトライを行う
一度送信操作を行ったユーザに対して「通信に失敗しました。再送信しますか?」というコミュニケーションは(ほぼ)行われていませんでした。
ユーザに再送信させることなく、送信できる状況になったら自動的に再送信が行われるのです。
機内モードで投稿して、再度オンラインになった時に自動で再送信されるケースがこれに相当します。
画像は段階的表示を行う
Instagram では画像の段階的表示が行われていました。
真っ白な画面や読み込み中の UI が長時間続くよりも、圧倒的に良い体験です。
使ったツール
様々なツールを使って、分析や低速環境の再現&体験確認を行いました。
New Relic Mobile
- https://newrelic.com/resource/mobile-monitoring-jp
- 多角的なパフォーマンス分析が容易に行える
- 30日間の無料トライアルがある
Network Link Conditioner
- https://developer.apple.com/download/more/
- Mac の通信速度をコントロールできる
- インターネット共有をしてスマホを接続すれば、低速回線を再現できる
Charles
- https://www.charlesproxy.com/
- プロキシをたてて通信内容をキャプチャできる
- レスポンスの書き換えも可能
Eight Global Team 内では、サーバサイドエンジニアから「アプリの挙動が怪しい」という報告の際に Charls を使って通信内容を見た上で報告してくれるケースも出てきました。
アプリエンジニアの調査工数削減にも寄与しているツールです。
Stetho(Android のみ)
-
Chrome Developer Tools に通信内容を表示できる
- タイムライン表示がされるので、並列度もわかりやすい
低速 SIM
- https://rokemoba.com/
- 回線速度が常に低速な(200kbps)のデータ通信 SIM
- 298円/月というお手頃価格
-
常日頃から、低速回線で他アプリの挙動を体験することができます!
(インドから帰ってきてからも、この SIM で色んな気付きがありました!)
Eight での海外展開対応
技術的な内容の紹介です。
(対応しきれていない内容もありますが…紹介のため記しておきます。)
アプリサイズの削減(Android 版)
- Product Flavor やモジュール分割によって、海外に不要な機能を apk に含めないようにしてサイズを削減
- アプリ内画像の最適化や WebP 化(Android Studio の WebP Converter が便利)
- App Bundle 形式 によるアップロード(予定)
- Dynamic Delivery にも対応していきたい
アプリサイズの削減(iOS 版)
- アプリ内画像の最適化
- App Thinning に対応(予定)
画像の送信サイズの削減
- 送信画像形式の変更( jpeg → webp, base64 → multipart)
- サービス品質に影響がない画像サイズ・圧縮率を見極めて設定
- iOS 版では iOS-WebP を使って、WebP 形式に変換
画像の受信サイズの削減
- 表示矩形に必要十分なサイズの画像を取得・表示するようにした
- 画像キャッシュが使われていなかった箇所へキャッシュを適用
- Android 版では、Glide を使えば段階的表示も容易
通信を待たない UX に & 通信に失敗しても自動でリトライ(Android)
- Android 海外版では、名刺画像送信操作直後に即画面遷移を行い、未送信や送信中の名刺データも一覧に表示するようにしています。
- そして、通信に失敗しても自動でリトライする仕組みを導入しています。
- 自動でリトライする仕組みは、Google I/O 2018 で発表されたばかりの WorkManager 使って実装しました。
- WorkManager では処理が並列で実行されるので、複数画像の並列送信も容易に対応可能です。
- iOS では SwiftQueue というライブラリが Android の WorkManager に相当しそうで、現在検証中です。
冒頭でも触れましたが、これらの改善によって大幅に海外でのアプリの体験が向上し、実際にユーザアクティビティも向上しています。
iOSDC Japan 2018 は、他にも海外展開のセッションや、海外展開に有益な通信方法のセッションもありました。
これらも視野に入れながら、これからも海外の厳しいインターネット環境や安価な端末でも快適なアプリの体験が得られるよう、改善を重ねていきます。