オフラインWeb開発

自己紹介

最近注目される
「Offline Web applications」

「Offline Web applications」
とは

厳密には

whatwg「Offline Web applications」
で定義されたAPI等

ただ、今回は

「オフラインで動作するブラウザアプリケーション」として使います

(文字的には間違ってない。。。!)

「オフラインWebアプリケーション」の歴史

初期

「オフラインFlashゲーム」

(従量課金回線や時間制定額回線向け)

しかし

常時接続が一般化し、ブラウザ上のオフライン動作の需要は減少

(逆にネイティブアプリケーションすらオンライン動作を要求)

そして

「スマホの普及」

PCとモバイルに見る「常時接続」の差

「回線の安定性」

PC

モバイル

モバイル環境では回線状況によらず動作することが求められる

<閑話休題>

「Offline First」

Offline First – A better HTML5 User Experience » Joe Lambert

設計思想

「まず、オフラインで動作させられないか検討する」

出来ない場合、「段階的にオンライン要素を取り入れていく」

結果

「モバイル環境で使いやすいアプリが出来る」

</閑話休題>

選択肢

「オフラインWebアプリケーション」に価値はあるか?

「オフラインWebアプリケーション」に価値はあるか?

ではどういった種類のアプリケーションで価値がでるか

「ソーシャル性の低いもの」

(一人で使うツール、ゲーム、投稿、読み物系)

「ソーシャル性の高さと、オフライン機能の価値は反比例する」

「ソーシャル性の高さと、オフライン機能の価値は反比例する」

「オフライン機能」

「オフラインは機能」

「オフライン動作」を機能の一種として考える

「ある機能の価値」は提供するものによって違う

「機能毎の相性」

(オフラインとソーシャル)

で、

ここまでは「アプリケーション自体」に対しての話

エンジニアのスキルから見た「オフラインWebアプリケーション」

エンジニアのスキルから見た

<閑話休題>

「オフラインWebアプリケーション」の種類

分類してみた

オフライン時の動作

  1. すべての機能を提供できる(サーバと通信しない)
  2. サーバ通信をキャッシュしてオンライン時に同期する
  3. 独自のオフライン表示を出す
  4. ブラウザのエラー画面を出す(オフライン機能を持たない)

「オフラインレベル」的に用語化すると扱いやすくなるか

</閑話休題>

選択肢

いつ始める?

ブラウザ上の「オフラインWebアプリケーション」の需要は今のところ高くない

ただ、「キャッシュの活用」や「通信エラー処理」という意味では重要

他に、ブラウザアプリケーションや、アプリ内WebViewにも重要

選択肢

どう実装するのか

「オフラインWebアプリケーションは難しい?」

「AppCacheの仕組みを使う」だけならそこまで難しくはない

「必要なオフラインレベルを見極めつつ、各種APIを組み合わせる」のは難しい

注意点

ポイントは3つ

1. 「回線が切れる前提のアプリケーション構築」

1. 「回線が切れる前提のアプリケーション構築」

2. 「安全な再接続」

2. 「安全な再接続」

3. 「ユーザによる送信状況のコントロール」

3. 「ユーザによる送信状況のコントロール」

選択肢

開発のどのタイミングで実装するか

「キャッシュをどうするか」は設計時に考える

ただし、実装はあとで行う

(早く実装すると開発の支障になりやすい)

できるだけキャッシュに依存しない実装が理想

部分毎に付け外しできる形でキャッシュを実装する

おすすめは「シングルページ構成で実装し、キャッシュは最後に実装する」

<閑話休題>

ネットワーク通信以外の「キャッシュ」

通信以外にもキャッシュはある

通信以外のキャッシュ

</閑話休題>

選択肢

どう実装するのか

キャッシュのパフォーマンスは「初期ロード時間」と「リロード時間」を分けて考える

初期ダウンロード時間を管理する

(「初期化に時間がかかりすぎてキャッシュがない方が早い」状態に注意)

初期表示に必要なダウンロードとキャッシュのダウンロードを分ける

「ログインページ」や「アカウント情報の入力ページ」でキャッシュを取得する

(「ユーザが頑張っている(=機械が暇)」時を考える)

「通信の数を減らす」===「データを一括で読み込む」===「部分キャッシュが困難」

リクエスト時にクライアント側で必要なデータを選択して取得できる形式が良い

AppCacheはすべてのデータをダウンロードしないと使えない

(データが多いといつまでもキャッシュが使われない可能性がある)

選択肢

どう使ってもらうか

「オフライン動作」も「機能」なので使ってもらわなくてはならない

(趣味で実装するなら使われなくてもいいけど)

「オフラインで動作する」ことをユーザにどう知らせるのか

(「オフラインで動作しますマーク」とかあればいいのか?)

「ブラウザ上でリッチな体験」はあっても、「オフラインで使う」ことは少なかった

ユーザにどう説明していくのか

現時点では「細かくキャッシュを制御する」くらいがいいか

選択肢

セキュリティをどう確保するか

「Firefoxがユーザに許可を求めるわけ」

「オフラインアプリに指摘されるセキュリティ上の問題」

「Application Cacheはまずいのか」

詳しくは非Webで

ご清聴ありがとうございました