HTML5 conferenceのオフラインアプリケーションの話がすごく良かったのでまとめ
HTML5 conference 2013に参加してきました。
賑わいのある、大変楽しいイベントでした。
講演も、どれもこれも勉強になるものでしたが、
中でも @kyo_ago さんの オフラインWebアプリケーションの「選択肢」 という講演がすごく良かったのでまとめます。
プレゼン資料・動画は、下記で公開されていますので、合わせてご覧ください。
動画 (1:07:00 あたりから):
ルーム5B - HTML5 カンファレンス 2013 - YouTube
資料:
http://0-9.sakura.ne.jp/pub/html5conf201311/start.html
まとめ
スマホユーザーはオンラインとオフラインを意識するのが難しいので、
アプリケーション側でユーザーの状態を判断して、適切に処理してあげる事が大切
■変化するオンライン/オフライン事情
- PCのユーザー
- オンライン/オフラインを自らコントロールして使う
- スマホのユーザー
- オンライン/オフラインを意識したり、コントロールする事が難しい
■「Offline First」という考え方
- 下記の様な設計思想
- まず、オフラインで動作させる方向で検討する
- 次に、オフラインでの実現が難しいところだけ、オンラインでの実現方法を検討する
- モバイル環境で使いやすいアプリケーション設計ができる
■「オフラインで動作する事」の価値はさまざま
- オフラインで動作する事の価値は、アプリケーションの種類により異なる
- ソーシャル性の低いものなら、価値が高まる
- 逆に、ソーシャル性のあるものはオフラインにする価値はあまり無いのでは?
- 「対応されていない」≠「価値がない」に注意
- 多くのアプリケーションで対応されていなくても、価値のある事だってある
■オフラインで動作させる事の「検討」には、とても価値がある
- オフラインで動作させる事は、 「いかにキャッシュをうまく使うか」に関係がある
- 今作っているサービスに「オフライン機能を入れれないか」という検討をすだけでも、技術的に大変価値のある事
■「オフラインは機能の1つ」という考え方
- 全てがオフラインで動作する必要はない
■「つながらない事はエラーではない」という考え方
- 「つながらない」状況を、ユーザーが知れる/コントロールできる様にしてあげよう
■あなたのサービスに、いつオフライン機能を導入するか
- かならずしも 今 ではない
- ブラウザ上のアプリケーションがオフラインで動く事は、正直なところ、現在はそんなに求められていない
- ただし、通信エラーへの対応や適切にキャッシュを扱う事は、需要が高い
- 現時点では、こまかくキャッシュを制御するくらいがちょうどいいのかも
■キャッシュをどのタイミングで入れるか
- 「どこにキャッシュを入れるか」は、設計段階で考える
- 実装は、最後に行なう
- 最初に実装しちゃうと、動作確認などの妨げになる事が多い
■キャッシュの設計/実装のポイント
「なぜつながらないのか/どうすればつながるのか」を、ユーザーに教えてあげる
- なぜつながらないのか は、JSのAPIを利用すれば判定できるらしい
「オフラインで動作する事/している事」をユーザーに伝える
- ユーザーに、オフライン機能の存在/使い方を伝える
- どの様に伝えるのがいいかは、まだ結論はでていない
重複更新などに注意する
タイムアウトを短くして、ユーザーに頻繁に通知する?
- ユーザーが状況をコントロールできる様にするための方法の1つとしての提案
初期ダウンロードとリロードは、分けて考える
- 処理にかかる時間が全然違う
- 初期ダウンロードが遅すぎて、結局キャッシュしない方が早いなどは、よくある話
初期表示に必要なデータのダウンロードと、キャッシュのダウンロードは分けて実装する
- キャッシュのダウンロードは、ユーザーががんばっているが、機能が暇な時に行なう
- ログインページや、アカウントの入力ページなどが狙い目
通信の回数を減らす
- データを一括で読み込む
- 部分的なキャッシュなどは行なわない?(すみません、ここ記憶があやふや)
appCache はサイズに注意
- appCache は、全てのデータをダウンロードし終わらないと使えないので注意
- キャッシュが大きすぎると、ダウンロードが終わる前に画面遷移される → 次のページでもういっかいダウンロードする → ダウンロードが終わる前に(ry という感じで、いつまでたっても使われないので注意
セキュリティに気をつける
- 一度攻撃を受けると、キャッシュが続いてる間づっと攻撃が続いてしまう可能性がある
- firefox などのブラウザが、何かをダウンロードする時にユーザーに許可を求めるのは、この理由から
- ユーザー情報がキャッシュされているかもしれない
- 例えば、ツイッターの投稿に失敗 → 投稿がローカルにキャッシュされている → 他の人が端末を使う時、公開前の投稿が見えちゃう とか
以上です。
新しい知識を仕入れる系講演も面白いですが、
上記の様な、自分のサービスを見直すきっかけになる系講演もいいですね。