SlideShare a Scribd company logo
HTML5 & The
Web Platform
masataka yakura
矢倉といいます。
http://www.mitsue.co.jp/
Web 標準 Blog
http://standards.mitsue.co.jp/
W3C
HTML5 Japanese IG
http://www.w3.org/html/ig/jp/
Agenda
1. なぜ HTML5 なのか
2. 新しい機能
3. プラットフォームの安定化
4. いまとこれから
なぜ HTML5 なのか
Web の使われ方が
ここ数年で大きく変化した。
HTML5 & The Web Platform
静的だった Web に
アプリケーションが台頭。
HTML5 & The Web Platform
HTML5 & The Web Platform
技術の変化は?
HTML, CSS, JavaScript...
Webアプリの発展には
まだまだ機能が足りない。
XHTML 2.0, XForms, etc...
開発者から
賛同を得られなかった……
「いま使われている技術を
拡張して進化させよう!」
ただ、プラットフォームも
あまり安定していなかった……
HTML5 の目的は
これらをなんとかすること。
「機能の拡張」と「安定性向上」
HTML5 と ”HTML5”
HTML5 仕様にないものも
「HTML5」と呼ばれている。
1. もともと HTML5 だった
  (Web Sockets, Web Workers, etc.)
2. HTML5 に近い API 仕様
  (File API, Geolocation, etc.)
3. とくに関係ない
 (CSS3)
まぎらわしい……
今回は関連 API も含めて
いくつか簡単に紹介します。
新しい機能
マークアップ
新しい要素や属性が導入。
<canvas> <audio> <video> <header>
<footer> <section> <article> <nav>
<aside> <hgroup> <figure> <details>
<datalist> <meter> <progress>
<time> <mark> <ruby> etc...
よく使われる class/id を
要素として採用する。
<div id=“header”>
→ <header>

<div class=“section”>
→ <section>
定型句はよりシンプルに。
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<!DOCTYPE html>
<meta http-equiv=“Content-Type”
content=“text/html; charset=UTF-8”>
<meta charset=“UTF-8”>
※ 古いブラウザーでも機能します。
Forms (2.0)
フォームの機能が大きく拡張。
1. <input> の型が増えた。
<input   type=text ...>
<input   type=password ...>
<input   type=checkbox ...>
<input   type=radio ...>
...
<input   type=email ...>
<input   type=range ...>
<input   type=color ...>
<input   type=date ...>
<input   type=tel ...>
<input   type=url ...>
...
UI が新たに用意される。
<input type=range ...>
<input type=date ...>
2. 属性が増えた。
<input type=text ... autofocus>
<input type=search
placeholder=“検索語句を入力”>
<input type=text name=“acct”
autocomplete=off>
3. 値の検証ができるように。
名 前 (必須):

メール (必須):
<input type=text ... required>
<input type=email ... required>
郵便番号:
<input type=text ...
 pattern=“¥d{3}-?¥d{4}”>
※ サーバーサイドでの対応も必要。
<canvas> + 2D Context
JavaScript から
図形の描画などを行う。
<canvas id=canvas ...>
 <!-- fallback -->
