オープンソースで始めるオフラインアプリケーション開発入門

84
#html5biz #html5bizB オープン系セッション オープンソースで始める オフラインアプリケーション開発入門

Upload: fumio-sagawa

Post on 19-May-2015

5.435 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

!

オープン系セッション

オープンソースで始める オフラインアプリケーション開発入門

Page 2: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Profile: !

佐川 夫美雄

HTML5Expert.jpコントリビュータ html5jエンタープライズ部 副部長 Angularユーザ会 スタッフ Sencha UG CO-ORGANIZER

@albatrosary http://albatrosary.hateblo.jp/ http://html5experts.jp/albatrosary/

Page 3: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

OSSで作るSingle-page Application

Offline Web Application

本日お話すること

Page 4: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

http://html5experts.jp/albatrosary/3191/

業務系Webアプリケーション開発で何が起きているか

Page 5: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

ファイナンシャルプランナーとは

顧客である個人から、収支・負債・家族構成・資産状況などのリソース提供を受け、それを基に住居・教育・老後など将来のライフプランニング(人生設計計画)に即した資金計画やアドバイスを行う職種

Page 6: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

ライフプランに必要な要素

教育資金計画 住宅取得資金計画 老後生活のための資金計画 税務 社会保険/公的年金/企業年金

キャッシュフロー表 / 個人バランスシートで表現する

Page 7: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

こんな感じで営業してます (みたいです)

Page 8: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

フロントシステムにはリッチクライアントが必要

Page 9: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

RIAに求められたもの Rich Internet Application

表現力の高さ:動画や音声などマルチディアの活用が可能で高いデザイン性を持った画面要素の

再生機能を備える デスクトップアプケーションと同等なUI:画面をリフレッシュすることな

く、バックエンドでサーバーとデータの送受信が可能 ユーザーエクスペリエンス:ユーザーの操作が即座にレスポンスされ、表示される画面

の情報が操作に応じて随時変化するようなインタラクティブな操作性を実現

Page 10: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

HTML5が解決してくれる!

Page 11: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Controller

JSP

Browser

HTML JavaScript

アプリケーションサーバ RDBMS

Business Logic O/RPOJO

従来型のWebアプリケーション

1. リクエストをサーバへ送りControllerへ 2. Controllerは必要な情報を POJO → Business Logic →O/Rマッパー → Database で取得(登録・更新) 3. ページをjspで生成しController経由でクライアントへ返却 4. 各ページではAjaxにより部分的な情報の取得

Page 12: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Controller

Browser

HTML JavaScript

アプリケーションサーバ RDBMS

Business Logic O/RPOJO

次世代型のWebアプリケーション

1. HTMLで作成された画面を表示 2. 必要な情報をAjaxにおいてXMLHttpRequestで非同期にJSONで

サーバへ送信 3. サーバでは受け取った情報(JSON)をPOJOへ変換し登録・更新な

どの処理を行う 4. 表示データはJSONでクライアントへ画面へ表示

Page 13: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Single-page Application(SPA)とは

単一ページによるWebアプリケーション ページはDOMの操作により切り替える サーバとのやりとりはAjaxやWebSocket等を利用

events

renderchange

AjaxStorage

get

setModel

TemplateViewDOM

Page 14: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

でもSingle-page Applicationは難しい

Page 15: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

SPAに必要な技術

JavaScriptフレームワーク

altJS

CSS Preprocessor

開発環境

バックエンド技術 - 通信

バックエンド技術 - Webアプリケーションサーバ

Page 16: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

JavaScriptフレームワーク

http://backbonejs.org/

http://angularjs.org/

http://www.sencha.com/

すでにJavaScriptフレームワークは数十種類ある 自分のプロジェクトにあったものを選ぶ

Page 17: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

フレームワークの導入は 処理を系統立てた仕組みにのせ プログラマの作業の効率化

と アプリケーションの保守性を高めること

にあります

Page 18: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

フレームワークを使ってロジックを整理する

Page 19: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

カスタムイベントを備えた Model Model のイテレーションである Collection イベントをハンドリングする View !

!

サーバサイドのアプリケーションと連動するための RESTful JSON など

