インドネシアの特殊なブラウザ事情(Opera Mini,UC Browser Mini)


僕のチームではインドネシア向けのWebサービスを開発しています。
開発を進める中でひときわ大変なのが、日本とは全く異なるブラウザ事情。

日本ではIEにヘイトが集中しますが、インドネシアでは別のブラウザ対応に苦労します。
GoogleAnalyticsで取得できたブラウザ別アクセス比率を見てみましょう。

![ブラウザごとのアクセス比率](https://qiita-image-store.s3.amazonaws.com/0/8486/d7e664a9-c890-d323-1ae2-cac58b19d566.png "c00bfed1-f1c7-e64b-5f35-ee855809a2bb.png")


PC/SP両方とも含んだ数字なのですが、特徴的なのは2位と3位。
日本ではあまり見ないブラウザが並んでいますね。UC BrowserとOpera Miniです。

この2つのブラウザは一般的なブラウザとサーバー間での通信ではなく
間に自社のプロキシサーバーを経由する特殊な方法でwebサイトの閲覧を実現しています。

## プロキシ経由ブラウザ
これらのアプリはhttpレスポンスを自社のプロキシを経由することで
プロキシサーバー内で独自の規格に変換しデータ量の圧縮を実現しています。

例えば一般的なブラウザは基本的にクライアントとサーバー間でやりとりをしますが

![一般的なブラウザ](https://qiita-image-store.s3.amazonaws.com/0/8486/91c36c3f-7512-568d-7632-bd511ac6d68e.png "network  (1).png")


先ほど出たブラウザはプロキシを介してサーバーとやりとりをします。

![プロキシ型ブラウザ](https://qiita-image-store.s3.amazonaws.com/0/8486/a9f0302e-f672-3cf7-afb6-a4a58afa4fce.png "network .png")

### Opera Mini
スマートフォン用 Opera Mini のダウンロード - Opera
http://www.opera.com/ja/mobile/mini


例えばOpera Miniはこの機能を利用することでhtmlなどのレスポンスをOBMLという形式に変換し
最大90%の通信量削減を実現していると公言しています。

> データ通信量の節約 - モバイルデータの使用量を最大 90% までも削減できます。
https://itunes.apple.com/jp/app/opera-mini-web-burauza/id363729560?mt=8

OBMLについてはこちらの記事が参考になります。
> Dev.Opera — Opera Binary Markup Language
> https://dev.opera.com/articles/opera-binary-markup-language/

インドネシアなどの地域で、比較的インフラが整っていないがゆえに
通信速度が遅い場合や、ユーザーが利用する端末のスペックが低い場合には
これらの施策が有効となる場面が多いのでしょう。

日本でもMVNOサービスのユーザー向けに、通信量節約のための手法として
Opera Miniの利用を推奨しているブログなどもよく見かけます。

しかしメリットばかりあるわけでもなく、JavaScriptの動作が著しく制限されており
アニメーションやAjaxを多用するサイトでは機能が使えなくなってしまうことがあります。
この辺りの話は以前Advent Calenderに書いたので詳しくはこちらの記事を参考に。

> シェアの少ないJS殺しブラウザ対応の話 - Qiita
> http://qiita.com/takanamito/items/c412556856c7d027a747

### UC Browser Mini
Google Analytics上ではUC Browserと一括りにされているのですが
Google Playのストア上には

- [UC Browser](https://play.google.com/store/apps/details?id=com.UCMobile.intl&hl=ja)
- [UC Browser HD](https://play.google.com/store/apps/details?id=com.uc.browser.hd&hl=ja)
- [UC Browser Mini](https://play.google.com/store/apps/details?id=com.uc.browser.en&hl=ja)

が配信されています。
各アプリでは「Speed Mode」という設定をONにすることで
今回言及しているプロキシを使った通信を利用できます。

ただしAndroidとiOS版でもこのSpeed Modeの挙動に違いがあるらしく
例えばTwitterにアクセスしてみると、Android版ではあまりJSでインターフェイスを動かさないページが表示されましたが
iOSではSafariなどのモダンブラウザでアクセスした時と同じページが表示されます。

UC Browser系のブラウザは日本国内では極端にシェアが低く
僕も今の事業に関わって初めて名前を聞いたブラウザです。
ですが僕たちの環境で計測する限り、1年ほどで10%以上シェアを伸ばしています。

UC Browserがやっかいなのは
Google Analytics上ではぱっと見「プロキシを利用するSpeed Modeかどうか」が判定できないことです。

なんとか判定する方法がないか調査した結果
UC Browserを開発しているUC WEBの開発者向けサイトで公式ドキュメントを発見しました。
※サイトに動線が設置されておらずドキュメントにたどり着くのにとても苦労しました :innocent: 
http://www.ucweb.com/English/UCMobileBusiness/developer.html
http://www.ucweb.com/download/UCBrowser_User_Agent_en.pdf

ドキュメントの7ページ目に以下の様な記載があります。

> 5.1 How do websites judge the on-off state of the UC Browser speed mode
through UA?
You can judge the whether speed mod is on or off through the UCWEB field of the UA.
If speed mode is on, UA will contain UCWEB, otherwise it will not contains UCWEB.
For example:

UserAgentに **UCWEB** という文字列を含んでいればSpeed Modeだと判定できるようです。

実際に僕のチームでは
スマートフォン向けの施策でTwitterのタイムラインのようなInfinite Scrollを実装する際に
SafariやChromeなどの一般的なブラウザでアクセスが来た場合には新UIを提供し
Opera MiniやUC Browser Miniなどのプロキシ経由型のブラウザでアクセスが来た際にはJSを使わない旧UIを提供するといった
UAで判定してレスポンスの内容を切り分ける対応を行っていました。

## さいごに
これらのブラウザは非常に独特の挙動をするため
UAによって返すコンテンツをほぼすべて切り替える。などの対応が求められ
日本国内におけるブラウザ対応とはまた違った対応を求められることも多いです。

また現地のユーザーのリテラシーにも日本国内とは差があるようで
こちらでは当たり前のように使っているインターフェイスをよかれと思って提供したものの
明らかにサイト内でのユーザーの動きが鈍化しPVが落ちてしまう。みたいな改悪を発生させてしまうこともありました。

国によって全く異なるインターネット事情
それぞれが抱える闇はありますが、冷静に対処して良い体験をユーザーに提供していきたいものです。