業務アプリケーションにおけるこれからのWeb開発

71
業務アプリケーションにおける これからのWeb開発 2014/5/24 オープンソースカンファレンス・沖縄 Fumio SAGAWA@albatrosary

description

 

Transcript of 業務アプリケーションにおけるこれからのWeb開発

Page 1: 業務アプリケーションにおけるこれからのWeb開発

業務アプリケーションにおける これからのWeb開発

2014/5/24 オープンソースカンファレンス・沖縄Fumio SAGAWA@albatrosary

Page 2: 業務アプリケーションにおけるこれからのWeb開発

佐川 夫美雄

HTML5Expert.jpコントリビュータ HTML5 fun !html5jエンタープライズ部 副部長 html5j Web Platform部 KnockoutJS Japan User Group Sencha UG CO-ORGANIZER AngularJS Japan User Group

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

(Fumio SAGAWA)

Page 3: 業務アプリケーションにおけるこれからのWeb開発

HTML5が2014年に正式勧告

Page 4: 業務アプリケーションにおけるこれからのWeb開発

SGML(standard Generalized Markup Language) 1986年

HTML(HyperText Markup Language) 1989年

HTML 4.0(HyperText Markup Language) 1997年

XML(eXtensible Markup Language) 1998年

XHTML(eXtensible HyperText Markup Language) 2000年

HTML 5.0(HyperText Markup Language) 2012年

CSS 1 1996年

CSS 2 1998年

CSS 2.1 2004年

CSS 3 2011年

HTTP 1.1 1999年

HTTP 1.0 1996年

HTTP 0.9 1993年

SPDY 2011年

XHTML 2.0(eXtensible HyperText Markup Language) 2010年

HTTP 2(draft) 2012年

Webの歴史

Page 5: 業務アプリケーションにおけるこれからのWeb開発

タグの話

Page 6: 業務アプリケーションにおけるこれからのWeb開発

HTML4 HTML5

どう変わるか

Page 7: 業務アプリケーションにおけるこれからのWeb開発

カレンダーやデートピッカー 月の入力 週の入力 時刻の入力 詳細な日時や時刻の入力 自分のいる地域の日付と時刻

inputタイプの種類

検索ボックス スピンボックス スライダ カラーピッカー 電話番号 Webページのアドレス メールアドレス

Page 8: 業務アプリケーションにおけるこれからのWeb開発

ブラウザはどうなっているか

Page 9: 業務アプリケーションにおけるこれからのWeb開発

http://html5test.com/

ブラウザ

Page 10: 業務アプリケーションにおけるこれからのWeb開発

HTML5と通信

Page 11: 業務アプリケーションにおけるこれからのWeb開発

より早く双方向に

Page 12: 業務アプリケーションにおけるこれからのWeb開発

クライアントとサーバが接続し続ける 双方向通信

WebSocket

Page 13: 業務アプリケーションにおけるこれからのWeb開発

既存のHTTPを拡張 複数のリクエストを送受信することが可能

Page 14: 業務アプリケーションにおけるこれからのWeb開発

Geolocation

Page 15: 業務アプリケーションにおけるこれからのWeb開発

Geolocation

Geolocation APIによる位置情報通知

Page 16: 業務アプリケーションにおけるこれからのWeb開発

Geolocation

https://developers.google.com/maps/documentation/javascript/examples/map-geolocation?hl=ja

Page 17: 業務アプリケーションにおけるこれからのWeb開発

Webなのに Offline Web Application

Page 18: 業務アプリケーションにおけるこれからのWeb開発

Application Cache Web Strage Indexed Databace API File API

Page 19: 業務アプリケーションにおけるこれからのWeb開発

キーと値でブラウザにデータを保持 するデータベース

Indexed Database API

Page 20: 業務アプリケーションにおけるこれからのWeb開発

クッキーを巨大にしたkey/Valueの入れ物

WebStorage

Page 21: 業務アプリケーションにおけるこれからのWeb開発

Application Cache

ユーザーがオフラインのときでもサイトにアクセス

Page 22: 業務アプリケーションにおけるこれからのWeb開発

HTML5が注目される訳

Page 23: 業務アプリケーションにおけるこれからのWeb開発

Rich Internet Applicationの衰退

2010年 Steve JobsがFlashを激しく批判

プロプライエタリよりオープン性のあるHTML5を推進!

