<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://organizeseries.com/"
	>

<channel>
	<title>Canvas &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/canvas/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>現場の実例から学ぶ、最新鋭のWebアプリケーション開発フローとアーキテクチャ「HTML5 Conference 2013」</title>
		<link>/miyuki-baba/4118/</link>
		<pubDate>Mon, 06 Jan 2014 02:00:46 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[HTML5 Conference 2013]]></category>

		<guid isPermaLink="false">/?p=4118</guid>
		<description><![CDATA[連載： HTML5 Conference 2013レポート (16)「HTML Conference 2013」で行われたセッションから、株式会社サイバーエージェント大谷剛氏と船ヶ山慶氏による「現場の実例から学ぶ、最新鋭...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/html5-conference-2013-2/" class="series-160" title="HTML5 Conference 2013レポート" data-wpel-link="internal">HTML5 Conference 2013レポート</a> (16)</div><p>「HTML Conference 2013」で行われたセッションから、株式会社サイバーエージェント大谷剛氏と船ヶ山慶氏による「現場の実例から学ぶ、最新鋭のWebアプリケーション開発フローとアーキテクチャ」の模様をお伝えします。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/01/DSC_2843.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/DSC_2843.jpg" alt="DSC_2843" width="700" height="435" class="aligncenter size-full wp-image-4173" srcset="/wp-content/uploads/2014/01/DSC_2843.jpg 640w, /wp-content/uploads/2014/01/DSC_2843-300x186.jpg 300w, /wp-content/uploads/2014/01/DSC_2843-207x128.jpg 207w" sizes="(max-width: 700px) 100vw, 700px" /></a></p>

<h2>「なぞってピグキッチン」とは</h2>

<p>今回作ったWebアプリケーションは、「なぞってピグキッチン」に使っている基本的な技術は、HTML、CSS、JavaScript。これにCanvasなど、他のフレームワークを組み合わせていますが、基本は前者の3つです。これをスマートフォンのブラウザ上で動かし、ネイティブのアプリと近い状態を作り上げたサービスです。</p>

<p>基本的な流れは、例えば（画面上の）ボタンをタップすると、背景色や文字色が変化する。さらに、せっかくCSS3が使えるのだから、角丸やシャドウを付けてみる。さらにアニメを付けてみる。――さらには画面全体を動かして、ぱっと見、ネイティブアプリのようなものを頑張って作りましょう、という流れです。</p>

<p>これが、HTML、CSS、JavaScriptですべて作られている基本の画面です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/01/Screenshot_.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/Screenshot_.jpg" alt="Screenshot_" width="640" height="355" class="aligncenter size-full wp-image-4148" srcset="/wp-content/uploads/2014/01/Screenshot_.jpg 640w, /wp-content/uploads/2014/01/Screenshot_-300x166.jpg 300w, /wp-content/uploads/2014/01/Screenshot_-207x114.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>左下に自分のアバタがあり、中央にキッチンがある。キッチンをデコレーションし、レシピを並べ、友達に料理をふるまい、キッチンを核にやっていこうと。それを楽しむゲームです。下のボタンを押せばモジュールが開きますが、モジュールからモジュールへとたどっていくのが基本の動きです。基本のURLは一つで、ページのリロードはせず、hashの部分のみで見た目を切り替える仕組みです。</p>

<p>ゲームの流れとして、パズルをして料理に必要な素材を収穫し、それを使って料理をします。制作チームのメンバーは、プロデューサー、エンジニア、デザイナー、ディベロッパーの大きく4つの職種があり、各職種にリーダー的なの人がいます。</p>

<h2>フレームワークについて</h2>

<p>フレームワークは世の中にたくさんあるのですが、それぞれ特性があります。例えばjQueryなどは有名ですが、スマートフォンで使うには、通信帯域が狭い中でファイルサイズが大きく厳しい。このように、どれがサービスに合っているのか、適性を見極める必要があります。</p>

<p>今回、「なぞってピグキッチン」に使用したフレームワークは「beez」と呼ばれるもの。現在は社内でしか使えませんが、近く社外にも公開する予定なので、その際には試していただければと思います。「スマートフォン開発をスピーディに進めるための、中・大規模クライアントブラウザ向けのフレームワーク（開発ツールキット）」というのが、beezの基本的立ち位置です。</p>

<p>ここで「開発ツールキット」とあるのは、スマホに特化したライブラリ、相性のいいライブラリをまとめてラップしたというのが大きな特徴だからで、そのためbeezを使う場合はbeez専用の言語、書き方ではなく、既存のライブラリの組み合わせで効率よく書けるようになっています。</p>

<p>主に先ほどのライブラリの中から、クライアントが主に触ると思われるものが以下の7つです。</p>

<p><strong>＜１＞ Backbone.js</strong>
<a href="https://html5experts.jp/wp-content/uploads/2014/01/Screenshot_2.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/Screenshot_2.jpg" alt="Screenshot_2" width="640" height="351" class="aligncenter size-full wp-image-4152" srcset="/wp-content/uploads/2014/01/Screenshot_2.jpg 640w, /wp-content/uploads/2014/01/Screenshot_2-300x164.jpg 300w, /wp-content/uploads/2014/01/Screenshot_2-207x113.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><strong>＜２＞ Underscore.js</strong>
<a href="https://html5experts.jp/wp-content/uploads/2014/01/Screenshot_31.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/Screenshot_31.jpg" alt="Screenshot_3" width="640" height="355" class="aligncenter size-full wp-image-4159" srcset="/wp-content/uploads/2014/01/Screenshot_31.jpg 640w, /wp-content/uploads/2014/01/Screenshot_31-300x166.jpg 300w, /wp-content/uploads/2014/01/Screenshot_31-207x114.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><strong>＜３＞ Zepto.js</strong>
<a href="https://html5experts.jp/wp-content/uploads/2014/01/Screenshot_4.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/Screenshot_4.jpg" alt="Screenshot_4" width="640" height="354" class="aligncenter size-full wp-image-4161" srcset="/wp-content/uploads/2014/01/Screenshot_4.jpg 640w, /wp-content/uploads/2014/01/Screenshot_4-300x165.jpg 300w, /wp-content/uploads/2014/01/Screenshot_4-207x114.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><strong>＜４＞ RequireJS</strong>
<a href="https://html5experts.jp/wp-content/uploads/2014/01/Screenshot_5.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/Screenshot_5.jpg" alt="Screenshot_5" width="640" height="352" class="aligncenter size-full wp-image-4162" srcset="/wp-content/uploads/2014/01/Screenshot_5.jpg 640w, /wp-content/uploads/2014/01/Screenshot_5-300x165.jpg 300w, /wp-content/uploads/2014/01/Screenshot_5-207x113.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><strong>＜５＞ Handlebars</strong>
<a href="https://html5experts.jp/wp-content/uploads/2014/01/Screenshot_6.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/Screenshot_6.jpg" alt="Screenshot_6" width="640" height="351" class="aligncenter size-full wp-image-4163" srcset="/wp-content/uploads/2014/01/Screenshot_6.jpg 640w, /wp-content/uploads/2014/01/Screenshot_6-300x164.jpg 300w, /wp-content/uploads/2014/01/Screenshot_6-207x113.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><strong>＜６＞ Stylus</strong>
<a href="https://html5experts.jp/wp-content/uploads/2014/01/Screenshot_7.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/Screenshot_7.jpg" alt="Screenshot_7" width="640" height="350" class="aligncenter size-full wp-image-4164" srcset="/wp-content/uploads/2014/01/Screenshot_7.jpg 640w, /wp-content/uploads/2014/01/Screenshot_7-300x164.jpg 300w, /wp-content/uploads/2014/01/Screenshot_7-207x113.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><strong>＜７＞ bucks.js</strong>
<a href="https://html5experts.jp/wp-content/uploads/2014/01/Screenshot_8.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/Screenshot_8.jpg" alt="Screenshot_8" width="640" height="352" class="aligncenter size-full wp-image-4165" srcset="/wp-content/uploads/2014/01/Screenshot_8.jpg 640w, /wp-content/uploads/2014/01/Screenshot_8-300x165.jpg 300w, /wp-content/uploads/2014/01/Screenshot_8-207x113.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>簡単にまとめると、Backboneがbeezの中では全体のフレームワークを担い、HandlebarsがHTML、StylusがCSS、ZeptoがDOM操作、Underscoreがユーティリティ、Requireがモジュールを担っています。beezは、これら既存のライブラリに追加する形で、Manager、Controllerという概念を持っています。</p>

<p>Managerは、viewに関しては、グローバルに必ず1つしか存在しない、viewを必ず監視している立ち位置にあります。しかもviewが必要なくなったタイミングで、それを全部破棄しメモリ上から消したり、また必要になった場合には再復帰させたりします。特にスマートフォンの場合はメモリ制限が厳しいので、こうしたマネージメントを行うのが、beezの中のManagerの概念です。</p>

<p>beezは、ツリー構造でviewを管理しています。これはBackboneとかではなく、beez独自のものです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/01/Screenshot_9.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/Screenshot_9.jpg" alt="Screenshot_9" width="640" height="354" class="aligncenter size-full wp-image-4166" srcset="/wp-content/uploads/2014/01/Screenshot_9.jpg 640w, /wp-content/uploads/2014/01/Screenshot_9-300x165.jpg 300w, /wp-content/uploads/2014/01/Screenshot_9-207x114.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Controllerの概念は、まずRouterというもの――これはBackboneのものなのですが、hashのフラグメントを常に監視しています。これがモジュール単位で、「クエスト」といったhashに書き換わると、クエストのControllerが呼ばれて、複数のviewとmodelを一気に作成します。そのうえで、クエストが必要としているCSS、i18nのファイルをロードします。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/01/Screenshot_10.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/Screenshot_10.jpg" alt="Screenshot_10" width="640" height="352" class="aligncenter size-full wp-image-4168" srcset="/wp-content/uploads/2014/01/Screenshot_10.jpg 640w, /wp-content/uploads/2014/01/Screenshot_10-300x165.jpg 300w, /wp-content/uploads/2014/01/Screenshot_10-207x113.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h2>アーキテクチャ</h2>

<p>M（Model）とV（View）とR（Router）、これにプラスして、beezのM（Manager）、C（Controller）。この5つの構造で、アプリケーションは成り立っています。</p>

<p>全体の流れとしては、Routerが会社に例えれば社長のような立場にあり、hashを常に監視していて、hashが変わったタイミングで、Controllerという部長クラスに指示を出します。Controllerは、その指令に従って、各社員にあたるModelに指令を下ろす。Modelは更に下のViewに指示。こうしてアプリケーションの見た目に反映される。このようなトップダウンの仕組みで、ボトムアップは基本NGですが、ViewからModelへは、ユーザーがタップした際のアラーム的なものは出ます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/01/Screenshot_11.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/Screenshot_11.jpg" alt="Screenshot_11" width="640" height="351" class="aligncenter size-full wp-image-4169" srcset="/wp-content/uploads/2014/01/Screenshot_11.jpg 640w, /wp-content/uploads/2014/01/Screenshot_11-300x164.jpg 300w, /wp-content/uploads/2014/01/Screenshot_11-207x113.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>これをまとめると、一番最初にログインした段階で、hashが何であれ、強制的に#mypageに書き換えます。それをRouterが捉え、該当するController（MyPageController）を呼び出します。MyPageControllerはViewとModelを作成。それぞれをひもづけて、いわば社員の“人員配置”をします。ここでユーザーがタップ操作をすると、それがModelに伝わり、Modelが上に伝える。例えば「area」というボタンがタップされたとすると、「#area」というhashに変えてくれというリクエストが行く。#hashに変わってからの流れはまた同様です。</p>

<h2>共通機能群</h2>

<p>最後に共通機能の部分について。先ほどから何度も登場しているアバターはCanvasで描かれていて、好きなところに移動もできますし、好きな服を着せてやることもでき、動作のバリエーションを登録しておけば、好きな動きをさせることも可能です。</p>

<p>服情報は、アバターの動きに合わせて服の位置等も変わるので、それに合わせてシート化されたものが用意されています。下に一見、横線のように見えるものがありますが、これは画像のデータを持っていて、腕の回転中心の座標情報などがここにあります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/01/Screenshot_12.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/Screenshot_12.jpg" alt="Screenshot_12" width="640" height="354" class="aligncenter size-full wp-image-4170" srcset="/wp-content/uploads/2014/01/Screenshot_12.jpg 640w, /wp-content/uploads/2014/01/Screenshot_12-300x165.jpg 300w, /wp-content/uploads/2014/01/Screenshot_12-207x114.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>あとは下から開いて左右に移動するなどといった、いかにもスマートフォンアプリっぽい画面制御。これもカスタマイズすれば、一部を固定し部分だけガリガリ動くといったことも可能です。</p>

<p>ポップアップもよく使いますが、これも基本形を作っておいて、それを適宜カスタマイズ。また、リロードが発生したときにエラーデータをキャッチし、ポップアップを自動で表示させるといったことも可能です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/01/Screenshot_13.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/01/Screenshot_13.jpg" alt="Screenshot_13" width="640" height="353" class="aligncenter size-full wp-image-4171" srcset="/wp-content/uploads/2014/01/Screenshot_13.jpg 640w, /wp-content/uploads/2014/01/Screenshot_13-300x165.jpg 300w, /wp-content/uploads/2014/01/Screenshot_13-207x114.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><DIV align=right></p>

<p style="padding-top: 16px; line-height: 1.55; color: #60aa2a;">（レポート：川畑英毅／撮影：高橋 佳代子）</p>

<p></div></p>

<p>【講演資料・セッション映像】</p>

<iframe width="560" height="315" src="//www.youtube.com/embed/GNpm5vpalbE" frameborder="0" allowfullscreen></iframe>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2013レポート]]></series:name>
	</item>
		<item>
		<title>HTML5を駆使したRakuten Technology Conference 2013サイト制作の内側</title>
		<link>/ogaoga/3370/</link>
		<pubDate>Fri, 06 Dec 2013 00:00:37 +0000</pubDate>
		<dc:creator><![CDATA[小笠原 努]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[デザイン]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Grunt]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Sass]]></category>

		<guid isPermaLink="false">/?p=3370</guid>
		<description><![CDATA[楽天では、10月26日に「Rakuten Technology Conference 2013」を開催し、多くの方にご来場頂きました。ご参加者の皆様、ありがとうございました！ 私が所属している「HTML5 Project...]]></description>
				<content:encoded><![CDATA[<p><a href="https://html5experts.jp/wp-content/uploads/2013/12/Rakuten-Technology-Conference-2013.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/12/Rakuten-Technology-Conference-2013-206x300.png" alt="Rakuten Technology Conference 2013 のトップページ" width="206" height="300" class="alignright size-medium wp-image-3380" style="border:1px solid gray" srcset="/wp-content/uploads/2013/12/Rakuten-Technology-Conference-2013-206x300.png 206w, /wp-content/uploads/2013/12/Rakuten-Technology-Conference-2013-705x1024.png 705w, /wp-content/uploads/2013/12/Rakuten-Technology-Conference-2013-142x207.png 142w, /wp-content/uploads/2013/12/Rakuten-Technology-Conference-2013.png 441w" sizes="(max-width: 206px) 100vw, 206px" /></a></p>

<p>楽天では、10月26日に「<a href="http://tech.rakuten.co.jp/" title="Rakuten Technology Conference 2013" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Rakuten Technology Conference 2013</a>」を開催し、多くの方にご来場頂きました。ご参加者の皆様、ありがとうございました！</p>

<p>私が所属している「HTML5 Project Team」が<a href="http://tech.rakuten.co.jp/timetable.html#session-e2" title="担当したセッション（HTML5 in Rakuten）" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">担当したセッション</a>では、今回制作を担当したカンファレンスのサイトについて発表をしました。技術者の祭典ということもあり、HTML5やフロントエンドの技術をふんだんに盛り込み、皆さんご存知の賑やかな楽天市場とはひと味違ったクールなサイトに仕上げました。ご覧頂けましたでしょうか？</p>

<p>当日のセッションの内容と重複しますが、今回は、HTML5の活用事例として、このサイトがどのような技術で作られたのか、<a href="http://www.slideshare.net/rakutentech/tech-conf2013e2" title="セッションでも使用したスライド（HTML5 in Rakuten）" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">セッションでも使用したスライド</a>を交えて紹介していきます。</p>

<h2>「Rakuten Technology Conference 2013」サイトのコンセプトと要求仕様</h2>

<p>このサイトでは、よくあるカンファレンスのサイトと同じく、講演者の紹介やタイムテーブルなどを公開しています。メインのターゲットユーザーはエンジニアで、日頃はPCをよく使い、最新のスマートフォンを持ち歩いていると想定しました。また、情報だけでなく技術面でもアピールする機会にしたかったこともあり、過剰なほどにあらゆる技術を盛り込んでいます。</p>

<p>サイトを構築する上で、いくつか要求仕様がありました。</p>

<ul>
    <li>情報の更新が頻繁に行われる</li>
    <li>SEOを考慮する</li>
    <li>サーバサイドスクリプトは使用しない</li>
</ul>

<p>これらを満たすために、</p>

<ul>
    <li>都度、複数のHTMLを編集するのではなく、スタッフから受け取ったデータ（JSON）からHTMLを生成する。</li>
    <li>サーバサイドスクリプトが使えないので、ローカルで生成する。</li>
</ul>

<p>という方針を定め、様々な技術を使って実現しました。</p>

<h2>活用した技術</h2>

<p>コンテンツ自体にもHTML5をはじめとした最新技術が使われていますが、制作面においても、最新のツールを駆使して効率化を図りました。</p>

<h3>Canvasを使ったインタラクティブな背景</h3>

<p>サイト全体にタイルをモチーフとした背景を採用していて、PCでご覧頂くと、マウスの動きに合わせてハイライトとされ、タイルが微妙に移動していることがわかるかと思います。この背景部分は、Canvas
で描画しています。PC向けにはタイルは固定幅ですが、タブレット向けでは画面幅に合わせてタイル幅を調整しています。また、Canvasの処理部分には<a href="http://www.createjs.com/#!/CreateJS" title="CreateJS" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">CreateJS</a>を使用しています。</p>

<h3>CSSによるスムーズなインタラクション</h3>

<p><a href="http://tech.rakuten.co.jp/" title="Rakuten Technology Conference 2013 のトップページ" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">トップページ</a>の「M」のタイルをクリックすると、実行委員長からのメッセージが表示されます。このとき、委員長の顔のタイルが拡張して、それに合わせて他のタイルが追いやられるようなアニメーションを行っています。この動きはCSSによって実現されていて、スマートフォンでも同様に動きます。これ以外にも、様々な場面でCSSによるアニメーションを使用しています。</p>

<h3>スマートフォン最適化とレスポンシブWebデザイン</h3>

<p>当日会場でスマートフォンからタイムテーブルを確認することを考慮し、スマートフォン対応をしました。タイムテーブルは縦横に長いコンテンツのため、スマートフォンとの相性は悪いのですが、時間帯ごとに横スクロールするようにして、閲覧性を確保しました。</p>

<p>各デバイスへの対応は、レスポンシブWebデザインで行いました。PCとスマートフォンでレイアウトが大きく異なるので、かなり苦戦しました。</p>

<p><a href="http://www.slideshare.net/rakutentech/tech-conf2013e2/92" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.34.58-PM-300x224.png" alt="ページの幅ごとのレイアウト" width="300" height="224" class="aligncenter size-medium wp-image-3387" style="border:1px solid gray" srcset="/wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.34.58-PM-300x224.png 300w, /wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.34.58-PM-207x154.png 207w, /wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.34.58-PM.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>また、それぞれの表示ごとにJavaScriptの処理も異なっているため、ウィンドウ幅を監視して、表示の切り替わり時にそれぞれ適切な処理を実行するような仕組みも取り入れました。</p>

<h3>お気に入りのセッションをブックマークできるWeb Storage</h3>

<p>タイムテーブルで、お気に入りのセッションをブックマークできる機能を追加しました。ブックマークするとブラウザのlocalStorageに保存され、いつでもお気に入りのセッションだけを表示できます。</p>

<p>また、ページ上部のSpeakersやUpdatesの部分に、赤枠の数字が表示されますが、これは、前回閲覧したときのデータをlocalStorageに保持し、今回読み込んだデータ数の差を表示して、何件更新されたかを示しています（表示すると消えます）。</p>

<p><a href="http://www.slideshare.net/rakutentech/tech-conf2013e2/116" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/12/Screen-Shot-2013-11-27-at-10.57.51-AM-300x224.png" alt="Notification feature の説明図" width="300" height="224" class="aligncenter size-medium wp-image-3391" style="border:1px solid gray" srcset="/wp-content/uploads/2013/12/Screen-Shot-2013-11-27-at-10.57.51-AM-300x224.png 300w, /wp-content/uploads/2013/12/Screen-Shot-2013-11-27-at-10.57.51-AM-207x154.png 207w, /wp-content/uploads/2013/12/Screen-Shot-2013-11-27-at-10.57.51-AM.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>PCで登録したブックマークをカンファレンス当日にスマートフォンで呼び出せるように、URLでその情報を引き継げるようにはしていたのですが、UIを提供できませんでした。来年はその辺りも提供できればと思っています。</p>

<h3>PhantomJS + UnderscoreJSで更新負荷を下げる</h3>

<p><a href="http://phantomjs.org/" title="PhantomJS" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">PhantomJS</a>は、コマンドラインから呼び出せるWebKitエンジンで、今回は、テンプレートとデータからHTMLを生成する処理で利用しました。テンプレートエンジンは<a href="http://underscorejs.org/" title="Underscore.js" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Underscore.js</a>を利用しました。</p>

<p>講演者の情報やセッションの時間などの情報は開催日まで頻繁に更新があり、その度にHTMLを修正しているとかなりの手間となります。そのため、それらの情報をまとめるカンファレンススタッフに、データをJSON形式で記述して納品してもらうようにしました。納品されたJSONファイルをUnderscore.jsでテンプレートに適用して、HTMLを出力しました。</p>

<p>データは構造化されているため、例えばタイムテーブルのデータを更新すると、タイムテーブルだけではなく、その講演者のページの情報も同時に変更されます。また、セッションの場所の名称が変更されたときも、１箇所修正するだけで、すべての名称が新しいものに置き換わります。</p>

<p><a href="http://www.slideshare.net/rakutentech/tech-conf2013e2/139" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.13.39-PM-300x225.png" alt="What&#039;s PhantomJS? の説明図" width="300" height="225" class="aligncenter size-medium wp-image-3393" style="border:1px solid gray" srcset="/wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.13.39-PM-300x225.png 300w, /wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.13.39-PM-207x155.png 207w, /wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.13.39-PM.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<h3>レスポンシブ対応がシンプルに記述できるSass / Compass</h3>

<p>CSSの生成には、おなじみ<a href="http://sass-lang.com/" title="Sass" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Sass</a>と<a href="http://compass-style.org/" title="Compass" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Compass</a>を使用しました。Sass内でif文を使って各デバイスの判定ができるようにして、レスポンシブ対応がシンプルに記述できました。</p>

<p><a href="http://www.slideshare.net/rakutentech/tech-conf2013e2/99" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.23.10-PM-300x224.png" alt="Coding into Condition branch の説明図" width="300" height="224" class="aligncenter size-medium wp-image-3395" style="border:1px solid gray" srcset="/wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.23.10-PM-300x224.png 300w, /wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.23.10-PM-207x154.png 207w, /wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.23.10-PM.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<h3>Gruntによる処理の自動化</h3>

<p>PhantomJSでのHTMLの生成、Sass/Compassのコンパイル、ファイル操作などは<a href="http://gruntjs.com/" title="Grunt" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Grunt</a>を使い自動化しました。PhantomJSの呼び出し部分は、いいモジュールを見つけられなかったため、シェルコマンドを呼び出すタスクを書きました。</p>

<p><a href="http://www.slideshare.net/rakutentech/tech-conf2013e2/127" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.26.25-PM-300x224.png" alt="Tools and flow の説明図" width="300" height="224" class="aligncenter size-medium wp-image-3397" style="border:1px solid gray" srcset="/wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.26.25-PM-300x224.png 300w, /wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.26.25-PM-207x154.png 207w, /wp-content/uploads/2013/12/Screen-Shot-2013-11-25-at-2.26.25-PM.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>このように、目的に合わせた最新技術に挑戦して、今回の「Rakuten Technology Conference 2013」のサイトを作り上げていて、私たちも様々な収穫がありました。まだ、パフォーマンスやユーザビリティなどで不十分な点もあるので、今後の課題として取り組みたいと思っています。</p>

<p>また、「サーバでスクリプト使えなくても、ローカルでRubyやPHPとか使えば楽じゃね？」という話もありますが（汗）、そこは我々「HTML5 Project Team」ということで、今回はフロントエンドの技術だけにこだわってみました。来年は、NodeベースのWebサーバに移行して、より簡単にサイトを更新できるようなことも考えています。</p>

<p>今後もこのような挑戦を続け、そこで得ていく知見を楽天のサービスに活かして行きたいと思っています。またこのような形で、いつもお世話になっているコミュニティにも還元できれば幸いです。今後ともよろしくお願いします。</p>

<p>このセッションのビデオは<a href="http://www.youtube.com/watch?v=BgCdgkHEn8M" title="YouTubeにアップ" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">YouTubeにアップ</a>されており、使ったスライドも<a href="http://www.slideshare.net/rakutentech/tech-conf2013e2" title="SlideShareで公開" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">SlideShareで公開</a>されています。もしよろしければそちらもご覧ください。</p>

<div style="float:left">

<!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ -->
<iframe width="398" height="224" src="//www.youtube.com/embed/BgCdgkHEn8M?rel=0" frameborder="0" 0="allowfullscreen" scrolling="yes" class="iframe-class"></iframe>

</div>

<div>

<!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ -->
<iframe src="http://www.slideshare.net/slideshow/embed_code/28399053" width="264" height="224" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" 0="allowfullscreen" class="iframe-class"></iframe>

</div>

<div style="clear:both"></div>
]]></content:encoded>
			</item>
		<item>
		<title>HTML5のSEO－マークアップで注意すべき３つのポイント</title>
		<link>/tsuj/2333/</link>
		<pubDate>Wed, 11 Sep 2013 03:00:25 +0000</pubDate>
		<dc:creator><![CDATA[辻 正浩]]></dc:creator>
				<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[マークアップ]]></category>

		<guid isPermaLink="false">/?p=2333</guid>
		<description><![CDATA[HTML5を採用したWebサイト構築をする際に、SEOはどのようなポイントを考慮すべきなのか？　HTML5でのマークアップ、リッチ表現、SEO効果のあるh要素の使い方、HTML5で追加・削除・復活された要素などについて解...]]></description>
				<content:encoded><![CDATA[<p>HTML5を採用したWebサイト構築をする際に、SEOはどのようなポイントを考慮すべきなのか？　HTML5でのマークアップ、リッチ表現、SEO効果のあるh要素の使い方、HTML5で追加・削除・復活された要素などについて解説します。</p>

<!-- more -->

<h2>HTML5化によるSEO効果の影響はあるか</h2>

<p>WebサイトをHTML5でマークアップをする際、特にHTML4などからHTML5にリニューアルする場合に、それによって検索エンジンによる評価が変化するのかどうかは非常に気になる問題です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/09/dtl_thm_016.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/09/dtl_thm_016.png" alt="dtl_thm_016" width="207" height="156" class="alignright size-full wp-image-2368" /></a></p>

<p>各検索エンジンでは、この疑問について公式に説明しています。GoogleはHTML5化することでプラスにもマイナスにもならないと度々<a href="https://productforums.google.com/forum/#!searchin/webmasters/authorname:johnmu|sort:date/webmasters/ihmDyu5ykrs/Kq0VngOh71oJ" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">公式に言及</a>していますし、Bingは「<a href="http://www.bing.com/blogs/site_blogs/b/webmaster/archive/2013/08/23/list-of-things-you-really-ought-to-know-as-an-seo-today.aspx" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">List of things you really ought to know as an SEO today</a>(今SEOとして本当に知っておきたいこと)」と題した記事の中で、HTML5について言及しています。こうした情報を併せて考えると、主要な検索エンジンは、HTML5化は問題ない、もしくは推奨しているとさえ言っても良いでしょう。</p>

<p>しかし、本当にHTML5化することでSEO上の問題は起きないものでしょうか。
私はSEOの専門家として、HTML5のWebサイトに多く関わってきました。お客様のWebサイトでのHTML4からHTML5への変更も何度か経験しましたが、実際HTML5化で検索流入が伸びたことも減ったこともありません。しかし過去に数度、HTML5化を含むリニューアルの結果、大幅に検索流入を落としたWebサイトの話を聞いたことがあります。</p>

<p>「問題ない形のHTML5化」であれば、検索エンジンはその評価を変えることはないと私は考えています。しかし、SEOの知識を一切持たずにHTML5化すると、犯しがちなミスもあります。
本稿では、SEO上の問題を起こさずにHTML5化するために注意すべきポイントを説明しましょう。</p>

<h2>HTML5のマークアップをする際の注意点</h2>

<h3>FlashからHTML5へ。リッチな表現のSEO手法</h3>

<p>ほんの1～2年前までWebでリッチな表現をするには主にFlashが使われていましたが、FlashコンテンツのSEOには明確なベストプラクティスがありました。それは、FlashコンテンツはJavaScriptを使って呼び出すようにし、JavaScriptを扱えない環境向けにテキスト情報を追加するという方法です。noscript要素やSWFObject等を使った代替要素としてのテキスト情報を加えることや、それに加えてページ分割やSWFAddressを併用することで、Flashであっても非常に高いレベルの検索エンジン対応が行うことが可能でした(この詳細は4年前の拙筆ですが<a href="http://japan.internet.com/busnews/20090825/8.html" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">この記事</a>に詳細を記してあります)。</p>

<p>FlashコンテンツのSEOは、このように代替要素を使用する方法が一般的でした。その手法を検索エンジンも公式に推奨する場合もありましたし、検索エンジンのアルゴリズムとしても、Flashを認識するようになっていきました。その結果、Flashを活用したリッチなコンテンツを検索できる状態にする方法が確立したのです。しかしそのようなFlashの登場から、そのSEOのベストプラクティスが確立するまでには、長い期間を必要としました。</p>

<p>さて現在ではFlashを使う機会は減り、同じニーズに対してHTML5を使うシーンが多くなりました。HTML5では様々な描画を行うcanvas要素や、動画を再生するvideo要素、音声を再生するaudio要素などが追加されています。それらの新要素を中心としたWebページを制作する場合、どのように検索エンジンに認識させるべきか、という議論はほぼ行われていません。</p>

<p>この方法として、いくつかの方法が考えられます。例えばcanvas要素は、要素内にフォールバック・コンテンツとして、テキスト情報を組込むことができます。2013年9月1日現在、このテキスト情報はGoogle、Bingの検索エンジンでは認識しています。しかし一部の検索エンジンでは、canvas要素のフォールバック・コンテンツを認識しませんし、サイト内検索等で使われるシステムでは認識しないことがありました。対応されている検索エンジンにおいても、検索エンジンが公式にサポートしているものではありません。今後扱いがどのように変わっていくかも不透明でしょう。フォールバック・コンテンツだけに頼ることは不安があります。</p>

<p>Flashコンテンツが一般化することで、検索エンジンに認識させる様々な方法が試されて検索エンジンも対応を始めたように、今後HTML5が一般化した後にリッチコンテンツを検索エンジンに認識させるためのベストプラクティスが出てくるものでしょう。しかしそれが確立していない現状では、いろいろと試す必要があるのです。</p>

<p>さて、実際に現段階ではどのようにするべきでしょうか。まず考えられるのは別ページを作ることです。Flashが一般化する前は、Flashを中心としたページとは別に同じ内容をテキスト中心で知らせるWebページが作られていたように、テキスト中心の別ページを作ることが確実でしょう。ただそれが困難な場合には、何らかの方法でテキストでの代替要素を配置するしかありません。FlashはJavaScriptで呼び出すことが多かったため、代替要素が配置しやすかったのですが、JavaScriptを使わないHTML5の新要素では別の方法を考える必要があります。</p>

<p>代替要素を作るためには、CSSを利用した切り替えを用意しておくことが、現段階では一番お勧めできる方法です。ユーザへの適切な情報提供を目的としてテキストを切り替える形で配置することは問題がないと、Googleは<a href="http://www.youtube.com/watch?v=EsW8E4dOtRY" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">公式に説明しています</a>ので、Canvas等のリッチな表現を使いたくない人向けの情報も同ページで提供した上で、切り替えて使用できるようにするのが最も適切でしょう。</p>

<p>canvas要素の場合にはフォールバック・コンテンツとしてのテキスト情報追加も選択肢の一つです。先にも書きました通り、一部検索エンジンは対応していませんし、今後の扱いは不透明です。しかし日本で圧倒的なシェアを持つGoogleは現段階では対応していますし、今後についても、HTML5の公式仕様に基づいたマークアップを大きく不利にする可能性は低いものです。対応しなくてはならない検索エンジンがGoogleだけなのであれば、フォールバック・コンテンツは良い選択肢でしょう。</p>

<p>ここまで、リッチな表現のSEO手法について書いてきましたが、本来リッチな表現を検索させる上で、最も重要な事は技術的な要件ではありません。そもそもの話ですが、検索される必要がある情報をリッチコンテンツを中心として制作するのが誤りでしょう。そのWebページで伝える事を表現するのに適切な手法は何なのか、ということから考えてみることをお勧めします。</p>

<h3>SEO効果があるh要素の使い方</h3>

<p>HTML5とSEOを考える上で、よく言及されるのはhx要素をどうするかということです。</p>

<p>HTML5ではh1要素を複数設置できるようになりました。しかしh1要素の扱いはSEOの観点で極めて重要です。Googleが公式に配布しているSEO初級者向けの「<a href="https://static.googleusercontent.com/external_content/untrusted_dlcp/www.google.co.jp/ja/jp/webmasters/docs/search-engine-optimization-starter-guide-ja.pdf" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">検索エンジン最適化スターターガイド</a>」でも「見出しタグを適切に使おう」として、1ページ丸々を費やしてユーザに説明をしています。実際、数年前のように、h1要素とするだけで順位アップといった単純な効果はありませんが、hx要素をうまく使って文書を整理することは、検索エンジンもその文書の構造を把握しやすくなり、様々な面でプラスとなります。</p>

<p>h要素のSEO要件が語られる際に必ず言われることとして、「h1要素はそのページのテーマを示す内容として、1ページに1つのみにする」があります。しかしHTML5では、h1要素を複数使用することは、仕様として推奨されています。では、HTML5の仕様どおりにh1要素を複数でマークアップすることは、SEOにとって不利になるものでしょうか？</p>

<p>これは不利になる場合もあるし、ならない場合もあるというのが私の考えです。実際にWebページによって、hx要素の番号がどうなっていても検索エンジンの評価に影響を与えないような場合もあれば、甚大な影響を与えるケースも確認しています。</p>

<p>有力な検索エンジンは。ページ内のどこが重要な情報かを識別しようとしています。サイドバーやフッターなどに記された情報は、あまり検索結果に表示されづらいですし、メインカラムの情報は表示されやすいということは、少し注意して検索エンジンを利用しているとわかることでしょう。これはサイドバーなどに共通の情報が記載されがちなことが原因である場合もありますが、例えそのページにしかない情報がサイドバーに記載されていても、検索結果には表示されづらいものです。</p>

<p>どこの部分が重要かという検索エンジンの判別は、一つの要因だけで行うものではありません。様々な要因を使って判定していると考えられますが、私はその要因の一つとしてhx要素の番号が使われていると考えています。hx要素の番号がその判別に重要な役割を果たしているようなWebページでは、hx要素を全てh1要素とすると流入の減少につながりますし、他の要因が重要なページでは大きな影響が出ないことでしょう。</p>

<p>そのため、必ずしも全サイトで必須とは言い切れませんが、SEOを考えるとやはりh1要素は1つで、h2要素以後もうまく使って文書構造を示しておくのが安全と考えられます。</p>

<p>先に述べたとおり、HTML5化したサイトではh1要素を複数使うことが一般的です。hx要素は全てh1要素にした上で、section要素の入れ子構造で文書構造を示すのはHTML5の仕様上正しいとされていますが、h1要素は1つとしてh2要素を中見出し、h3要素を小見出し……と使っていっても問題はないとされています。どちらでもよいのであれば、SEOには確実に問題がない後者の方法を使うべきでしょう。</p>

<p>とは言え、大規模サイトでページ内のパーツを様々なページで流用する場合に、hの番号の整合性が取りづらいため、全てh1要素にするWebサイトも多くあります。そのような場合もページのテーマとなる部分一箇所だけにh1要素を適用して、流用するパーツにはh1要素を使わずにh2要素から始めるようにしておくだけで大きなSEO上の問題は避けられるでしょう。流用する部分は全てh2要素から始めておくことは全ての使用ケースで問題がないわけではないかもしれません。しかし、全てh1要素にすることで発生するSEO上のリスクを考えると、どちらかというと問題は小さいと考えます。</p>

<p>HTML5の把握でレベルが高いGoogleの検索システムは、日本では圧倒的なシェアを持っています。しかし、100%ではありません。Google以外の検索エンジンでは、まだHTML5をうまく扱えないものがあります。その際に一番大きな問題となるのはこのhx要素です。実際、HTML5化した際にある検索エンジンでは、h1要素が複数あることで大きな問題となっている事象を確認しています。h1要素は検索エンジンスパムにもよく使われるため、非常に問題を起こしやすいものでもあるのです。</p>

<p>ご存知の通り、HTML5は普及したといえる段階ではありません。現状ではHTML5に対応していない環境のことを考える必要があります。そのためにもh1要素は1つにしておくべきでしょう。</p>

<h3>HTML5で追加・削除・復活した要素</h3>

<p>HTML5では、いくつかの要素が追加・削除・復活しました。</p>

<p>まず気になるのは、nav要素やfooter要素などの意味を持った要素でしょう。これらの要素は、現段階での私の観測の範囲では、検索エンジンからはこれまでのdiv要素と同じ扱いを受けているようです。しかし今後HTML5が普及した際には、様々な形で検索エンジンも活用し出すことが考えられます。</p>

<p>今後を考えれば、ページの情報を正しいHTML5でマークアップをしておくことが、唯一の対策となるでしょう。検索エンジンは正しいHTMLしか評価しないわけではありません。インターネット上で公開されているWebページのほとんどは、マークアップ上のミスを含んでいますので、主要検索エンジンはそのミスを織り込んでWebページを認識しようとしています。HTML5は、現段階では人によって使い方に大きなブレがあります。そのため必ずしも正しいHTML5しか評価できないように、アルゴリズムを組んでくるはずはないと考えられます。しかし今後どのような評価を行ってくるかはわかりませんし、全ての検索エンジンが、HTMLのミスを織り込めるほどの技術を持っているとは限りません。やはり最大限仕様上は、正しい形でのマークアップをお勧めします。</p>

<p>次に注意するべきポイントとして、これまでは推奨から外れていたものの復活した要素です。</p>

<p>特に注意するべきはiframe要素でしょう。XHTMLで非推奨とされていたiframe要素も、HTML5で復活したことで、使用するWebサイトも増えているようです。しかし、検索エンジンはiframe要素の扱いが得意ではありません。検索エンジンは、iframe要素を呼び出すURLへのa要素と同様に扱うのが通常ですが、iframe要素で呼び出すコンテンツをそのページのコンテンツとして認識している例もあります。</p>

<p>iframe要素に関わるアルゴリズムも進化を続けていますが、現段階では「iframe要素内のコンテンツは、ページ内のコンテンツとして認識されることもあれば、されないこともある」という非常に微妙な状態です。そのためiframe要素で呼び出されるコンテンツは「検索対象になるかもしれないしならないかもしれない」ものとして扱う必要があります。検索されるコンテンツを作る上では非常に使いづらいものですので、HTML5で復活したといっても、SEOを考える必要があるWebページでは使用しないことをお勧めします。</p>

<p>b要素やi要素など、スタイルを使いながら目立たせるために使われることが多いものの、セマンティクス上、重要という意味を持たない要素があります。それとは違い、strong要素については「他の部分に比べて重要」という意味を持ちます。SEOの知識としてstrong要素は「他に比べて重要」という意味であり多く使うと意味が薄れるため、限定的に使うべきとご存知の方もいるかもしれません。</p>

<p>ではHTML5で復活したb要素などは、無制限に使ってもいいのでしょうか。私はそれを勧めません。それは過去の期間において、b要素もstrong要素と同様に「他に比べて重要」という意味を検索エンジンが認識していたことがあります。現段階の認識が変わっているか確認できていませんが、継続している可能性もあります。その場合は、b要素・i要素が大量にあることで、strong要素も意味がなくなる可能性はあります。</p>

<p>HTML4では、b要素やi要素は使わずにCSSで表現するのがWeb制作の常識でした。HTML5でb要素が復活しましたが、使うことが義務づけられたわけではありません。これまで通りのspan要素とCSSを使ったマークアップをしておくことが無難と考えられます。</p>

<h2>SEOを考えるとHTML5を使うべきか？</h2>

<p>SEO観点でのHTML5でのマークアップにおいて注意するべきポイントを説明してきました。</p>

<p>現段階ではHTML5は普及しきっていませんので、検索エンジンの対応も中途半端です。その状況で何も考えずにサイトをHTML5化した場合、SEOに悪影響を及ぼす可能性はあります。</p>

<p>では、SEOのためにはHTML5は選択すべきではないのでしょうか。それは違います。今後の長期的なWebサイト運営を考えると、私はHTML5化を強くお勧めします。今後、HTML5を採用したWebサイトにはSEO観点でも何らかの利点が出る可能性が高いと考えます。ページの論理構造を作りやすいマークアップや、セマンテックウェブとの適合性は、今後のSEOで利点が出てくると考えられますし、様々な拡張性はより魅力的なコンテンツを作るのにも有益になります。それはSEOには極めて重要なポイントです。通常のWebサイトでは、HTML5を採用するかどうかという選択が行えるタイミングは、数年に一度しかないでしょう。選択できるタイミングでHTML5を選択しなければ、次に変更できるのは数年後かもしれません。その頃にはすでに、HTML5のSEO観点での利点は発生している可能性は否定できません。</p>

<p>冒頭でHTML5化を含むリニューアルで、大幅に検索流入を落としたWebサイトの実例があると述べました。それは詳細を調査すると、必ずしもHTML5が悪いわけではありませんでした。あるWebサイトでは、テキストでの代替コンテンツを含んだFlashコンテンツを全廃して代替コンテンツを含まないCanvasに置き換えたり、iframeを使い始めて検索流入を落としたということもありました。この問題についても、HTML5が悪いわけではありません。SEOの基礎知識がないことと、HTML5の正しい知識が少なかったことが問題です。その二つの知識があれば、HTML5はSEO観点で怖いものではありません。</p>

<p>まずは、今回ご紹介した3つのポイントに注意していれば、大きな問題になることはないでしょう。さらにHTML5を活用するために、SEOも少し配慮してWebサイト構築を進められることをお勧めします。</p>
]]></content:encoded>
			</item>
		<item>
		<title>リアルタイムにライブ映像をマンガ化「マンガテレビ」アーキテクチャ編</title>
		<link>/komasshu/1649/</link>
		<pubDate>Mon, 26 Aug 2013 04:00:45 +0000</pubDate>
		<dc:creator><![CDATA[小松 健作]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebRTC]]></category>
		<category><![CDATA[WebSocket]]></category>
		<category><![CDATA[Webアプリ]]></category>

		<guid isPermaLink="false">/?p=1649</guid>
		<description><![CDATA[「漫画家の先生をゲストに迎えた対談イベントで、“マンガ”をフィーチャーしたエンターテインメントを最新のWeb技術で作れないだろうか？」そんな思いから生まれた「マンガテレビ」。映像をリアルタイムで“マンガ化”するだけでなく...]]></description>
				<content:encoded><![CDATA[<p>「漫画家の先生をゲストに迎えた対談イベントで、“マンガ”をフィーチャーしたエンターテインメントを最新のWeb技術で作れないだろうか？」そんな思いから生まれた「マンガテレビ」。映像をリアルタイムで“マンガ化”するだけでなく、イベントをもり上げる各種機能が盛りだくさん。今回は、そのアーキテクチャを紹介します。</p>

<p><span id="more-1649"></span></p>

<h1>マンガテレビの紹介</h1>

<p>「マンガテレビ」は最新のWeb技術をふんだんに活用し、イベント映像を“リアルタイムでマンガ化”するエンターテイメントツール。俗にいう「技術の無駄遣い」Webアプリケーションです。我らが、HTML5 Experts.jpの編集長「白石俊平」氏が開催している<a href="http://www.kakkoii.tv/events/20130726/index.html" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">「（白石俊平と）カッコいいやつら」</a>のイベント用ツールとして開発しました。</p>

<p>「マンガテレビ」を説明するのに言葉は不要。とにかく、<a href="https://app.html5experts.jp/manga/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">サイトにアクセス</a>してみてください。ただし、Chromeでしか動作しません（後述のWeb Speech API利用のため）ので、その点ご注意ください。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/68fdef15b331b326d339ad36e4fc77c4.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/68fdef15b331b326d339ad36e4fc77c4-300x244.png" alt="スクリーンショット 2013-08-23 1.13.22" width="300" height="244" class="alignnone size-medium wp-image-1663" srcset="/wp-content/uploads/2013/08/68fdef15b331b326d339ad36e4fc77c4-300x244.png 300w, /wp-content/uploads/2013/08/68fdef15b331b326d339ad36e4fc77c4-1024x834.png 1024w, /wp-content/uploads/2013/08/68fdef15b331b326d339ad36e4fc77c4-207x168.png 207w, /wp-content/uploads/2013/08/68fdef15b331b326d339ad36e4fc77c4.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p><i>なお、初回アクセス時は、下図のようにカメラとマイクへのアクセスを確認するダイアログが画面上部に表示されますので、「許可」をクリックしてください。</i></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/360b376de712a69fa57fc0943f063a43.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/360b376de712a69fa57fc0943f063a43-300x18.png" alt="スクリーンショット 2013-08-23 11.26.03" width="300" height="18" class="alignnone size-medium wp-image-1834" srcset="/wp-content/uploads/2013/08/360b376de712a69fa57fc0943f063a43-300x18.png 300w, /wp-content/uploads/2013/08/360b376de712a69fa57fc0943f063a43-1024x62.png 1024w, /wp-content/uploads/2013/08/360b376de712a69fa57fc0943f063a43-207x12.png 207w, /wp-content/uploads/2013/08/360b376de712a69fa57fc0943f063a43.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/79442564a542884b7ec637d465e771b2.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/79442564a542884b7ec637d465e771b2-300x36.png" alt="スクリーンショット 2013-08-23 11.26.21" width="300" height="36" class="alignnone size-medium wp-image-1833" srcset="/wp-content/uploads/2013/08/79442564a542884b7ec637d465e771b2-300x36.png 300w, /wp-content/uploads/2013/08/79442564a542884b7ec637d465e771b2-1024x125.png 1024w, /wp-content/uploads/2013/08/79442564a542884b7ec637d465e771b2-207x25.png 207w, /wp-content/uploads/2013/08/79442564a542884b7ec637d465e771b2.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>かの有名アプリ<a href="http://tokyo.supersoftware.co.jp/mangacamera/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">「漫画カメラ」</a>を最大限に「リスペクト」したことは一目瞭然です。なお、「マンガ化」のアルゴリズムは<a href="http://www.slideshare.net/masayukimaekawa/java-script-14727253" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">こちらのslideshare(スライド9)</a>を参考にさせていただきました。</p>

<p>しかし、そのままリスペクトするだけではなく、Webならではの機能をふんだんに盛り込みました。</p>

<p>盛り込んだ機能は大きく二つ。一つ目は「みんなで『かっこいいね！！』」機能です。これにより視聴者参加型の「マンガテレビ」を実現しました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/6edcbc8f5a028530f0da3a910a11c1b6.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/6edcbc8f5a028530f0da3a910a11c1b6-300x257.png" alt="スクリーンショット 2013-08-23 1.17.29" width="300" height="257" class="alignnone size-medium wp-image-1665" srcset="/wp-content/uploads/2013/08/6edcbc8f5a028530f0da3a910a11c1b6-300x257.png 300w, /wp-content/uploads/2013/08/6edcbc8f5a028530f0da3a910a11c1b6-1024x880.png 1024w, /wp-content/uploads/2013/08/6edcbc8f5a028530f0da3a910a11c1b6-207x177.png 207w, /wp-content/uploads/2013/08/6edcbc8f5a028530f0da3a910a11c1b6.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>Webの特徴は、みんなが簡単に繋がれること。そこで、白石さん謹製の<a href="http://zapper.kakkoii.tv/?eventId=51ecca6063b71c4b39000012" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">「かっこいいねボタン」</a>と連携し、様々なエフェクトがかかるようにしました。「ボタン」を3回連打すると「ざわ・・」、5回連打すると「ゴ・・・」が画面を横切るという仕掛け。イベント参加者が「ちょっと、かっこいいね！」と連打すれば「ざわざわざわ・・」が、「すごい！！かっこいいね！！」と連打すると「ゴゴゴゴゴゴ・・・」と文字が横切っていきます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/bfea3c4a6086dc8d10b68cd13375360a.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/bfea3c4a6086dc8d10b68cd13375360a-202x300.png" alt="スクリーンショット 2013-08-23 1.18.43" width="202" height="300" class="alignnone size-medium wp-image-1666" srcset="/wp-content/uploads/2013/08/bfea3c4a6086dc8d10b68cd13375360a-202x300.png 202w, /wp-content/uploads/2013/08/bfea3c4a6086dc8d10b68cd13375360a-689x1024.png 689w, /wp-content/uploads/2013/08/bfea3c4a6086dc8d10b68cd13375360a-139x207.png 139w, /wp-content/uploads/2013/08/bfea3c4a6086dc8d10b68cd13375360a.png 431w" sizes="(max-width: 202px) 100vw, 202px" /></a></p>

<p>もう一つは、「自動吹き出し機能」。最新Webの目玉機能の一つ &#8220;Web Speech API&#8221; を使い自動認識した音声を、吹き出しとして表示する機能です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/27f0501bca54ebef6f534cdc9efb4747.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/27f0501bca54ebef6f534cdc9efb4747-300x260.png" alt="スクリーンショット 2013-08-23 1.20.24" width="300" height="260" class="alignnone size-medium wp-image-1667" srcset="/wp-content/uploads/2013/08/27f0501bca54ebef6f534cdc9efb4747-300x260.png 300w, /wp-content/uploads/2013/08/27f0501bca54ebef6f534cdc9efb4747-1024x889.png 1024w, /wp-content/uploads/2013/08/27f0501bca54ebef6f534cdc9efb4747-207x179.png 207w, /wp-content/uploads/2013/08/27f0501bca54ebef6f534cdc9efb4747.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>音声認識には誤認識がお約束ですが、その誤りっぷりが相まって、さらにエンターテイメント性を引き立ててくれています。なお、吹き出しの表示位置を調整するために、顔検出機能を利用しています。技術の無駄遣いっぷりは半端ではありません。</p>

<p><li>なお、自動吹き出し機能を利用する際には、<a href="https://app.html5experts.jp/manga/#face" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">#face</a>をハッシュ指定し、顔検出機能をONにする必要があります。</li></p>

<p>また、&#8221;WebSpeech API&#8221;による音声認識機能を応用し、音声コマンド機能も実装しました。例えば「バーン」と話すと、画面に集中線と「バーン」が表示されます。イベントの盛り上がりに欠かせない機能です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/a5976323aff9cdc6754bc84635e3d0a8.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/a5976323aff9cdc6754bc84635e3d0a8-300x260.png" alt="スクリーンショット 2013-08-23 1.21.45" width="300" height="260" class="alignnone size-medium wp-image-1668" srcset="/wp-content/uploads/2013/08/a5976323aff9cdc6754bc84635e3d0a8-300x260.png 300w, /wp-content/uploads/2013/08/a5976323aff9cdc6754bc84635e3d0a8-1024x889.png 1024w, /wp-content/uploads/2013/08/a5976323aff9cdc6754bc84635e3d0a8-207x179.png 207w, /wp-content/uploads/2013/08/a5976323aff9cdc6754bc84635e3d0a8.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>なお、開発メンバーは、筆者を含め HTML5Experts.jp 編集部メンバー4名で開発しました。</p>

<h1>マンガテレビ実装のポイント</h1>

<p>この「マンガテレビ」の実装のポイントを紹介します。本稿では、以下の4点について紹介します。</p>

<ul>
<li>WebRTC と HTML5 canvas による映像のリアルタイムマンガ化</li>
<li>WebSpeech API による音声認識</li>
<li>headtrackr.js による顔検出</li>
<li>WebSocket によるインタラクティブ機能</li>
</ul>

<h2>getUserMediaとHTML5 canvasによる映像のリアルタイムマンガ化</h2>

<p>最初に紹介するのは「マンガテレビ」の基本機能。リアルタイムで映像を「マンガ」にする機能の実装方法の紹介です。</p>

<p>ステップは以下のようになります。</p>

<ol>
<li>WebRTC の getUserMedia() により、カメラから映像を取得する。</li>
<li>HTML5 canvasのgetImageData() により、映像から画像データを取り出す。</li>
<li>画像データにフィルター処理を行い、マンガ化する。</li>
<li>requestAnimationFrame() により、画像変換処理を繰り返す。</li>
</ol>

<h3>WebRTC の getUserMedia() により、カメラから映像を取得する。</h3>

<p>まず、カメラから映像を取得します。これを行うためWebRTCのgetUserMedia()を使っています。(前述のとおり、Chromeを前提としているため、接頭辞 <abbr>webkit</abbr> を記述しています）</p>

<p><code lang="javascript">
$v_ = $("video");</p>

<p>// カメラからのストリーム映像を取得し、videoノードのsrc属性にURL指定する
navigator.webkitGetUserMedia({video: true, audio: false}, function(stream){
  var url = window.webkitURL.createObjectURL(stream);
  $v_[0].src = url;
  $v_[0].play();
});
</code></p>

<p>取得するのは映像のみのため、第一引数のaudioプロパティはfalseとしました。第二引数は取得成功時のコールバック関数で、カメラから取得した映像はインスタンスstreamに返されます。ここで、「マンガ化」の変換処理を行うためには、一旦streamをURLに変換し、videoノードにsrc属性として指定する必要があるため、 createObjectURL()を用いています。また、video ノードは、play()をコールしないと映像再生が開始しないため、このタイミングで呼んでいます。</p>

<h3>HTML5 canvasのgetImageData() により、映像から画像データを取り出す。</h3>

<p>マンガ化する画像変換処理を行うためには、映像から画像のピクセルデータを取得しなければなりません。このため一コマづつcanvasに画像として書きだし、getImageData()により、取得します。</p>

<p><code lang="javascript">
var canvas = $("canvas")[0]
  , ctx_ = canvas.getContext('2d');</p>

<p>// 映像の一コマを一旦canvasに画像として書き出す
ctx_.drawImage($("video")[0], 0, 0)</p>

<p>// canvasから画像のピクセルデータを取得する
var imgData = ctx_.getImageData(0, 0, 640, 480)
</code></p>

<h3>画像データにフィルター処理を行い、マンガ化する。</h3>

<p>取得した画像データに対してフィルター処理を行いマンガ化します。アルゴリズムは以下の通りです。</p>

<ol>
<li>画像を黒・スクリーントーン・白の3階調化する。</li>
</ol>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/e80a00d615240a9c282ed400de5dd322.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/e80a00d615240a9c282ed400de5dd322-300x260.png" alt="スクリーンショット 2013-08-23 1.27.21" width="300" height="260" class="alignnone size-medium wp-image-1670" srcset="/wp-content/uploads/2013/08/e80a00d615240a9c282ed400de5dd322-300x260.png 300w, /wp-content/uploads/2013/08/e80a00d615240a9c282ed400de5dd322-1024x889.png 1024w, /wp-content/uploads/2013/08/e80a00d615240a9c282ed400de5dd322-207x179.png 207w, /wp-content/uploads/2013/08/e80a00d615240a9c282ed400de5dd322.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<ol>
<li>エッジ抽出を行い、階調画像に縁取りを行う。</li>
</ol>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/3f19b7ae945f638e8725b9146ce4dc17.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/3f19b7ae945f638e8725b9146ce4dc17-300x260.png" alt="スクリーンショット 2013-08-23 1.26.57" width="300" height="260" class="alignnone size-medium wp-image-1672" srcset="/wp-content/uploads/2013/08/3f19b7ae945f638e8725b9146ce4dc17-300x260.png 300w, /wp-content/uploads/2013/08/3f19b7ae945f638e8725b9146ce4dc17-1024x889.png 1024w, /wp-content/uploads/2013/08/3f19b7ae945f638e8725b9146ce4dc17-207x179.png 207w, /wp-content/uploads/2013/08/3f19b7ae945f638e8725b9146ce4dc17.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p><i>（階調処理やエッジ抽出の具体やコードについては次回の記事で紹介します）</i></p>

<p>上記フィルター処理を行ったデータをcanvasに描画し、「マンガ化」された画像が表示されます。</p>

<p><code lang="javascript">
// 「マンガ化」フィルター処理後のデータを、canvasに書き出す。
ctx_.putImageData(toon, 0, 0)
</code></p>

<h3>requestAnimationFrame() により、画像変換処理を繰り返す。</h3>

<p>上記操作を16msec毎にループ処理することで、60fpsで「マンガ化」された映像が表示されます(パラパラ漫画の要領です)。このような処理を行う際、これまでだと</p>

<p><code lang="javascript">
// doToon()は、映像の一コマを画像変換する関数
setInterval(doToon, 16);
</code></p>

<p>と、setInterval()を用いるのが普通でした。しかしながら、このコードでは、doToon()の処理に16msec以上かかった場合、処理がスタックしていく問題が生じます。ここで、requestAnimationFrame() を用いると、doToon の処理時間に応じ、画像フィルター処理が繰り返し実行され、適切なフレームレートでマンガ化された映像が表示されます。</p>

<p><code lang="javascript">
requestAnimationFrame(doToon)
</code></p>

<h2>WebSpeech API による音声認識</h2>

<p>二番目に紹介するのは、音声認識機能です。認識した音声を吹き出しに自動表示したり、音声コマンドを使ったりするためにこの機能を利用しています。</p>

<p>音声認識を実現するために、Chrome で試験実装されている <a href="https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">WebSpeech API</a> を利用しました。ちなみに、このWebSpeech APIはW3Cで正式なドラフトも出ていない実験的なAPIです。音声認識が簡単にできてしまうなんて、ほんとブラウザの進化は留まるところを知りません。今後、本格的な仕様化や実装が進んでいくことでしょう。楽しみですね。</p>

<p>インスタンス生成後、start()メソッドをコールすると、音声認識が始まります。</p>

<p><code lang="javascript">
var rec = new webkitSpeechRecognition();</p>

<p>rec.continuous = true; // 音声認識を継続する
rec.interimResults = true; // 認識処理中の候補も返す
rec.lang = 'ja-JP'; // 認識モードを日本語にする</p>

<p>rec.start(); // 音声認識を開始
</code></p>

<p>音声が認識されると、&#8217;result&#8217; イベントが発生します。認識結果は、SpeechRecognitionEventオブジェクトとして返されます。</p>

<p><code lang="javascript">
rec.onresult = function(ev) {
  for(var i = ev.resultIndex, l = ev.results.length; i &lt; l; i++) {
    if(ev.results[i].isFinal) {
      // 音声認識が完了した
      var res = ev.results[i][0].transcript; // 音声認識結果
    } else {
      // 音声認識途中
      var res = ev.results[i][0].transcript; // 音声認識中の途中結果
    }
  }
}
</code></p>

<p>「マンガテレビ」では、認識結果の値をチェックし「バーン」や「ドーン」などの場合は、音声コマンドとして認識し、映像エフェクトを実施。それ以外の場合は、吹き出しに表示するといった処理を行っています。</p>

<p>なお、イベント中講演者が話し続けているようなケースだと、ずっと音声認識中となり、認識が完了しないケースが頻繁に発生します。これを避けるため</p>

<p><code lang="javascript">
// 認識結果の文字列長が15文字を超えたら、認識を再起動する。
if(res.length > 15) {
  rec.stop();
  rec.start();
}
</code></p>

<p>のように、認識結果が15文字を超えた時点で音声認識を再起動する処理を入れています。</p>

<p>なお、再起動の際に、サイトのプロトコルスキーマが<strong>httpsでない</strong>場合、毎回音声認識の許可を求めるダイアログが表示されてしまいます。注意してください。</p>

<h2>headtrackr.js による顔検出</h2>

<p>次に紹介するのは、顔検出機能です。音声を表示する吹き出しや、音声コマンドで集中線を出す際の位置を決めるために、この機能を利用しています。</p>

<p>JavaScript で顔検出を行うライブラリーとして <a href="https://github.com/wesbos/HTML5-Face-Detection" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">face.js</a> が有名ですが、検出スピードに難があるため、より高速に動作する <a href="https://github.com/auduno/headtrackr" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">headtrackr.js</a> を用いました。</p>

<p>headtrackr.jsは、最初に顔検出を行うまでは低速ですが、一旦検出が完了すると、それ以降は検出した顔の周辺のみを検出対象とするため、face.jsに比べ格段に高速動作します。もちろんハードウェアに依存しますが、筆者の Mac Book Pro では、概ね30fps(frame per second : 1 秒辺りのフレーム数）が得られました。ただし、検出できる顔は一つのみとなりますので、その点は注意してください。</p>

<p>Tracker オブジェクトのインスタンスを生成した後、検出対象のビデオ要素と、検出処理に用いるcanvas要素を指定し、start()メソッドを呼ぶと顔検出処理が始まります。</p>

<p><code lang="javascript">
var tracker = new headtrackr.Tracker({ui: false}); // uiをfalseにしないと、検出状態を示すテキストが表示される。
tracker.init($("video")[0], $("canvas")[0]); // 対象ビデオ要素と、検出処理用canvas要素を指定する。
tracker.start(); // 顔検出を開始する。
</code></p>

<p>顔が検出されると、&#8217;facetrackingEvent&#8217; イベントが発生します。認識結果は、コールバック関数にfacetrackingEventオブジェクトとして返されます。</p>

<p><code lang="javascript">
document.addEventListener("facetrackingEvent", function(ev){
  // ev.x, ev.y -> 顔の中心座標
  // ev.width, ev.height -> 顔の幅と高さ
}, false);
</code></p>

<p>これら顔の検出位置情報から、吹き出しの表示位置を決めています。</p>

<h2>WebSocket によるインタラクティブ機能</h2>

<p>最後に紹介するのは、インタラクティブ機能です。イベント参加者が「かっこいいねボタン」を連打すると、それがWebSocketで「マンガテレビ」に送られ、連打の数に応じて「ざわ・・」とか「ゴ・・・」などの文字が横断するエフェクトが動きます。参加者も一体になって盛り上がれるインタラクティブ機能です。この連打の数を「マンガテレビ」に送るために、HTML5の双方向通信機能WebSocketを使いました。なお、『マンガテレビ」では、socket.ioを用いているため、WebSocket が利用できない環境では自動的にHTTPポーリングにフォールバックします。</p>

<p>「マンガテレビ」では、socket.ioを更にラップし、メッセージ受信をsubscriberモデルとしたZapper オブジェクト(白石さん謹製)を用いています。</p>

<p>Zapperオブジェクトのインスタンスを生成し、connect()メソッドでサーバーへ接続。その後、&#8217;zap&#8217;メッセージに subscribe()すると、「かっこいいねボタン」の連打データを受信することができるようになります。受信データのcountプロパティに連打回数が入っているため、その値に応じて「ゴ・・・」や「ざわ・・」といったエフェクトをかけています。</p>

<p><code lang="javascript">
// 接続先サーバーを指定してインスタンスを生成
var zapper = new Zapper({
  serverUrl: 'http://somewhere/'
});</p>

<p>zapper.connect(function() {
  var event = zapper.event();</p>

<p>event.subscribe('zap', function(zap){
    // zap.count に連打回数が格納されている
  });
});
</code></p>

<h2>次回はパフォーマンスチューニング</h2>

<p>今回の記事では、筆者らが最新Web技術を駆使してイベント用に開発した「マンガテレビ」について、そのアーキテクチャを紹介しました。HTML5 の進化によりブラウザの世界観がさらに広がっていくことを感じて頂ければ幸いです。</p>

<p>さて、「マンガテレビ」では、本稿で紹介した各種機能以外に、もう一つ大切な点が。それは「高速動作する」ことです。映像のマンガ化処理に時間がかかると、「マンガテレビ」はカクカク動いてしまい、イベントが興冷めしてしまいますからね。次回は、「マンガ化処理」を高速に行うためのパフォーマンスチューニング・ポイントについて紹介します。</p>
]]></content:encoded>
			</item>
		<item>
		<title>イベント生中継！！ HTML5 Experts Night#1をライブライティングしちゃいます</title>
		<link>/yusuke-naka/1698/</link>
		<pubDate>Fri, 23 Aug 2013 07:18:04 +0000</pubDate>
		<dc:creator><![CDATA[仲 裕介]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Webアプリ]]></category>
		<category><![CDATA[イベント]]></category>

		<guid isPermaLink="false">/?p=1698</guid>
		<description><![CDATA[連載： イベントレポート (1)いよいよ本日、HTML5 Experts Night#1を開催します。なんと、このHTML5 Experts.jpでは、編集部が総力をあげてイベントの模様をこの記事で、生中継（ライブライテ...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/eventarchives/" class="series-159" title="イベントレポート" data-wpel-link="internal">イベントレポート</a> (1)</div><p>いよいよ本日、<a href="http://atnd.org/events/42397" title="atnd" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">HTML5 Experts Night#1</a>を開催します。なんと、このHTML5 Experts.jpでは、編集部が総力をあげてイベントの模様をこの記事で、<strong>生中継（ライブライティング？）しちゃいます！</strong>イベントの様子を写真付きで逐次アップしていきますので、乞うご期待！</p>

<p><span id="more-1698"></span></p>

<h2>HTML5 Experts Nightとは？</h2>

<p><img src="/wp-content/uploads/2013/08/2013-08-09_17.24.19_original-300x231.png" alt="logo" width="300" height="231" class="aligncenter size-medium wp-image-1705" srcset="/wp-content/uploads/2013/08/2013-08-09_17.24.19_original-300x231.png 300w, /wp-content/uploads/2013/08/2013-08-09_17.24.19_original-207x159.png 207w, /wp-content/uploads/2013/08/2013-08-09_17.24.19_original.png 342w" sizes="(max-width: 300px) 100vw, 300px" />
　HTML5 Experts Nightは、HTML5 Experts.jpが誇るWebエキスパートたちと飲めて、学べて、触れ合える、そんなパーティイベントです。日本で最高峰のエキスパートたちが集まった場で、Web技術の話題を肴に楽しめる、そんな場作りを目指しています。</p>

<h2>イベントプログラム</h2>

<p>さて、イベント開催時間が迫ってまいりました！
今日のプログラムをお知らせしますね。皆様のご来場、お待ちしております！</p>

<p><strong> 20:00 受付開始です</p>

<p>20:30　イベントスタート！</p>

<p>20:30~20:50　ワイワイ歓談タイム</p>

<p>20:50~21:10　エキスパート対談（どなたが登壇されるかはまだヒミツです！）</p>

<p>21:10~21:30　ワイワイ歓談タイム</p>

<p>21:30~21:45　ロゴコンテストの結果をコードリーディング！？</p>

<p>21:45~22:05　ライトニングトーク(5分×4)<br />
<li><a href="https://twitter.com/futomi" title="twitter" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">@futomi</a><br />
   <a href="https://twitter.com/ogaoga" title="twitter" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">@ogaoga</a><br />
   <a href="https://twitter.com/nakajmg" title="twitter" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">@nakajmg</a><br />
   <a href="https://twitter.com/Shumpei" title="twitter" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">@Shumpei</a></li></p>

<p>22:00　Finish!!</strong></p>

<h2>イベント準備開始！</h2>

<p>スタッフが会場入りし、準備が始まりました〜。今日の会場はリクルートさんの<a href="http://mtl.recruit.co.jp/" title="MTL" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">メディアテクノロジーラボ（MTL）</a>です！
<a href="https://html5experts.jp/wp-content/uploads/2013/08/MTL.png" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/MTL-300x70.png" alt="MTL" width="300" height="70" class="aligncenter size-medium wp-image-1731" srcset="/wp-content/uploads/2013/08/MTL-300x70.png 300w, /wp-content/uploads/2013/08/MTL-1024x241.png 1024w, /wp-content/uploads/2013/08/MTL-207x48.png 207w, /wp-content/uploads/2013/08/MTL.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a><br />
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1183.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1183-300x200.jpg" alt="IMG_1183" width="300" height="200" class="aligncenter size-medium wp-image-1758" srcset="/wp-content/uploads/2013/08/IMG_1183-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1183-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1183.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>色々仕込んでいます！何が出るかは後ほどのお楽しみ〜。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/DSC_1293.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/DSC_1293-300x168.jpg" alt="DSC_1293" width="300" height="168" class="aligncenter size-medium wp-image-1733" srcset="/wp-content/uploads/2013/08/DSC_1293-300x168.jpg 300w, /wp-content/uploads/2013/08/DSC_1293-207x116.jpg 207w, /wp-content/uploads/2013/08/DSC_1293.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>エキスパートの方で一番乗りは<a href="https://html5experts.jp/ourmaninjapan/" title="ダニエルさん" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ダニエルさん</a>でした。ようこそ！Experts Nightへ。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/DSC_1298.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/DSC_1298-168x300.jpg" alt="DSC_1298" width="168" height="300" class="aligncenter size-medium wp-image-1735" srcset="/wp-content/uploads/2013/08/DSC_1298-168x300.jpg 168w, /wp-content/uploads/2013/08/DSC_1298-116x207.jpg 116w, /wp-content/uploads/2013/08/DSC_1298.jpg 360w" sizes="(max-width: 168px) 100vw, 168px" /></a></p>

<p><a href="https://twitter.com/wks" title="twitter" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">@wks</a>さん 会場設営のご協力ありがとうございます！
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1031.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1031-300x200.jpg" alt="IMG_1031" width="300" height="200" class="aligncenter size-medium wp-image-1738" srcset="/wp-content/uploads/2013/08/IMG_1031-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1031-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1031.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>どこかで見た事がある人も居るかもしれませんが、今日のイベントでもやります！漫画テレビ。
エキスパートで編集部の<a href="https://twitter.com/komasshu" title="Twitter" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">@komasshu</a>さんが、スペシャルなチューニングを色々と施してます。会場にお越し頂ける方は、是非注目してみてください。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/manga.png" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/manga-300x192.png" alt="manga" width="300" height="192" class="aligncenter size-medium wp-image-1740" srcset="/wp-content/uploads/2013/08/manga-300x192.png 300w, /wp-content/uploads/2013/08/manga-1024x657.png 1024w, /wp-content/uploads/2013/08/manga-207x132.png 207w, /wp-content/uploads/2013/08/manga.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a><br />
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1054.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1054-300x200.jpg" alt="IMG_1054" width="300" height="200" class="aligncenter size-medium wp-image-1743" srcset="/wp-content/uploads/2013/08/IMG_1054-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1054-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1054.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<h2>入場開始！!</h2>

<p>お待たせしました、入場開始しました。今日はパーティーです！入場したらビールを片手にエキスパートの方々と目眩くWebの世界へ！今日のイベントはエキスパートの方々と一杯飲んでいっぱい語らってくださいね〜。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/DSC_1302.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/DSC_1302-300x168.jpg" alt="DSC_1302" width="300" height="168" class="aligncenter size-medium wp-image-1745" srcset="/wp-content/uploads/2013/08/DSC_1302-300x168.jpg 300w, /wp-content/uploads/2013/08/DSC_1302-207x116.jpg 207w, /wp-content/uploads/2013/08/DSC_1302.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>すでに会場の各所で真剣な（？）議論が始まっています。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1134.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1134-300x200.jpg" alt="IMG_1134" width="300" height="200" class="aligncenter size-medium wp-image-1748" srcset="/wp-content/uploads/2013/08/IMG_1134-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1134-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1134.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<h2>白石編集長の乾杯ではじまりました！</h2>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1150.jpg" 　target="_blank" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1150-300x200.jpg" alt="IMG_1150" width="300" height="200" class="aligncenter size-medium wp-image-1750" srcset="/wp-content/uploads/2013/08/IMG_1150-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1150-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1150.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1177.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1177-300x200.jpg" alt="IMG_1177" width="300" height="200" class="aligncenter size-medium wp-image-1756" srcset="/wp-content/uploads/2013/08/IMG_1177-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1177-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1177.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>乾杯に引き続き、イベントの趣旨の説明。HTML5 Experts.jpが考えるエキスパートの条件の説明や記事寄稿者の告知も！<br />
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1160.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1160-300x200.jpg" alt="IMG_1160" width="300" height="200" class="aligncenter size-medium wp-image-1752" srcset="/wp-content/uploads/2013/08/IMG_1160-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1160-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1160.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>HTML5 Experts.jpでは一般の方の寄稿も募集する事となりました。我こそは！というかたは編集部までご連絡ください。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1162.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1162-300x200.jpg" alt="IMG_1162" width="300" height="200" class="aligncenter size-medium wp-image-1754" srcset="/wp-content/uploads/2013/08/IMG_1162-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1162-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1162.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<h2>エキスパート増井さんとの対談</h2>

<p>HTML5 Experts.jp公開以来もっと読まれた記事の著者、<a href="https://html5experts.jp/masuidrive/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">エキスパートNo.43の増井さん</a>との対談です。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1239.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1239-300x200.jpg" alt="IMG_1239" width="300" height="200" class="aligncenter size-medium wp-image-1762" srcset="/wp-content/uploads/2013/08/IMG_1239-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1239-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1239.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>編集部の<a href="https://twitter.com/rotsuya" title="Twitter" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">大津谷（写真左）</a>が聞き手となり、色々な話を聞いていきます。</p>

<p>Pukiwiki開発の話から始まり、アメリカへわたった時の話など、楽しい対談が続きました。詳しい内容は後日、レポート記事として起こすとして、いくつかキーワードを。</p>

<ul>
<li>風呂といったら増井さん（お風呂で開発するプログラマー）</li>
<li>母国語はRuby？</li>
<li>英語はなせなくてもアメリカで仕事できます！</li>
<li>なぜAppleやGoogleに行かないの？＝＞ ふつうに働くだけじゃつまらないよ！</li>
</ul>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1253.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1253-300x200.jpg" alt="IMG_1253" width="300" height="200" class="aligncenter size-medium wp-image-1766" srcset="/wp-content/uploads/2013/08/IMG_1253-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1253-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1253.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a>　　</p>

<p>会場からの質問も受け付け、参加者全員で盛り上がりました！本当に風呂で仕事しているの？など、面白い質問も沢山。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1317.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1317-300x200.jpg" alt="IMG_1317" width="300" height="200" class="aligncenter size-medium wp-image-1768" srcset="/wp-content/uploads/2013/08/IMG_1317-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1317-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1317.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>増井さん、本日はありがとうございました。次の記事もお待ちしています！
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1256.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1256-300x200.jpg" alt="IMG_1256" width="300" height="200" class="aligncenter size-medium wp-image-1770" srcset="/wp-content/uploads/2013/08/IMG_1256-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1256-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1256.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<h2>歓談タイムその２！</h2>

<p>増井さんの対談が終わり会場は再び歓談タイム。ここで、開発者のためのChromeガイドブックのサイン入り本のプレゼント抽選会を開催。<br />
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1337.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1337-300x200.jpg" alt="IMG_1337" width="300" height="200" class="aligncenter size-medium wp-image-1773" srcset="/wp-content/uploads/2013/08/IMG_1337-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1337-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1337.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p><a href="https://html5experts.jp/yoshikawa_t/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">エキスパートの吉川さん</a>と小松さんのサインが入っていますね〜。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1343.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1343-300x200.jpg" alt="IMG_1343" width="300" height="200" class="aligncenter size-medium wp-image-1775" srcset="/wp-content/uploads/2013/08/IMG_1343-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1343-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1343.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p><a href="https://html5experts.jp/agektmr/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">エキスパートのえーじさん</a>もサインに応じてくださいました。サインの列ができますね！すごい。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1349.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1349-300x200.jpg" alt="IMG_1349" width="300" height="200" class="aligncenter size-medium wp-image-1777" srcset="/wp-content/uploads/2013/08/IMG_1349-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1349-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1349.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>当選された方、おめでとうございます！！
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1332.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1332-300x200.jpg" alt="IMG_1332" width="300" height="200" class="aligncenter size-medium wp-image-1780" srcset="/wp-content/uploads/2013/08/IMG_1332-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1332-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1332.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<h2>HTML5 Experts.jpロゴコンテストの公開コードレビュー</h2>

<p>そうしているうちに、目玉企画の一つ、ロゴコンテストの公開コードレビューがはじまりました。<a href="https://html5experts.jp/yomotsu/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">エキスパートの小山田さん</a>をゲスト解説にお迎えし、同じくエキスパートの小松さんと一緒に投稿頂いた作品一つ一つをレビューしていきます。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1360.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1360-300x200.jpg" alt="IMG_1360" width="300" height="200" class="aligncenter size-medium wp-image-1782" srcset="/wp-content/uploads/2013/08/IMG_1360-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1360-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1360.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>ロゴコンテストに応募された作品は<a href="https://html5experts.jp/contest/vol1/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちらのページ</a>でご覧頂けます。<br />
レビューの概要をざくっと記載すると・・・（すみません、一部更新が追いつきませんでしたので、後日レポートします）</p>

<p>1作品目 <a href="http://jsdo.it/platism/xkQYH" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">http://jsdo.it/platism/xkQYH</a><br />
小山田さん「CSSアニメーション。border-raduisを使って、丸が四角にアニメーションしている。」</p>

<p>2作品目 <a href="http://jsdo.it/mermaid1112/logocontest-robot" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">http://jsdo.it/mermaid1112/logocontest-robot</a><br />
小山田さん「これもCSSアニメーション。小さいdivをたくさんうまく使っている。」<br />
小松さん「canvasは使ってないんですね。こういうのもCSSアニメーションでできるんですね。」</p>

<p>3作品目 <a href="http://jsdo.it/shirayuki/1NEK" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">http://jsdo.it/shirayuki/1NEK</a><br />
小松さん「ちょうちょがひらひらするのはどうやってるんですか。」<br />
小山田さん「そこまで見てなかったんですが。」<br />
小山田さん「(コードを見て)CSSアニメーションのskewをつかってるんですね。」</p>

<p>4作品目 <a href="http://jsdo.it/kingpanda/enUm" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">http://jsdo.it/kingpanda/enUm</a><br />
小松さん「日本の日の出みたいな感じですね。」<br />
小山田さん「これもCSSアニメーションですね。」</p>

<p>5作品目 <a href="http://jsdo.it/sapphire_al2o3/u4ed" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">http://jsdo.it/sapphire_al2o3/u4ed</a><br />
小山田さん「これはWebGLを使っています。three.jsを使うことが多いですが、これはWebGLのコードを直に書いています。」<br />
小松さん「僕も、three.jsを使わないと書けないです。」<br />
小山田さん「お手本的なきれいなコードですね。」</p>

<p>6作品目 <a href="http://jsdo.it/cx20/9lUe" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">http://jsdo.it/cx20/9lUe</a><br />
小山田さん「手前のアニメーションはサンプルコードをのままです。」<br />
小山田さん「その背景でWebGLを動かしているんですね。」<br />
小山田さん「ぜひコードを見てみたいと思います。」<br />
(会場からどよめきが。ソースコードにテキストアートのようにロゴが書かれている。)<br />
小山田さん「これを読み込んでアニメーションさせてるんですね。」</p>

<p>7作品目 <a href="http://jsdo.it/Xpressive_Team/p1Mj" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">http://jsdo.it/Xpressive_Team/p1Mj</a><br />
小山田さん「これも小さい div をたくさん使っています。」</p>

<p>8作品目 <a href="http://jsdo.it/xicolo/peA7" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">http://jsdo.it/xicolo/peA7</a><br />
(更新がついていけませんでした。ごめんなさ・・・)</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1380.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1380-300x200.jpg" alt="IMG_1380" width="300" height="200" class="aligncenter size-medium wp-image-1787" srcset="/wp-content/uploads/2013/08/IMG_1380-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1380-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1380.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>ロゴコンテストは<a href="http://jsdo.it/" title="カヤック" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">面白法人カヤックさんのjsdo.it</a>を利用して行われました。Webブラウザ上で開発しそのままプレビューすることができます。便利ですね〜。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1381.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1381-300x200.jpg" alt="IMG_1381" width="300" height="200" class="aligncenter size-medium wp-image-1789" srcset="/wp-content/uploads/2013/08/IMG_1381-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1381-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1381.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>ロゴコンテストはエキスパートの方に審査して頂いていますので、後日審査結果を発表する予定です。乞うご期待！</p>

<h2>LTタイム</h2>

<p>どんどん、進んでいきます！LTタイムに突入しました。計６つのLTを一人５分のペースで発表していきます。　　</p>

<p>一人目は<a href="http://www.newphoria.co.jp/" title="株式会社ニューフォリア" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">株式会社ニューフォリア</a>から<a href="https://html5experts.jp/futomi/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">羽田野さん</a>です。<br />
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1396.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1396-300x200.jpg" alt="IMG_1396" width="300" height="200" class="aligncenter size-medium wp-image-1795" srcset="/wp-content/uploads/2013/08/IMG_1396-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1396-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1396.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>ニューフォリアさんで最近サービス開始した、<a href="http://www.applican.com/" title="アプリカン" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">アプリ開発支援サービス「アプリカン」</a>の紹介です。
名前の由来はアプリの缶だそうです。好きなエディタでコードを書き、HTML, JavaScript, CSSをZIPしてサイトにアップロードすると、iOSアプリとAndroidアプリをビルドしてくれます。アプリの実行が出来るだけでなく、デバッグツールも付いていて、AppStoreに申請しなくても、アプリのコンテンツを入れ替えることができます。<br />
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1397.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1397-300x200.jpg" alt="IMG_1397" width="300" height="200" class="aligncenter size-medium wp-image-1797" srcset="/wp-content/uploads/2013/08/IMG_1397-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1397-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1397.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a><br />
日本発のアプリ開発支援サービスアプリカンをよろしくお願いします。</p>

<p>二人目は<a href="https://twitter.com/ogaoga" title="Twitter" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">@ogaogaさん</a>です。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1420.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1420-300x200.jpg" alt="IMG_1420" width="300" height="200" class="aligncenter size-medium wp-image-1801" srcset="/wp-content/uploads/2013/08/IMG_1420-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1420-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1420.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>@ogaogaさんは株式会社楽天に勤められており、楽天のHTML5の取り組みを発表されました。　
モバイル、koboなどはHTML5で作っていたりと、楽天もHTML5の取り組みを色々と進めているようです。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1433.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1433-300x200.jpg" alt="IMG_1433" width="300" height="200" class="aligncenter size-medium wp-image-1803" srcset="/wp-content/uploads/2013/08/IMG_1433-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1433-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1433.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>10月には楽天テクノロジーカンファレンスを開催するそうです。興味がある方は是非！
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1435.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1435-300x200.jpg" alt="IMG_1435" width="300" height="200" class="aligncenter size-medium wp-image-1804" srcset="/wp-content/uploads/2013/08/IMG_1435-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1435-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1435.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a><br />
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1436.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1436-300x200.jpg" alt="IMG_1436" width="300" height="200" class="aligncenter size-medium wp-image-1806" srcset="/wp-content/uploads/2013/08/IMG_1436-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1436-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1436.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>三人目は金井さん（写真左）と中島さん（写真右）が登場。金井さんはAngular.jsや味見部などの管理人をやっている方で、中島さんはDMMでフロントエンドエンジニアをやられているそうです。<br />
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1440.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1440-300x200.jpg" alt="IMG_1440" width="300" height="200" class="aligncenter size-medium wp-image-1808" srcset="/wp-content/uploads/2013/08/IMG_1440-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1440-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1440.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>今日は、HTML5Experts.jpを盛り上げるアイデアを持ってきてくれました！その名も、エキスパートスタンプラリー！
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1446.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1446-300x200.jpg" alt="IMG_1446" width="300" height="200" class="aligncenter size-medium wp-image-1811" srcset="/wp-content/uploads/2013/08/IMG_1446-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1446-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1446.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1450.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1450-300x200.jpg" alt="IMG_1450" width="300" height="200" class="aligncenter size-medium wp-image-1812" srcset="/wp-content/uploads/2013/08/IMG_1450-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1450-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1450.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>まだ、開発中との事ですが、会場ではデモが行われました。今後に期待ですね！！
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1453.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1453-300x200.jpg" alt="IMG_1453" width="300" height="200" class="aligncenter size-medium wp-image-1814" srcset="/wp-content/uploads/2013/08/IMG_1453-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1453-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1453.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>最後に、金井さんから、「HTML5 Experts.jp関係者の皆さま、買い取りの相談を待っています！」とのコメントが！</p>

<p>次は、白石編集長が登場。ハッカ盆というイベントで開発した、Leap Motion、Node.js、Arduinoを組み合わせたデモを披露。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1478.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1478-300x200.jpg" alt="IMG_1478" width="300" height="200" class="aligncenter size-medium wp-image-1818" srcset="/wp-content/uploads/2013/08/IMG_1478-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1478-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1478.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>「指を1本」でLEDが1つ点く、「指が2本、3本、4本、5本」でLEDが1つずつ点灯してくというもの。スワイプ、円を描くジェスチャーにも対応しています。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1480.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1480-300x200.jpg" alt="IMG_1480" width="300" height="200" class="aligncenter size-medium wp-image-1820" srcset="/wp-content/uploads/2013/08/IMG_1480-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1480-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1480.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a><br />
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1486.jpg" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1486-300x200.jpg" alt="IMG_1486" width="300" height="200" class="aligncenter size-medium wp-image-1821" srcset="/wp-content/uploads/2013/08/IMG_1486-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1486-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1486.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>Node.jsからArduinoを制御できるライブラリを見つけたとの事で、今後も面白いモノを作っていきたいと意気込みを語りました。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1494.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1494-300x200.jpg" alt="IMG_1494" width="300" height="200" class="aligncenter size-medium wp-image-1822" srcset="/wp-content/uploads/2013/08/IMG_1494-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1494-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1494.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a><br />
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1492.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1492-300x200.jpg" alt="IMG_1492" width="300" height="200" class="aligncenter size-medium wp-image-1823" srcset="/wp-content/uploads/2013/08/IMG_1492-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1492-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1492.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>最後に再び小山田さんの登場です。Canvas ブレンドモードについてお話しされました。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1510.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1510-300x200.jpg" alt="IMG_1510" width="300" height="200" class="aligncenter size-medium wp-image-1825" srcset="/wp-content/uploads/2013/08/IMG_1510-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1510-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1510.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>ピクセルの中にある4つの値を加算したり乗算したりできるが、canvasでは動作が重い、WebGLでGPU支援を利用するとかなり高速になる等、実践的な内容でした。
<a href="https://html5experts.jp/wp-content/uploads/2013/08/IMG_1509.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/IMG_1509-300x200.jpg" alt="IMG_1509" width="300" height="200" class="aligncenter size-medium wp-image-1826" srcset="/wp-content/uploads/2013/08/IMG_1509-300x200.jpg 300w, /wp-content/uploads/2013/08/IMG_1509-207x137.jpg 207w, /wp-content/uploads/2013/08/IMG_1509.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<h2>おわりに</h2>

<p>これでイベントの全企画が終了しました！ライブライティングは如何でしたでしょうか？初めての試みでしたが、お楽しみ頂けましたでしょうか。<br />
HTML5 Experts Nightは１０月も開催予定ですので、是非チェックしてみてください。</p>

<p>このレポートに内容を加筆したモノをこちらで公開しています。合わせてご覧ください！<br />
<a href="http://codeiq.hatenablog.com/entry/2013/09/06/102741" title="増井雄一郎さんが人気記事を解説！HTML5/Webエキスパートたちに学んでつながる「HTML5 Experts Night」" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">CodeIQ Blog 増井雄一郎さんが人気記事を解説！HTML5/Webエキスパートたちに学んでつながる「HTML5 Experts Night」</a></p>
]]></content:encoded>
		
		<series:name><![CDATA[イベントレポート]]></series:name>
	</item>
		<item>
		<title>RAIZIN Coolで学ぶ、イマドキのWebサイトの作りかた</title>
		<link>/edo_m18/991/</link>
		<pubDate>Wed, 24 Jul 2013 20:00:01 +0000</pubDate>
		<dc:creator><![CDATA[比留間 和也]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[グラフィカルWeb]]></category>

		<guid isPermaLink="false">/?p=991</guid>
		<description><![CDATA[連載： イマドキのWebアプリの作りかた (3)HTML5 Canvasを利用した冷気の演出が話題となった「RAIZIN JAPAN」のデモサイト。エキスパートが手がけたプロダクトを題材に技術的な解説を行っていくシリーズ...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/app-lobo/" class="series-150" title="イマドキのWebアプリの作りかた" data-wpel-link="internal">イマドキのWebアプリの作りかた</a> (3)</div><p>HTML5 Canvasを利用した冷気の演出が話題となった<a href="http://raizin-japan.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">「RAIZIN JAPAN」</a>のデモサイト。エキスパートが手がけたプロダクトを題材に技術的な解説を行っていくシリーズ第二弾は、RAIZIN Coolの実装を徹底解説します。</p>

<!-- more -->

<h1>HTML5 Canvasを利用した簡易的な冷気の演出</h1>

<p>最近の仕事で実装したものが海外の、しかも<a href="http://techwave.jp/archives/raizin_cool_use_canvas_viporeffect.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">米シリコンバレーで話題</a>になりました。<br />
社内でもそうした簡単にできる（けど簡単そうに見えない）簡易的な実装に注目が集まり、ちょっとした話題になったので解説しつつ紹介したいと思います。</p>

<p>※今回の解説用に、jsdo.itに実際に動くサンプルをアップしました。<br />
さらに今回の解説用に特別に動作が分かりやすくなるオプションも追加しています。↓
(invalid jsdo.it code)</p>

<p>今回紹介するのは<a href="http://raizin-japan.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">RAIZIN</a>というエナジードリンクの新バージョン<a href="http://raizin-japan.com/cool/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">「Cool」のLP</a>です。<br />
当初はとても時間がタイトで限られた予算での実施ということもあり、まったく動きのないペライチにしようという話になっていました。</p>

<p>しかしそれだとどうしてもインパクトが出ない。<br />
<strong>「時間と予算が限られた中で、それでも少しでもインパクトのあるものが作りたい」</strong><br />
とエンジニアとデザイナーで話し合いました。</p>

<p>あ、ちなみにこの記事を書いているのは私ですが、方向性、実装方法などおおまかに話したあとは<strong>実装は社内の別のエンジニアが行なっています</strong>。</p>

<h2>どこに人はリアリティを感じるか</h2>

<p>話し合いは、まずはどうしたらリアリティが出るか、という話をメインに行いました。<br />
話し合い時点である程度デザインはでき上がっていたので、それを元にどうしたらリアリティが出るか、どういう演出が考えられるかを話し合いました。</p>

<p>最初に着目したのは冷気。まぁここは当然ですね。なにはなくとも冷気がなければ冷えている感、Cool感は出ません。問題はこれをどう動かすか、でした。<br />
当然、高度な物理演算を用いて冷気をリアルに動かす、ということも考えましたが、当然時間が足りない。（それこそ、1～2日くらいしか時間が残されていなかった）</p>

<p>みんなであれこれ話していて、冷気の動きは実は3種類くらいしかないのでは、とひらめきました。</p>

<ul>
<li>缶から出て下に落ちる縦の動き</li>
<li>それが地面に到達してわだかまり、渦を巻いている状態</li>
<li>たまった冷気が缶から離れていく横の動き</li>
</ul>

<p>おおまかに動きを分解すると、この3つの動きだけで実装できそうだと気づきました。<br />
閃いてからは話は早く、あとはそれをどう実装するか、という話になります。</p>

<h2>Canvas要素を使って冷気表現</h2>

<p>今回選択したのはHTML5から定義されたCanvas要素。<br />
冷気の動きには回転を含んでいたのと、冷気同士の色みを合成することを考えて選択しました。</p>

<p>実際に実装を始めてみるといくつか問題がありました。</p>

<ul>
<li><strong>冷気の画像は左右で対象なので同じタイミングで出すとバレる</strong><br />違う画像をデザイナーに頼もうかと思いましたが、時間も素材を用意できるか微妙だったので、左右で煙の出るタイミングをずらしたらほとんど目立たなくなりました。</li>
<li><strong>回転する冷気は縦横に比べて速度を落とす</strong><br />回転する冷気は、縦と横で動いている冷気よりも目立ってしまったので、回転速度をだいぶ遅くしたら違和感がなくなりました。</li>
<li><strong>冷気の最初はグラデーションマスク</strong><br />縦に動く画像の出始めの部分は、缶から冷気が出ているというより空中から出ているようになるので、上からグラデーションで透明にしたマスクを置きました。</li>
</ul>

<p><img src="/wp-content/uploads/2013/07/mask.png" alt="マスク画像" /></p>

<p>最終的には冷気の出現の仕方・速度を調整することでだいぶリアリティのあるものができました。<br />
やはり、予算や時間がタイトな案件は多くあるもの。その中でどうしたら表現したいものに最大限近づけることができるか。<br />
本当に計算をして表現する以外に方法がないか模索してみるといいと思います。</p>

<h2>構造を分解</h2>

<p>今回作成したものは上記で書いた通り比較的簡易な表現になっています。<br />
そのため、レイヤー構造もとてもシンプル。<br />
おおまかに構造を分解したものが以下の画像です。</p>

<p><img src="/wp-content/uploads/2013/07/explanation.jpg" alt="仕組みの分解解説" /></p>

<h3>全体は3つのレイヤーのみ</h3>

<p>見てもらうと分かる通り、メインとなる缶の画像を含めても3つのレイヤーしかありません。<br />
構造は</p>

<ul>
<li>メインの缶画像レイヤー</li>
<li>冷気を表現するCanvasレイヤー</li>
<li>マスクレイヤー</li>
</ul>

<p>の3つです。</p>

<p>DOM要素的にはもっとありますが、レイヤーとしては3つです。</p>

<h3>Canvas内のレイヤーも3つ</h3>

<p>さらに演出のメインとなるのはCanvas要素のみです。<br />
そのCanvas要素内で動いているものも3つのレイヤーからなっています。</p>

<p>冒頭に書いた<strong>「気付き」</strong>を元に構成したものです。つまり、「縦・横・回転」の3レイヤーです。　　
これをそれぞれ個別にアニメーションさせながら今回の演出を表現しています。</p>

<p>アニメーション自体は実にシンプルで、縦・横ともにひとつのPNG画像をうまくループするように配置しアニメーションさせるだけです。<br />
回転に関してはさらにシンプルで、移動はせず、単純に配置された場所でゆっくりと回転させるだけです。Canvasアニメーションを実装したことがある人ならそれこそものの数分で作れる演出です。</p>

<p>それぞれのアニメーションで使用した画像は以下の3つだけです。</p>

<p><img src="/wp-content/uploads/2013/07/sample-raizin-side.png" alt="縦演出用冷気画像" /><br />
縦にループさせている画像</p>

<p><img src="/wp-content/uploads/2013/07/sample-raizin-under.png" alt="横演出用冷気画像" /><br />
横にループさせている画像</p>

<p><img src="/wp-content/uploads/2013/07/sample-raizin-corner.png" alt="回転演出用冷気画像" /><br />
回転させている画像</p>

<h2>jsdo.itのサンプルを動かして理解しよう</h2>

<p>冒頭でも書きましたが、今回制作したものがどういう仕組で動いているのか確認できるものを<a href="http://jsdo.it/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">jsdo.it</a>にアップしました。<br />
各項目をOn/Offすることで動作がどういうものか理解できるかと思います。参考にしてみてください。</p>

<p>ちなみに3Dをオンにしたあとはさらに<strong>ドラッグで回転</strong>することができます。<br />
どういう構造になっているのかを理解するのに役立つと思うのでそちらも参考にしてみてください。<br />
<strong>※jsdo.it上にアップしたサンプルは、実際のサイトに公開されているものとは別物です。<br />
動作確認がしやすいように、処理を最適化しています。</strong></p>

<p>(invalid jsdo.it code)</p>

<h2>話題にされた記事</h2>

<ul>
<li><a href="http://techwave.jp/archives/raizin_cool_use_canvas_viporeffect.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">「RAIZIN JAPAN」HTML5 CANVASを使用した冷気の表現が話題に 【@maskin】</a></li>
<li><a href="http://www.ideaxidea.com/archives/2013/07/canvas_frozen.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5で冷気を表現したサイトがすごいな</a></li>
<li><a href="http://squeeze.jp/blog/web-design/making-of-canvas-frozen/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">「HTML5で冷気を表現したサイトがすごいな」を分解してみた！</a></li>
</ul>
]]></content:encoded>
		
		<series:name><![CDATA[イマドキのWebアプリの作りかた]]></series:name>
	</item>
	</channel>
</rss>
