インドの低速な
ネットワーク環境の攻略法
About Me
• 辰濱健一(Kenichi Tatsuhama)
• 徳島県生まれ、徳島県神山町在住
• Sansan株式会社@神山ラボ
• リモートワークで Eight アプリの開発
• GDG Shikoku スタッフ(Google Developer Group)
• Contacts
• Twitter : @tatsuhama50
• Facebook : kenichi.tatsuhama
徳島県神山町
2
古民家再生や、サテ
ライトオフィスの進
出等で、地方創生の
事例になっている
Sansan 株式会社 神山ラボ
3
インドの低速な
ネットワーク環境の攻略方法
Agenda
5
• Eight のインド展開
• インドのネットワーク事情
• 分析
• 対応
Agenda
6
• Eight のインド展開
• インドのネットワーク事情
• 分析
• 対応
Eight のインド進出
7
https://jp.corp-sansan.com/news/2017/171122_8932.html https://jp.techcrunch.com/2017/11/22/sansan-eight-india/
8
日本でそれなりに動いているので、
英訳をあてたら大丈夫!
と思ってました。。。
Global Feedback
9
日本では再現しない問題ばかり…
• 起動のスプラッシュから切り替わらない
• 名刺画像送信が1分経っても終わらない
• 編集を確定しても全然画面が遷移しない
• 「通信エラー」のトーストがよく出る
etc…
10
これらの問題の
調査・解決のために…
Go India(3/12-24)
11
Go India(3/12-24)
12
↓エベレスト
ランチ約60円
Agenda
13
• Eight のインド展開
• インドのネットワーク事情
• 分析
• 対応
インドのネットワーク事情
14
https://www.sankeibiz.jp/macro/print/180406/mcb1804060500007-c.htm
インドのネットワーク事情
15
• 半径数百mの弱いアンテナを数立て
ている(らしい)
• 町中でも電波にムラあり
• 細い回線をみんなで取り合い
• 瞬断も多い
https://opensignal.com/networks/%E0%A4%AD%E0%A4%BE%E0%A4%B0%E0%A4%A4/jio-
%E0%A4%B5%E0%A5%8D%E0%A4%AF%E0%A4%BE%E0%A4%AA%E0%A5%8D%E0%A4%A4%E0%A4%BF
インドのネットワーク事情
16
• 3GB/Day が 約500円/月 の激安プラン( 1.6 JPY / Rs )
→ インターネット人口急増中
https://www.jio.com/
インドのネットワーク事情
17
• そんな環境では、重たいアプリはそもそもユーザに届かない
• 自動アップデート、YouTube 連続再生もデフォルトでオフ…
https://youtu.be/AdfKNgyT438?t=149
Agenda
19
• Eight のインド展開
• インドのネットワーク事情
• 分析
• 対応
分析
20
• 現地で受け入れられているアプリの UX
• New Relic Mobile による分析
• その他のツール
分析
21
• 現地で受け入れられているアプリの UX
• New Relic Mobile による分析
• その他のツール
現地で受け入れられているアプリの UX
22
• 現地で受け入れられているアプリ
• Facebook, Twitter, Instagram, WhatsApp(like LINE), Uber, …
• いずれも低速なネットワーク環境でも、さほど不自由ない
• 送信に時間が掛かる前提の設計
• 送信に失敗してもオンラインになったら自動的に再送
• 送信中コンテンツの表示
• 画像の段階的表示
Twitter の投稿 UX
23
• 投稿ボタンを押したら即画面遷移
(投稿完了まで待たない)
• 投稿が完了していない Tweet も表示
(網掛け)
• 上部に Progress 表示
↑Progress 表示
投稿中 Twieet
普通の Twieet
Facebook の投稿
24
• 投稿後、即画面遷移
• トップ画面で送信中であることが
わかる
• Notification に進捗表示
オンラインになったら自動再送
25
• オフラインでメッセージを送信しても
UI には送信中として反映する
• オンラインになったら自動で再送する
送信失敗とは出さずに
送信中の UI
オンラインになったら
自動で再送される
オンライン
になった
Instagram の読み込み UX
26
• 画像の読み込みが4段階ぐらいで行われている
動画
27
現地で受け入れられているアプリは、
低速ネットワーク環境を
ちゃんと考慮できていました。
分析
28
• 現地で受け入れられているアプリの UX
• New Relic Mobile による分析
• その他のツール
New Relic Mobile による分析
29
• https://newrelic.com/resource/mobile-monitoring-jp
• 30日間の無料トライアルもあり
New Relic Mobile による分析
30
• HttpRequest Sort
• Response time
• Requests per time
• Total Time
• Total size
New Relic Mobile による分析
31
• Geography Sort
• Response time
• Request per minute
• Total transfer size
• App launches
• Network failure late
New Relic Mobile による分析
32
• Interactions
• Memory
• CPU
• Network
• Threads
New Relic Mobile による分析
33
• Dashboard
34
New Relic Mobile を使うと
様々な角度からの
分析が可能になります。
分析
35
• 現地で受け入れられているアプリの UX
• New Relic Mobile による分析
• その他のツール
その他のツール
36
• Stetho
• Network Link Conditioner
• Charles
• 低速 SIM
その他のツール
37
• Stetho
• Network Link Conditioner
• Charles
• 低速 SIM
Stetho
38
• http://facebook.github.io/stetho/
• Android アプリの通信を Chrome Developer Tools で確認できる
操作したタイミングで
どんな通信が
行われているかわかる
(並列度も!)
その他のツール
39
• Stetho
• Network Link Conditioner
• Charles
• 低速 SIM
Network Link Conditioner
40
• https://developer.apple.com/download/more/
• Mac の通信速度をコントロールできる
• インターネット共有をすれば、スマホの通信速度を低速にできる
その他のツール
41
• Stetho
• Network Link Conditioner
• Charles
• 低速 SIM
Charles
42
• https://www.charlesproxy.com/
• プロキシをたてて通信内容をキャプチャできる
• レスポンスの書き換えも可能
その他のツール
43
• Stetho
• Network Link Conditioner
• Charles
• 低速 SIM
ロケットモバイル(神プラン)
44
• https://rokemoba.com/
↑本家アカウントからの Like
45
これらのツールを使って
改善点を洗い出しています
Agenda
46
• Eight のインド展開
• インドのネットワーク事情
• 分析
• 対応
対応
47
• アプリのバイナリサイズ削減
• 画像の送受信サイズを削減
• 直列通信を並列化する
• 通信結果を待たない UX に変更
• 通信に失敗しても、オンラインになったら自動リトライ
対応
48
• アプリのバイナリサイズ削減
• 画像の送受信サイズを削減
• 直列通信を並列化する
• 通信結果を待たない UX に変更
• 通信に失敗しても、オンラインになったら自動リトライ
アプリのバイナリサイズ削減
49
• 日本国内とバイナリを分けて機能整理&軽量化
• 海外で利用しない機能を決め、関連コード&リソースを含めないようにした
• 60MB → 20MB(66%減)
• アプリ内画像の Webp 化
• minSdk 19 なので、透過 png も webp 化
• 16MB → 12MB(23%減)
• App Bundle 形式での Google Play Store へのアップロード(予定)
• 12MB → 9MB(25%減)
App Bundle
50
• Google I/O 2018 で発表された、Google Play Store への新しいアップロー
ド形式
• その端末に必要なリソースのみをダウンロードできるようになる
対応
51
• アプリのバイナリサイズ削減
• 画像の送受信サイズを削減
• 直列通信を並列化する
• 通信結果を待たない UX に変更
• 通信に失敗しても、オンラインになったら自動リトライ
画像の送受信サイズを削減
52
• 送信
• 形式変更:Base64 → Multipart (25%減)
• Multipart → MessagePack にするかも?
• 長辺 max サイズを設定して、必要十分なサイズにリサイズ
• 受信
• 表示に適切な画像サイズ(サムネイル / 中繊細 / 高画質)でリクエスト
対応
53
• アプリのバイナリサイズ削減
• 画像の送受信サイズを削減
• 直列通信を並列化する
• 通信結果を待たない UX に変更
• 通信に失敗しても、オンラインになったら自動リトライ
直列通信を並列化する
54
• 直列通信
• A の取得(通信) → B の取得(通信) → C の取得(通信)→ 完了
• 並列化
• A, B, C の取得 ー(待ち合わせ)→ 完了
※もちろん、できる範囲に限る
flatMap を見ると
疑うようになった
対応
55
• アプリのバイナリサイズ削減
• 画像の送受信サイズを削減
• 直列通信を並列化する
• 通信結果を待たない UX に変更
• 通信に失敗しても、オンラインになったら自動リトライ
通信結果を待たない UX に変更
56
即画面遷移
&
送信中名刺も一覧に表示
撮影 送信
送信
完了
対応
57
• アプリのバイナリサイズ削減
• 画像の送受信サイズを削減
• 直列通信を並列化する
• 通信結果を待たない UX に変更
• 通信に失敗しても、オンラインになったら自動リトライ
通信に失敗しても自動リトライ
58
• 従来
• 送信完了まで Progress Dialog を表示して待つ
• 一度通信に失敗したら、ユーザによるリトライが必要
• 対応後
• 送信したら即画面遷移
• オフラインでも、オンラインになったら自動リトライ
• 成功するまでリトライさせる
• これらを WorkManager により実現
WorkManager
59
• Google I/O 2018 で発表されたバックグラウンド処理のためのライブラリ
• 実行条件を指定して、実行可能になったら実行される
• 例)オンライン、充電中、バッテリーが少ない
• リトライ設定も容易
• 並列で実行される
• 処理のチェーンや複数処理の結果の待ち合わせもできる
WorkManager 調査メモ
60
• WorkManager に enqueue した Work は何並列で実行されるのか?
https://qiita.com/tatsuhama/items/83af70d57a1e7b9c9a21
• WorkManager に enqueue されている Worker クラスをアプリのアップ
デート時にリネームした場合の挙動
https://qiita.com/tatsuhama/items/0b8d190665cd632f798f
61
インド展開に向けて
日々日々改善施策を行っています
62
まとめ
まとめ
63
インドの低速なネットワークの攻略法
まとめ
64
インドの低速なネットワークの攻略法
• アプリを軽く
→ Flavor による機能整理・画像のWebp 化・App Bundle 対応
まとめ
65
インドの低速なネットワークの攻略法
• アプリを軽く
→ Flavor による機能整理・画像のWebp 化・App Bundle 対応
• 通信結果を待たない UX に
→ 機内モードによる UX 確認を!
まとめ
66
インドの低速なネットワークの攻略法
• アプリを軽く
→ Flavor による機能整理・画像のWebp 化・App Bundle 対応
• 通信結果を待たない UX に
→ 機内モードによる UX 確認を!
• ツールを活用して分析&改善を
→ NewRelic Mobile, Stetho, Charles etc…
Fin.

インドの低速なネットワーク環境の攻略法