View

ejs Collection Model

HTML

Page 20: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

ROUTER ・画面の遷移を定義する

画面 URL 処理登録画面 /#notes NotesView.render()一覧画面 /#list ListView.render()

メンテナンス画面 /#mente MenteView.render()

class NotesRouter extends Backbone.Router # "": localhost:9000 の呼び出し # "notes": localhost:9000/#notes の呼び出し # "list": localhost:9000/#list の呼び出し routes: "": "mains" "notes": "mains" "list": "lists"

View

ejs Collection Model

HTML

Page 21: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

View ・ejs を使ったレンダリング ・使用するDOM要素の定義 ・ビジネスロジック ・イベントの定義 class NotesView extends Backbone.View el: $ "#main" template: JST["app/scripts/templates/notes.ejs"] events: 'click #update': '_onClickUpdate' 'click #added': '_onClickAdded' 'click #deleteAll': '_onClickDeleteAll' render: -> $("#notes").html @template this

View

ejs Collection Model

HTML

Page 22: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Model ・View のデータバッファとして定義 ・バリデーションの定義

class NotesModel extends Backbone.Model defaults: id: '' title: 'title' contents: 'contents' validate: (attrs) -> return 'title is empty.' if _.isEmpty attrs.title return 'contents is empty.' if _.isEmpty attrs.contents

View

ejs Collection Model

HTML

Page 23: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Collection ・使用するモデルを定義 ・Ajax ? or localStorage ?

class NotesCollection extends Backbone.Collection model: NotesModel

View

ejs Collection Model

HTML

Page 24: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

View

ejs Collection Model

HTML bower.json { "dependencies": { "jquery": "~1.9.0", "requirejs": "~2.1.5", "backbone-amd": "~1.0.0", "Backbone.localStorage": "1.1.7", "underscore-amd": "~1.4.4", }, "devDependencies": {} }

$ bower install

localStorageを使うのも簡単

Page 25: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

altJS

http://coffeescript.org/

http://www.typescriptlang.org/

http://html5experts.jp/clockmaker/2183/

altJSの言語の多くはクラス機構のサポート JavaScriptの抱える問題の多くを解決

Page 26: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

CSS Preprocessor

http://sass-lang.com/http://compass-style.org/

http://lesscss.org/

http://learnboost.github.io/stylus/

膨大なCSSをどう整理するか

Page 27: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

モック開発で効率よく

http://albatrosary.hateblo.jp/entry/2014/02/06/155004

Page 28: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

package.jsonの一部 "devDependencies": { "grunt": "~0.4.1", "grunt-contrib-copy": "~0.4.0", "grunt-contrib-concat": "~0.3.0", "grunt-contrib-coffee": "~0.7.0", "grunt-contrib-jst": "~0.5.0", "grunt-contrib-uglify": "~0.2.0", "grunt-contrib-compass": "~0.5.0", "grunt-contrib-jshint": "~0.6.3", "grunt-contrib-cssmin": "~0.6.0", "grunt-contrib-connect": "~0.3.0", "grunt-contrib-clean": "~0.5.0", "grunt-contrib-htmlmin": "~0.1.3", "grunt-contrib-imagemin": "~0.1.0", "grunt-contrib-watch": "~0.5.2", "grunt-mocha": "~0.4.1", "grunt-usemin": "~0.1.10", "grunt-bower-requirejs": "~0.7.0", "grunt-requirejs": "~0.4.0", "grunt-rev": "~0.1.0", "grunt-open": "~0.2.0", "load-grunt-tasks": "~0.1.0", "connect-livereload": "~0.2.0", "time-grunt": "~0.2.1", "jshint-stylish": "~0.1.3" }

Page 29: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

やること多いでしょ?

Page 30: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

開発環境

http://yeoman.io/

http://www.sencha.com/products/sencha-cmd/download

http://git-scm.com/

https://github.com/

多くのアーキテクチャをどうやって開発するか

Page 31: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Yeoman とは

Google社が作成した総合開発ツール群

yo(雛形作成ツール)

grunt(タスクランナー)

bower(フロントエンドパッケージマネージャ)

MODERN WORKFLOWS FOR MODERN WEBAPPS