2011年 MicrosoftはWeb開発者に対するSilverlight戦略を後退

    AdobeもモバイルFlashの開発を中止

2014年 HTML5正式勧告

Page 24: 業務アプリケーションにおけるこれからのWeb開発

Rich Internet Applicationに求められたもの

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

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

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

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

Page 25: 業務アプリケーションにおけるこれからのWeb開発

HTML5を使えばRIAと同等のユーザビリティが可能

Page 26: 業務アプリケーションにおけるこれからのWeb開発

Javaで対応

次世代型のWebアプリケーションでは、基本的にはJavaScriptで多くの処理を行い、次のような通信技術を利用して、データのみをサーバとやり取りします。 !

JSON 1.0 JAX-RS 2.0 WebSocket 1.0

Page 27: 業務アプリケーションにおけるこれからのWeb開発

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 28: 業務アプリケーションにおけるこれからのWeb開発

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

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

3. サーバでは受け取った情報(JSON)をPOJOへ変換し登録・更新などの処理を行う

4. 表示データはJSONでクライアントへ画面へ表示

Controller

Browser

HTML JavaScript

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

Business Logic O/RPOJO

Page 29: 業務アプリケーションにおけるこれからのWeb開発

Java

RIASingle-page Application

Page 30: 業務アプリケーションにおけるこれからのWeb開発

Single-page Application(SPA)

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

events

renderchange

Ajax

get

setModel

TemplateViewDOM

Page 31: 業務アプリケーションにおけるこれからのWeb開発

HTML5をどう利用するか

Page 32: 業務アプリケーションにおけるこれからのWeb開発

SPAに必要な技術

JavaScriptフレームワーク altJS CSS Preprocessor 開発環境 通信技術 Webアプリケーションなどのバックエンド技術

Page 33: 業務アプリケーションにおけるこれからのWeb開発

JavaScriptフレームワーク

http://backbonejs.org/

http://angularjs.org/

http://www.sencha.com/

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

http://knockoutjs.com/

Page 34: 業務アプリケーションにおけるこれからのWeb開発

altJS

http://coffeescript.org/2009年

http://www.typescriptlang.org/2012年

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

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

Page 35: 業務アプリケーションにおけるこれからのWeb開発

CSS Preprocessor

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

http://lesscss.org/

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

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

Page 36: 業務アプリケーションにおけるこれからのWeb開発

開発環境

http://yeoman.io/

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

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

https://www.microsoft.com/ja-jp/dev/default.aspx

Page 37: 業務アプリケーションにおけるこれからのWeb開発

SPAに必要なフロントエンド技術

Page 38: 業務アプリケーションにおけるこれからのWeb開発

具体的な実例

Page 39: 業務アプリケーションにおけるこれからのWeb開発

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

Page 40: 業務アプリケーションにおけるこれからのWeb開発

これで安心?

Page 41: 業務アプリケーションにおけるこれからのWeb開発

開発環境のおはなし - YEOMAN

http://yeoman.io/

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

Page 42: 業務アプリケーションにおけるこれからのWeb開発

Yeoman とは

Webアプリケーションのための総合開発ツール群

yo(雛形作成ツール)

grunt(タスクランナー)

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

MODERN WORKFLOWS FOR MODERN WEBAPPS

Page 43: 業務アプリケーションにおけるこれからのWeb開発

開発の大まかな流れ

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

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

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

Page 44: 業務アプリケーションにおけるこれからのWeb開発

これはですね。。

Javaのmavenみたいなもんです もうちょっと高機能かも

Page 45: 業務アプリケーションにおけるこれからのWeb開発

インストールは簡単

使ってみる

$ npm install -g yo

Page 46: 業務アプリケーションにおけるこれからのWeb開発

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

yo雛形作成ツール

Page 47: 業務アプリケーションにおけるこれからのWeb開発

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

!

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

View

ejs Collection Model

HTML

Page 48: 業務アプリケーションにおけるこれからのWeb開発

$ yo backbone

yo雛形作成ツール

Page 49: 業務アプリケーションにおけるこれからのWeb開発

これだけで概ねの環境ができてしまう!

yo

Page 50: 業務アプリケーションにおけるこれからのWeb開発

$ yo backbone:view view名 --coffee $ yo backbone:model model名 --coffee $ yo backbone:collection collection名 --coffee $ yo backbone:router router名 --coffee

yoテンプレートを作成する

