Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

iOSDC Japan 2018 にて Eight の海外展開の話をしてきました。

f:id:tatsuhama:20180907200637j:plain

Eight 事業部の辰濱です。

私は現在、Eight 事業部の Global Team にて Eight のアプリの海外展開に携わっています。

先日開催された iOSDC Japan 2018 にて LT が採択され、Eight の海外展開の話を紹介しました。

 

当日の発表資料がこちらです。

www.slideshare.net(※レギュラーセッションではなく LT だったので、LT の温度感に合わせた資料になっています)

 

本記事は iOSDC Japan 2018 では紹介しきれなかった内容や、Android での海外展開対応も合わせて紹介します。

 


トーク公募に応募した背景

Eight は 2017 年秋に海外向け(主にインドがターゲット)にアプリをリリースしました。

jp.corp-sansan.com

日本ではある程度安定して動作しているので、英訳をあてて海外のストアへもリリースしました。

しかしながら、海外展開はそんなに甘くありませんでした……。

 

同じバイナリにも関わらず、

  • アプリのダウンロードが進まない
  • アプリがなかなか起動しない
  • 名刺のアップロードが使い物にならない
  • クラッシュや通信エラーの表示が多発する

といった状態です。

報告通りの再現手順を行っても、日本国内ではなかなか再現できません。

 

これらの問題の解決のために、実際にインドに赴いて調査を行い、チーム一丸となって改善を積み重ねてきました。
そして、現在では海外でもようやく安定して動作するようになっています。

日本ではなかなか気づくことができないグローバル展開の知見を共有したく、トーク募集に応募した次第です。

 

インドのインターネット環境について

日本とは驚くぐらい異なっています。

価格面

  • 2017年中頃までは、通信単価は高かった

 (無料アプリでも 「100MB もあれば実質有料アプリ」と言われた)

  •  2017年末頃から、通信単価がぐっと下がった

 (データ定額プランが月額1,000円以下)

  • 2018年には数百円で 40GB / 月のデータ通信&電話使い放題というプランも出てきた

 (サービス先行でインフラが追いついていない)

インフラ面

  • 電波の弱いアンテナを数立てて、通信エリアを確保している
  • 建物の中に入ると電波が弱くなる
  • 車での移動中は通信が安定しない
  • インターネット人口が急増していて、通信回線の取り合いになっている
  • しばしば接続が切れていることがある
  • 数分の停電も日常茶飯事

速度面

  • 変動が激しい
  • オンラインビデオ通話ができる場合もある
  • 数 kbps しか出ない場合もある

 

こんな環境では、バイナリサイズの大きなアプリはダウンロードやアップデートさえ障壁となります。

(100MB もあるアプリでは、ダウンロード中に 20% の人が離脱するとのデータがあります

ちょっと前までは、Android アプリの自動アップデートはデフォルトで off になっているとのことでした。
(モバイルデータ通信ではなく、Wi-Fi 環境下でのみアップデートすることが多いそう)

そのため、アプリの最新版が浸透するのにも思った以上に時間が掛かります。

 

同じバイナリでも、インターネット環境が違うと、ここまで動作に違いが出るのか…と痛感しました。

 

現地調査

現地の端末・SIM でのデバッグだけでなく、現地でよく使われているアプリを現地の SIM で使って確認を行いました。

私は 2018年3月に2週間、7月に2週間インドに赴きました。

f:id:tatsuhama:20180907212249j:plain

現地のスマホショップの風景。(建物の 1F だけが異色です)

 

インドのスマホ市場は Android の独占状態にあります。

iPhone は高級品で、一部のビジネスマンしか持っていません。

(インドでの移動では定番の Uber に何十回と乗っても、一度たりとも iPhone を使っているドライバーには出会いませんでした。)
そして、町中には OPPO, Vivo, Samsung などのスマホ端末のお店が多数あります。

日本と違って店舗で端末だけを購入することが容易です。

 

現地でよく使われているアプリには、Facebook や Instagram など画像を投稿・閲覧するアプリも含まれていましたが、現地ではさほどストレスなく画像の投稿や閲覧が行えました。

 

なぜなのでしょうか・・・

よくよく観察してみると次のことがわかってきました。

 

低速通信環境を配慮したアプリの UX

ポイントは

  • 通信が完了する前に画面遷移を行う
  • 通信が完了していなくても、ユーザ操作を画面に反映する
  • 通信に失敗しても自動でリトライを行う
  • 画像は段階的表示を行う

です。

 

通信が完了する前に画面遷移を行う

Twitter や Facebook などでは、投稿を送信する操作を行った直後に画面遷移を行っていました。
写真を添付していない、たった数十文字の Twitter への投稿でも同様です。

 

通信が完了していなくても、ユーザ操作を反映する

Twitter の投稿や LINE のメッセージでは、投稿が完了していなくても(そして、オフラインで送信操作をしても)画面上では 投稿が完了したかのように 見せていました。

 

f:id:tatsuhama:20180909212743p:plain

 

通信に失敗しても自動でリトライを行う

一度送信操作を行ったユーザに対して「通信に失敗しました。再送信しますか?」というコミュニケーションは(ほぼ)行われていませんでした。

ユーザに再送信させることなく、送信できる状況になったら自動的に再送信が行われるのです。

機内モードで投稿して、再度オンラインになった時に自動で再送信されるケースがこれに相当します。

f:id:tatsuhama:20180909212921p:plain

 

画像は段階的表示を行う

Instagram では画像の段階的表示が行われていました。

f:id:tatsuhama:20180907232244p:plain

真っ白な画面や読み込み中の UI が長時間続くよりも、圧倒的に良い体験です。

 

使ったツール

様々なツールを使って、分析や低速環境の再現&体験確認を行いました。

New Relic Mobile

Network Link Conditioner

Charles

Eight Global Team 内では、サーバサイドエンジニアから「アプリの挙動が怪しい」という報告の際に Charls を使って通信内容を見た上で報告してくれるケースも出てきました。

アプリエンジニアの調査工数削減にも寄与しているツールです。

Stetho(Android のみ)

  • http://facebook.github.io/stetho/

  • 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 海外版では、名刺画像送信操作直後に即画面遷移を行い、未送信や送信中の名刺データも一覧に表示するようにしています。
  • そして、通信に失敗しても自動でリトライする仕組みを導入しています。
  • f:id:tatsuhama:20180909203114p:plain

  • 自動でリトライする仕組みは、Google I/O 2018 で発表されたばかりの WorkManager 使って実装しました。
  • WorkManager では処理が並列で実行されるので、複数画像の並列送信も容易に対応可能です。
  • iOS では SwiftQueue というライブラリが Android の WorkManager に相当しそうで、現在検証中です。

 

冒頭でも触れましたが、これらの改善によって大幅に海外でのアプリの体験が向上し、実際にユーザアクティビティも向上しています。

iOSDC Japan 2018 は、他にも海外展開のセッションや、海外展開に有益な通信方法のセッションもありました。

これらも視野に入れながら、これからも海外の厳しいインターネット環境や安価な端末でも快適なアプリの体験が得られるよう、改善を重ねていきます。

© Sansan, Inc.