http://yeoman.io/

Page 32: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

開発の大まかな流れ

1. yo [generator] によるひな形

2. grunt server を使用しアプリケーション開発

3. grunt build によるリリースビルド

http://yeoman.io/

Page 33: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

generator はどのくらいある? http://yeoman.io/community-generators.html

yo雛形作成ツール

Page 34: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

bowerTwitter社が作ったパッケージマネージャ

bower components はどのくらいあるか? http://bower.io/search/

Page 35: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

gruntタスクランナー

grunt で登録されているプラグインは? http://gruntjs.com/plugins

Page 36: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Yeomanをうまく使って効率良く開発しyo

Page 37: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

WebSocketやSPDYを使って「より早く双方向」

スケールできるWebアプリケーションサーバ

Ajaxでデータのやり取りをしている分には今までと変わらない。 しかし、WebSocketを使った場合は。。

http://html5experts.jp/albatrosary/4939/

バックエンド技術

Page 38: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Java屋さん(バックエンドエンジニア)が頑張るところです!

Page 39: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

パフォーマンス メモリリーク セキュリティ フレームワークロックイン 設計思想の転換 フロントエンジニア不足 通信技術 バックエンド技術

SPAを構築する上で考えるべきことのまとめ

http://blog.mitsuruog.info/2014/01/spa7.html

Page 40: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Single-page Applicationを構築するにあたって

メリット: ページを遷移させてもJavaScriptのグローバル環境が変わらない WebSocketが有効に使える

デメリット: フルOSSでの開発が必要になる 技術要素が多すぎる 従来のWebアプリケーションに比べフロント開発が難しい

Page 41: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

http://www.xenophy.com/

Sencha is All in One

いろいろ面倒と思うなら

Page 42: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

これだけではアプリケーションを利用している 営業さんは納得しません

Page 43: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

オンラインじゃないと使えないんでしょ?

Page 44: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

営業活動を妨げるつもりですか?

Page 45: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

よしネイティブでやろう!

Page 46: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

じゃなくて

Page 47: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Offline Web Applicationでやろう!

Page 48: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Web ApplicationなのにOfflineって何のこと?

Page 49: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

いままでのキャッシング技術

アプリケーションサーバでのキャッシュ

プロキシサーバでのキャッシュ

ブラウザでのキャッシュ

Page 50: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

これとはまったく違います

Page 51: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Offline Web ApplicationWebアプリケーションを実行させるリソースをブラウザに保持してネットワークが遮断された環境でも動かそうという機能

Page 52: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Application Cacheこれはなに?

オフライン ブラウジング: ユーザーがオフラインのときでも、す

べてのサイトにアクセスできる。

高速: キャッシュされたリソースはローカルなので、高速に読み込まれる。

サーバー負荷の軽減: ブラウザは、変更があったリソースのみを

サーバーからダウンロードする。

Page 53: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

manifestファイルCACHE MANIFEST # リソースを更新する場合、必ず値を変更する # マニフェストファイルを保存しておく場所は、htmlファイルと同じディレクトリです # 2013-04-06 12:40 !# キャッシュしたいリソース # このうち一つでもファイルが見つからないとエラーになりキャッシュされません。 CACHE: sample.html js/test.js css/test.css !# 常にネットワーク上を参照して欲しい場合に使用 # 必ずオンラインアクセスを試みるリソース NETWORK: test.cgi !# 代替エントリを宣言 # アクセスに失敗した場合に代わりに使用するリソース(NETWORK:と両方に指定すると動作しない) FALLBACK: online.png error.png

<html manifest="sample.appcache">

Application Cacheどうすればいいの?

Page 54: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

chrome://appcache-internals/

Application Cache

キャッシュクリアは意外と簡単

Page 55: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

about:cacheで確認

Application CacheFireFoxでは

削除は Cache Directoryの中をばさっと消す※ Firefox 11 以前から Firefox 11 まで、ツール -> 最近の履歴を消去、あるいは、ツール -> オプション -> 詳細 -> ネットワーク -> オフラインデータ -> 今すぐ消去 のどちらでもオフラインキャッシュ