Page 51: 業務アプリケーションにおけるこれからのWeb開発

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

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

Page 52: 業務アプリケーションにおけるこれからのWeb開発

bower

依存関係およびライブラリの情報を 管理するためのファイル

bower.jsonとは?

Page 53: 業務アプリケーションにおけるこれからのWeb開発

bowerbackbonejsを作るときに必要なコンポーネント

{ "name": "backbone-app", "version": "0.0.0", "dependencies": { "sass-bootstrap": "~3.0.0", "jquery": "~1.9.0", "underscore": "~1.4.3", "backbone": "~1.0.0", "requirejs": "~2.1.5", "requirejs-text": "~2.0.5", "modernizr": "~2.6.2", "backbone.localStorage": "~1.1.7" }, "devDependencies": {} }

Page 54: 業務アプリケーションにおけるこれからのWeb開発

bower

$ bower install !

このコマンドでbower.jsonに定義しているコンポーネントをダウンロードします

使い方

Page 55: 業務アプリケーションにおけるこれからのWeb開発

bower

$ bower install --save-dev [パッケージ名] !

新しいコンポーネントをダウンロードしbower.jsonにその情報を書き込みます

使い方

Page 56: 業務アプリケーションにおけるこれからのWeb開発

gruntタスクランナー

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

Page 57: 業務アプリケーションにおけるこれからのWeb開発

gruntタスクランナー

gruntにはpackage.jsonとGruntfile.jsが必要

Page 58: 業務アプリケーションにおけるこれからのWeb開発

gruntpackage.jsonとは?

必要なタスクプラグインを管理するためのファイル

Page 59: 業務アプリケーションにおけるこれからのWeb開発

gruntpackage.jsonとは?

{ "name": "backbone-app", "version": "0.0.0", "dependencies": {}, "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.2.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" }, "engines": { "node": ">=0.8.0" } }

Page 60: 業務アプリケーションにおけるこれからのWeb開発

grunt使い方は

$ npm install --save-dev [プラグイン名] !

新しいプラグインをダウンロードしpackage.jsonにその情報を書き込みます

Page 61: 業務アプリケーションにおけるこれからのWeb開発

gruntGruntfile.jsとは?

タスクを定義したファイルです

Page 62: 業務アプリケーションにおけるこれからのWeb開発

gruntGruntfile.jsとは?

コマンドがいろいろ定義していますが $ grunt serve $ grunt build $ grunt test これにモックアップ開発用に $ grunt mock

Page 63: 業務アプリケーションにおけるこれからのWeb開発

モック開発で効率よく

Page 64: 業務アプリケーションにおけるこれからのWeb開発

grunt-connect-proxyの構築

$ npm install grunt-connect-proxy --save-dev

connect: { options: { port: SERVER_PORT, hostname: 'localhost' }, livereload: { ・・・ }, /* プロキシサーバの設定 */ proxies: [{ context: '/mockapi', host: 'localhost', port: '3000', https: false, changeOrigin: false }],

Gruntfile.js

Page 65: 業務アプリケーションにおけるこれからのWeb開発

grunt-easymockの構築

$ npm install grunt-easymock --save-dev

grunt.initConfig({ yeoman: yeomanConfig, /* easymockの設定 */ easymock: { mockapi: { options: { port: 3000, path: 'server/api-server', config: { routes: [ '/users/:id' ] }, }, }, },

Gruntfile.js

Page 66: 業務アプリケーションにおけるこれからのWeb開発

grunt-easymockの構築

ここで「easymock」の次の「mockapi」キーワードが重要 これとproxyで定義したcontextを一致させる !

期待するURLは

/mockapi/users/1

です。

Page 67: 業務アプリケーションにおけるこれからのWeb開発

grunt-easymockの構築

easymockをタスクに登録 grunt.task.run([ 'clean:server', 'coffee:dist', 'createDefaultTemplate', 'handlebars', 'compass:server', 'configureProxies', 'connect:livereload', 'open', 'easymock', 'watch' ]);

Page 68: 業務アプリケーションにおけるこれからのWeb開発

モックサーバを構築すると 面倒なAPIサーバを構築しなくていい

Page 69: 業務アプリケーションにおけるこれからのWeb開発

色々と便利!

Page 70: 業務アプリケーションにおけるこれからのWeb開発

SPAの難しいところ

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

Page 71: 業務アプリケーションにおけるこれからのWeb開発

Thanks.