</canvas>
コンテキストを取得し
Context API で描画していく。
// コンテキストの取得
var elm = document.querySelector(‘#canvas’);
var ctx = elm.getContext(‘2d’);

// 四角形を描画
ctx.fillStyle = ‘rgba(0, 128, 0, 0.7)’;
ctx.fillRect(50, 50, 160, 200);
HTML5 & The Web Platform
Immediate Mode なので
描画されたら操作ができない。
アニメーションなどは
そのつど描きなおさないと……
オブジェクトが保持されないので
マウスドリブンなものは厄介?
ただ、高速なので
いろいろなものに使われている。
Bespin
https://bespin.mozilla.com/
<canvas> で作られたエディタ。
HTML5 & The Web Platform
Sketchpad
http://mugtug.com/sketchpad/
ドローイングツール。
(SVG も一部利用)
HTML5 & The Web Platform
<audio> & <video>
<img> と同じ感覚で
音声や動画を扱う要素とAPI。
<video src=“intro_html5.vid”
 controls>
   <a ...> ダウンロード </a>
</video>
標準的な UI も提供される。
HTML5 & The Web Platform
プラグイン実装ではないので
CSS や Canvasと組み合わせが可能。
YouTube      (TestTube)
http://www.youtube.com/html5
HTML5 & The Web Platform
コーデックについては
いろいろもめています……
Web Storage
Cookie を置き換える
シンプルなストレージ機能。
localStorage:
永続ストレージ。
sessionStorage:
セッションが終わると消える。
// 値をセット
localStorage.setItem(‘key’, ‘value’);

// 値を取得
var val = localStorage.key;
※ データベースは別の API が。
(Web SQL Database, Indexed Database API)
Web Workers
ワーカースレッドみたいなもの。
複雑なアプリケーションで…
HTML5 & The Web Platform
重たい処理を別プロセスに。
// ワーカーの作成
var worker = new Worker(‘worker.js’);

// メッセージをワーカーに渡す
worker.postMessage(message);

// ワーカーからのメッセージ
worker.onmessage = function (e) {
  doSomething(e.data);
}
// worker.js
onmessage = function (e) {
 workOnSomething();

    // 本体に返す
    postMessage(e.data);
}
Shared-nothing なので
DOM などにアクセス不可。
Application Cache +
Online/Offline Events
オフライン Web アプリに。
Application Cache:
キャッシュするファイルを指定。
CACHE MANIFEST
# キャッシュさせたいファイルを書く
style.css
jquery.js
script.js
fonts/afont-medium.woff
<html ...
 manifest=“cache.manifest”>
Online/Offline Events:
オンライン/オフライン時にfire.
if (navigator.onLine) { // 状態を通知
  ...
}
window.ononline = function () {
  sendData();
}
window.onoffline = function () {
  saveData();
}
Web Sockets
Full-duplex な
双方向通信を実現する。
プロトコルと API 仕様の
標準化がそれぞれ進行中。
var ws = new WebSocket(‘ws://example/serv’);

// 通信開始時の処理
ws.onopen = function () {
  ws.send(message);
}

// メッセージを受け取ったとき
ws.onmessage = function (e) { ... }
複数人で同時編集をするような
Webアプリが増えていく?
プラットフォームの安定化
機能を追加しても
基礎がダメなら意味がない。
プラットフォーム安定のために
相互運用性と互換性を向上させる。
相互運用性
Interoperability
今の Web 開発は大変。
HTML5 & The Web Platform
実装によって、解釈が異なる…
大きな理由は
「仕様がない」こと。
1. そもそも定義がない
2. 仕様の詳細がない
実装に依存しないように
仕様が作られていた。
依存しすぎる部分は
標準化がされないことも……
未定義な部分は
各々で補完していた。
実装のことを
もっと考えた仕様に。
HTML5 では
DOM を中心に仕様を構成。
API だけでなく
要素・属性も DOM のもと定義。
作られる DOM の一貫性も
考える必要がでてくる。
1. 構文解析
2. ツリー構築
3. エラー処理
これらに対して
詳細な実装要件を定義。
互換性
Compatibility
現在の環境との
互換性を考えないといけない。
古いサイト/アプリが
HTML5 な環境でも動くように。
新しい機能が
古い環境を壊さないように。
試験実装でテストして
仕様を修正していく。
よい設計にならないことも……
いま と これから
今は仕様をまとめている段階。
HTML5 は、巨大。
(4MB 超の HTML ファイル)
勧告は遠い先。
(各機能に対し2つ以上の実装が必要)
実装は進んでいる。
1. <canvas>, <video>
2. Web Storage
3. HTML5 parser (Firefox)
4. Web Sockets (Chrome)
HTML5 & The Web Platform
機能によって
仕様の安定度合いが異なる。
実装状況の違いが
より明確になっていく。
HTML5 & The Web Platform
「すぐには使えないや。」
すべて一度には進まない。
実装されている機能を
使えるところから使う。
HTML5 & The Web Platform
サポートされない環境には
フォールバックを用意する。
(excanvas.js, etc.)
HTML5 & The Web Platform
プラットフォームを限定すれば
広く利用できることも。
(iPhone, Android, etc.)
考え方を変えていきながら
新しい技術を使っていこう!
ありがとうございました。
Contact: <yakura-masataka@mitsue.co.jp>

More Related Content

HTML5 & The Web Platform