Page 56: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Application Cache

View Entriesでキャッシュされているmanifestの内容が見れる

Removeでキャッシュの内容が削除できる

Page 57: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Application Cache

もちろんデベロッパーツールでも見れます

Page 58: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

manifestファイルが更新されていないとダメ

リソースは必ずmanifestファイルに定義しないと動きが奇妙

Application Cache難しいところ

Page 59: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Application Cache

Application Cacheを使った場合、ファイルを定義しないと使われない main.cssをmanifestファイルでコメントアウトしてみた

難しいところ

Page 60: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Application Cache

manifestファイルには全部ちゃんと書く

→ ネットワークから取得したい場合はNETWORKに書く

難しいところ

Page 61: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Application Cache

NETWORKとCACHE両方に書いた場合はCACHE

難しいところ

Page 62: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Application Cache

Browser

① 描画

② ファイルのダウンロード

manifestファイルを更新してブラウザを実行してもキャッシュしているファイルを使う 2回目でようやくダウンロードしたファイルを利用する

難しいところ

Page 63: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Application Cache

関係ないファイルをmanifestに書いてもキャッシュされる

難しいところ

Page 64: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Application Cache

意外と使えます

Page 65: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

length:保存されているデータ数 key(n):保存されているn番目のkey getItem(key):keyに対応するvalue setItem(key, value):keyとvalueのペアでデータを保存 removeItem(key):keyに対応するvalueを削除 clear():データをすべてクリア

key-value型のデータストア • sessionStorage • localStorage

のストレージが用意されている(IE8から使える)

WebStorageこれはなに?

Page 66: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

別ウィンドウのデータ共有 データの有効期限 データ量の上限 サーバへのデー

タ送信

クッキー ○ 指定期限まで有効 4KB サーバへのアクセスごと

session × 別ウィンドウ/タブを閉じるまで有効 10MB jsにて

local ○ 永続的に有効 10MB jsにて

WebStorage比較してみる

Page 67: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

WebStorageポイント

とても扱いやすい

トランザクションの概念がない

Page 68: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

普通に使えます

WebStorage

Page 69: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

オフラインファーストの思想と実践

http://www.slideshare.net/shumpei/thought-and-practice-of-offline-first

Page 70: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

さすがです!白石先生!

Page 71: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Offline Web Application

http://www.html5rocks.com/ja/tutorials/offline/quota-research/

Page 72: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

さすがです!北村先生!

Page 73: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

http://www.html5rocks.com/ja/tutorials/offline/quota-research/

Offline Web Application

Page 74: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

静的なリソースも動的なリソースもクライアントに保持

Page 75: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Single-page ApplicationでほとんどJavaScriptでの処理

Page 76: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

アプリケーションサーバに問い合わせしないので Offine Web Applicationも作りやすい

Page 77: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

できればWeb StorageとAPIサーバの同期はWeb Workerで

Page 78: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

WebWorker

JavaScriptにスレッド機能を追加する機能

これはなに?

Page 79: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

WebWorker

var worker = new Worker(‘task.js');

ウェブ ワーカーは独立したスレッドで動作する

ウェブ ワーカーによって実行されるコードは個別ファイル

どうやるの?

Page 80: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

次世代型のWebアプリケーション

Controller

Browser

HTML JavaScript

アプリケーションサーバ RDBMS

Business Logic O/RPOJOWeb

Storage

Application Cache

HTML

Single-page Applicationであたかもクライアントアプリケーションのように動くWebアプリケーション

Page 81: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

最後に

WebSocket

SPDY HTTP 2.0

Java

RIASingle-page Application

JavaScriptフレームワーク altJS CSS Preprocessor Ajax

Offline Web ApplicationWeb Worker

Yeoman

Page 82: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

OSC Tokyo/Spring !

2/28-3/1 306教室にてブース展示 3/1 10:00 203教室にて登壇

このあと

Page 83: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

Special Thanks

http://www.xenophy.com/

http://www.gxp.co.jp/

http://www.html5biz.org/

http://html5experts.jp/

http://html5j.org/

Page 84: オープンソースで始めるオフラインアプリケーション開発入門

#html5biz #html5bizB

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