<?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>Google I/O 2015 特集 &#8211; HTML5Experts.jp</title>
	<atom:link href="/series/google_io_2015/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>Polymer 1.0最新情報！（後編）ーGoogle I/O Web Appの作り方、Polymer Starter Kitで始めるMaterial Design、etc.</title>
		<link>/ryoyakawai/15883/</link>
		<pubDate>Wed, 01 Jul 2015 00:00:39 +0000</pubDate>
		<dc:creator><![CDATA[河合良哉]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Google I/O]]></category>
		<category><![CDATA[Polymer]]></category>

		<guid isPermaLink="false">/?p=15883</guid>
		<description><![CDATA[連載： Google I/O 2015 特集 (6) 本記事は、「Polymer 1.0最新情報」の後編になります（前編はこちらから）。Google I/OでPolymer 1.0が取り上げられた「Polymer and...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/google_io_2015/" class="series-313" title="Google I/O 2015 特集" data-wpel-link="internal">Google I/O 2015 特集</a> (6)</div><p><style>.post-detail-contents p{text-indent:0; overflow:hidden}</style></p>

<p>本記事は、「Polymer 1.0最新情報」の後編になります（前編は<a href="https://html5experts.jp/ryoyakawai/15885/" target="_blank" data-wpel-link="internal">こちら</a>から）。Google I/OでPolymer 1.0が取り上げられた「Polymer and modern web APIs: In production at Google scale」のセッションをレポートします。Polymerの最新情報や活用事例、Polymer Catalog、Polymer Starter Kitなど、盛りだくさんのこのセッションの翻訳と解説を前後編に分けてお伝えします。</p>

<p>後編となる本記事では、「ライブサイトへの適用例（後半）」、「Polymer Starter Kitとは」を解説します。</p>

<h2>ライブサイトへの適用例（後半）</h2>

<p>前編に引き続き、Polymerのライブサイトへの適用例の後半です。コードを交えながら具体的に解説していきます。</p>

<h3>Google I/O Web App</h3>

<p>このアプリは社内ではIOWA（アイオワ）と呼んでいる。IOWAはModen Web Platformでの良い実装例で、デスクトップでもモバイルでも動作して、コンテンツが最初に読込まれるときマテリアルデザインのエフェクトと共に表示され、ページとコンテントの間の表示での大きなエフェクトついているし、デスクトップでもモバイルでもビデオをクリックすると全画面になる。Webアプリでここまでネイティブアプリ感が出せている。</p>

<p>そのIOWAには想像できる新しいWeb APIのほとんど全てが使われている。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-22-at-11.09.12-PM.png" alt="NewAPIs_IOWA" width="640" height="357" class="alignnone size-full wp-image-15600" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-22-at-11.09.12-PM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-22-at-11.09.12-PM-300x167.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-22-at-11.09.12-PM-207x115.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>使っているAPIたち</figcaption>
</figure></p>

<p>ここからIOWAのポイントは以下です。</p>

<ul>
<li><strong>バックエンド</strong>：広範囲に渡ってAppEngine上でGoを使用</li>
<li><strong>Material Designの実装に関して</strong>：Web Animation、Promiseで各種エフェクトを実現</li>
<li><strong>開発したチーム</strong>：ソフトウェア エンジニアではなく、Developer Relationsチーム</li>
<li><strong>ツール</strong>：誰でも使うことのできる3rdパーティ製のツールを使い、Googleの特別なツールは使っていない</li>
</ul>

<p>ここから実装方法に関しての説明になります。</p>

<h4>Templateを使ったSPA（シングル・ページ・アプリケーション）の実現</h4>

<p>Google Santa Tracker 2014ではURLルーティングを行うことでSPAを実現していましたが、IOWAではTemplateとHTML Importsを使って動的にコンテンツを読み込でいるそうです。</p>

<ol>
<li>異なるid属性を付けた複数のTemplateを1つのページに配置</li>
<li>ref属性を持ったTemplateタグを配置</li>
<li>ref属性に予め埋め込んだTemplateのidどれかを指定</li>
</ol>

<p>すると、指定したidのTemplateのコンテンツがTemplateの中に差し込まれます。IOWAは予め複数ファイルでページをTemplateとして用意して、必要に応じてそれらのファイルを動的に読み込む（HTML Imports）ことでSPAが実現されている、とのことでした。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Untitled1.gif" alt="template" width="640" height="357" class="alignnone size-full wp-image-15618" />
<figcaption>TemplateとHTML Importsを使った動的なコンテンツを読み込み</figcaption>
</figure></p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-23-at-12.53.20-AM.png" alt="import_Pomyler1.0" width="640" height="358" class="alignnone size-full wp-image-15622" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-23-at-12.53.20-AM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-23-at-12.53.20-AM-300x168.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-23-at-12.53.20-AM-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Polymer 1.0でTemplateとHTML Importsを使ったSPAを実現させるコード</figcaption>
</figure></p>

<h4>Material Designの実現</h4>

<p>ビデオ等は遅延ゼロの理想状態でMaterial Desginの動きは説明されているが、Webアプリではそうはいかないので工夫が必要です。IOWAではWeb Animation、Promiseを使い、ロジカルなアニメーションのシーケンスを作ることで実現しているそうです。</p>

<ol>
<li>Promiseが&#8221;page-transition-start&#8221;のEventを発行し、ページトップ部分の色を変更するのと同時にコンテンツをページ表示領域から外側にスライドしフェードアウトさせる</li>
<li>Import Page Method（TemplateとHTML Importを使ったSPA実現方法）を使ってページのコンテンツをAjaxで取得する</li>
<li>コンテンツの準備が完了したら、ページ全体のアニメーションを実行する。このアニメーションは基本的にコンテンツを200ms以下の時間でページにスライドさせていて、パララックスのエフェクトもかけている</li>
<li>動的なページ読み込みとアニメーションが完了した時点で、例えばJavaScriptの実行のようなページを構成するために必要な処理が実行できるようになる</li>
</ol>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-23-at-1.02.04-AM.png" alt="webanimation_promises" width="640" height="358" class="alignnone size-full wp-image-15626" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-23-at-1.02.04-AM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-23-at-1.02.04-AM-300x168.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-23-at-1.02.04-AM-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Material Designを実現しているAnimation flowのコード</figcaption>
</figure></p>

<p>このように、PromiseとWeb Animation APIをWrapして利用することでCSSのアニメーションが動いたり、ネットワーク接続が発生したりと非同期な処理が起こっている状態でも、ロジカルな同期が可能です。</p>

<h4>オフライン ファーストの実現</h4>

<p>IOWAで注目すべき機能で、Service Workersを使って実現している。Service WorkersのおかげでWeb開発者が実現できることの代表例は以下です。</p>

<ul>
<li>ページキャッシュ</li>
<li>プッシュ通知（Push Notification）</li>
<li>バックグラウンド・シンク</li>
<li>ネットワークリクエストの横取り</li>
</ul>

<p>IOWAではこれらの機能を使い、アクセス解析を行うGoogle Analyticsへのリクエストをオンライン時はリアルタイムに、オフライン時は横取りをして一旦IndexDBに蓄積。オンラインになった段階で再現をしてオフライン時のアクセス解析を可能にしています。一般的にも、こうすることで重要なインサイトを逃さず見ることができるでしょう。</p>

<h4>オフライン時の動作の実装で注意した点</h4>

<p>Webサイトがオフラインでも動作することはユーザは体験したことがないので、例えばオフラインになったときにアプリケーションを終了されてしまうことを防いだりします。またオフライン動作することに驚かれないために、IOWAでは「オンラインからオフライン」に遷移した時にアプリケーション側で何が起こっているかユーザが把握できるよう、トースト（自動的に消える小さなお知らせエリア）で状態を知らせることができるように注意して実装してます。</p>

<p>実際に以下のリストのような事象が起こった場合にトーストを出しています。</p>

<ul>
<li><strong>初回アクセス時</strong>：次回からは最初からオフラインで動作します</li>
<li><strong>オフライン時の情報情報更新</strong>：オンラインになった時に情報をサーバに通知します</li>
</ul>

<p>オフラインとは電波（Wi-Fi、3G、4G等）の状況が悪いとき、Airplaneモード等でインターネットにつながらなくなった状態のことを指しています。</p>

<h4>プッシュ通知(Push Notifications)</h4>

<p>プッシュ通知はNativeなアプリでは当たり前になっている機能ですが、Webの世界では真新しい機能になります。もちろん、アプリが開いていない状態でも通知を受けることが可能です。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-23-at-2.12.31-AM.png" alt="pushnotification" width="640" height="337" class="alignnone size-full wp-image-15644" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-23-at-2.12.31-AM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-23-at-2.12.31-AM-300x158.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-23-at-2.12.31-AM-207x109.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>プッシュ通知を表示させた例</figcaption>
</figure></p>

<p>プッシュ通知も新しい機能なので、オフライン時の動作と同じく状況をトーストで通知しています。このプッシュ通知を動作させるためには、ユーザが通知を受ける/受けないを選択することに加えて、通知を受け取る許可をユーザがブラウザに対して行う必要があります。</p>

<p>プッシュ通知を行う目的はWebサイト/アプリへの再訪にあります。IOWAではその効果測定のためにプッシュ通知からどれだけユーザが実際にサイト/アプリに再訪してくれたかをAnalyticsを利用して計測しています。</p>

<p>プッシュ通知の送信は一見難しそうですが、Elementがあるので心配しないでください。実際にはこのような形で実装することができます。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Untitled2.gif" alt="PushNotification" width="640" height="358" class="alignnone size-full wp-image-15725" />
<figcaption>プッシュ通知の送信</figcaption>
</figure></p>

<p>プッシュ通知を使う目的はWebサイト/アプリへの再訪です。なのでIOWAではプッシュ通知からどれだけユーザが実際にサイト/アプリに再訪してくれたかの計測をAnalytics利用して行っています。</p>

<p>ここまでお話してきた、オフライン動作の実現、Service Workers、プッシュ通知に関してもElementが存在していて、Platinum Elementsに実装しています。</p>

<p><a href="https://elements.polymer-project.org/browse?package=platinum-elements" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">リンク：Platinum Elements（英語）</a></p></p>

<p>最後に「6ヶ月の出来事のお話しだったので、駆け足の説明で盛りだくさんになってしまった。紹介した2つはライブサイトも動作しているし、ソースコードも公開しているので、詳しくはそちらをご覧ください」と結びました。</p>

<p>(Speaker: Eric Bidelman)</p>

<p>リンク：Google I/O web app <a href="https://html5experts.jp//events.google.com/io2015" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">[ライブサイト]</a> <a href="https://html5experts.jp//github.com/GoogleChrome/ioweb2015/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">[コード]</a></p>

<h2>Polymer Starter Kitとは</h2>

<p>「PolymerのDeveloper Toolを担当しているAddy Osmaniです」と自己紹介から始まりました。</p>

<p>そして間髪入れず、最近の出来事からの例えを交えて「物事の筋道にはステップを踏まないと思い通りのモノは作れない」ということの説明が始まりました。</p>

<p>Addyの友達に赤ちゃんが生まれたそうで、赤ちゃんのスケッチしてプレゼントしようと考えたそうです。そしてスケッチ方法をGoogle.comで検索をすると「まずは丸を書くことが最初のステップ（Step1）」という結果だったそうです。「実現可能性を確信したけど、次のステップを探した結果がStep2でした。このStep1からStep2への飛躍は非常に大きく、これを目標に続けると最終的にはStep1.5のようになることも少なくない」と続きます。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Untitled3.gif" alt="draw_baby" width="640" height="358" class="alignnone size-full wp-image-15738" />
<figcaption>赤ちゃんの顔のスケッチ：Step1、Step2、Step1.5</figcaption>
</figure></p>

<p>Polymerはまさに例に挙げたStep1からStep2へ移行しようとしている段階なので、これを避けるべくPolymer Teamは「Polymer Starter Kit」で、この状況の回避を行うとのこと。「Polymer Starter Kit」は、過去1年間でPolymerを使ったプロジェクトGoogle I/O App、Web Starter Kit、Google Santa Trackerを見返して、そこから得られた知見を1つにまとめた結果です。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-12.16.13-AM.png" alt="PolymerStarterKit" width="640" height="315" class="alignnone size-full wp-image-15744" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-12.16.13-AM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-12.16.13-AM-300x148.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-12.16.13-AM-207x102.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Polymer Starter Kit</figcaption>
</figure></p>

<p>ここから「Polymer Starter Kitがどのようなものなのか？」の説明に入ります。</p>

<h3>Material Design</h3>

<p>非常に高いレベルでMaterial Designをサポートしています。Toolbar，Header-Panelのようなモバイルアプリを開発するときに必ず必要になるパーツ、URLルーティングや複数の画面サイズにフィットするような仕組みもサポートしている。CSS Custom Propertyを使って、アプリ全体のテーマカラーを数行のコードで変更する可能で、非常にパワフル。</p>

<p>モバイルWebアプリ開発ではテーマカラーの変更、クロスデバイス（Android、iOS、Windows Phone）でホーム画面へのアイコンリンクの準備も最初からできているので、再訪へとつなげられる。</p>

<h3>Adaptive UI</h3>

<p>今回のI/OでMaterial Design Teamが発表したガイドライン。これはデバイスによってインタラクションをどう作り込むのがよいのかのガイドラインですが、Polymer Starter Kitはこれらを全てを含んでいる。あくまでもこれらは1つの例でしかないので、必要に応じてカスタマイズすることも可能。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-27-at-8.07.25-PM.png" alt="adaptiveui" width="640" height="358" class="alignnone size-full wp-image-15980" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-27-at-8.07.25-PM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-27-at-8.07.25-PM-300x168.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-27-at-8.07.25-PM-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Adaptive UI</figcaption>
</figure>
<a href="http://www.google.com/design/spec/layout/adaptive-ui.html" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">リンク：Adaptive UI（英語）</a></p>

<h3>App Template</h3>

<p>Navigation Card Layout、住所録のようなアプリに最適なNavigation List Detail Layout、List Card Over Layout(Wider Card View Layout)などが用意されていて、すぐに利用できるLayoutのセットとなっている。</p>

<h3>Offline-first (in your app)</h3>

<p>Ericもオフラインの重要性を訴えた通りで、またRob Dodsonも「2015年は、もしアプリがオフラインをサポートしていないのであれば、それは本当の意味でのモバイルWebエクスピリエンスを提供できていない、という考え方が現実になるだろう」と言っています。良いことにPolymer Starter Kitはデフォルトでオフライン ファーストになっているので何の設定をすることもなくAirplaneモードや、オフラインになったときにもアプリに含まれる全てのページにアクセスすることが可能。</p>

<h3>Service Workers</h3>

<p>素晴らしい機能だけど、導入するには多くの設定が必要です。ですが、</p>

<p>&gt; There is an element for that!</p>

<p>で、Polymer CatalogにあるPlatinum Elementsを使えば、Service Workersを使ったキャッシュ機能を簡単に実装することができます。</p>

<p>Service Workersのセット・アップの例です。Service Workersの登録し、キャッシュのストラテジを数行で設定している。例では「Network First」をキャッシュのストラテジとして、キャッシュしたいファイル名を予め宣言しています。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-1.15.19-AM.png" alt="Platinum Element" width="640" height="358" class="alignnone size-full wp-image-15754" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-1.15.19-AM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-1.15.19-AM-300x168.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-1.15.19-AM-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Plutinum Elementsを使ったオフラインキャッシュのコード</figcaption>
</figure>
<a href="https://elements.polymer-project.org/browse?package=platinum-elements" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">リンク：Platinum Elements（英語）</a></p>

<h3>Production-ising Cache</h3>

<p>ユーザにできるだけ小さく、できるだけ速いアプリを提供するという意味ではビルドプロセスはとても重要。Polymer TeamはストリーミングビルドシステムのGulpが大好きなので、Polymer　Starter Kitに採用している。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-1.27.47-AM.png" alt="BuildByGulp" width="640" height="360" class="alignnone size-full wp-image-15757" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-1.27.47-AM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-1.27.47-AM-300x169.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-1.27.47-AM-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Gulpを使ったビルドシステム</figcaption>
</figure></p>

<p>web-component-testerなどのクオリティテスト、Vulcanize等のミニフィケーション等が可能。Browser Syncを使っているので、アプリに変更を加えるとその変更はクロスデバイスで伝搬され（クリック/タップ、スクロールも含む）全てのデバイスで一度に確認することも可能。</p>

<p>実際に「Polymer Starter Kit」を適応して「Paper Reader」という名のRSSリーダアプリを作ったお話は変わります。</p>

<p>使った技術の一覧で、これらの1つ1つにElementが存在しています。</p>

<ul>
<li>記事をGoogle Feedから取得（RSS、Atom、Media RSS feedに対応）</li>
<li>既読/未読の管理にはFirebaseを利用</li>
<li>オフラインでの動作</li>
<li>新着のプッシュ通知</li>
</ul>

<p>まとめると、Polymer Starter Kitは大きく分けて、以下の4つを含んでいる。</p>

<ul>
<li>Components</li>
<li>Layout</li>
<li>Theming</li>
<li>Build tools</li>
</ul>

<p>「これらのElementやPolymer Starter Kitを使って、何を作るかはあなた次第です」</p>

<p>と最後に結び、Matthew McNultyに戻ります。</p>

<p>(Speaker: Addy Osmani)</p>

<p><a href="https://html5experts.jp//developers.google.com/web/tools/polymer-starter-kit/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">リンク：Polymer Starter Kit（英語）</a></p>

<h2>まとめ</h2>

<p>ここ2年間で、Polymerが約束をして実現したことは以下の通り。</p>

<ul>
<li>Web Components</li>
<li>Interoperability</li>
<li>宣言的な書き方ができること</li>
</ul>

<p>ChromeではWeb Componentsがリリースされて1年、またProductionに耐えられるPolymer 1.0がリリースされた。</p>

<p>Salesforde、Vaadin、Atabistなどの3rdパーティも、PolymerをProduction用に使っている。Google Santa Tracker、Google I/O web appはオフラインで動作します、Polymer Starter Kitも今日から使えるし、今後は1.0には入れられなかった新しい機能、Elementを早いペースで次々に追加する予定です。</p>

<p>Polymerについての情報の取得等のリンクは以下。</p>

<ul>
<li>最新情報：<a href="https://html5experts.jp//polymer-project.org" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">polymer-project.org</a></li>
<li>Polymer Teamと直接会話：<a href="https://html5experts.jp//polymer-slack.herokuapp.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Slackチャンネル</a></li>
</ul>

<p>そして、Polymer単独のカンファレンスの告知がありました。</p>

<p>「2015年9月15日にアムステルダムにて、PolymerだけのカンファレンスPolymer Summitを開催します。1日中、Polymerを、また最先端のWeb開発を学びにくてください」とのことです！</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-2.21.54-AM.png" alt="Polymer Summit" width="640" height="359" class="alignnone size-full wp-image-15761" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-2.21.54-AM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-2.21.54-AM-300x168.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-2.21.54-AM-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Polymer Summit@アムステルダム 2015/09/15</figcaption>
</figure></p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-2.26.35-AM.png" alt="PolymerTeam" width="640" height="359" class="alignnone size-full wp-image-15763" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-2.26.35-AM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-2.26.35-AM-300x168.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-24-at-2.26.35-AM-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Polymer Teamの皆さん</figcaption>
</figure></p>

<p>最後に「バグも見つけてね」でセッションは終了でした。</p>

<p>(Speaker: Matthew McNulty)</p>

<h2>あとがき</h2>

<p>個人的にはPolymerを最初に触ったのが2013年頃で、そのキッカケは楽器系のアプリを作った時に必ず使いたくなるリッチなノブ、スライダ、スイッチ、鍵盤を簡単に配置できる世界を夢見た<a href="https://github.com/g200kg/webaudio-controls" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">webaudio-controls</a>が開発され始め、それに乗っかって一緒にはじめたことでした。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/webaudio-controls.png" alt="webaudio-controls" width="350" class="alignnonewp-image-15858" srcset="/wp-content/uploads/2015/06/webaudio-controls.png 555w, /wp-content/uploads/2015/06/webaudio-controls-300x153.png 300w, /wp-content/uploads/2015/06/webaudio-controls-207x106.png 207w" sizes="(max-width: 555px) 100vw, 555px" />
<figcaption>webaudio-controls</figcaption>
</figure>
</p></p>

<p>今回のセッションに参加して、その中で何度もリピートされていた言葉、
&#8220;<q>There is an element for that!</q>&#8220;（それ、エレメントあるよ！）をwebaudio-controlsを作ってから、実際に自分自身が言っていたことに気が付きました。</p>

<p>また、ブラウザにMIDI機器を接続して遊べるWebアプリを、簡単に作ることができる世界を夢見て<a href="https://github.com/ryoyakawai/x-webmidi/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">x-webmidi</a>というElementも作りました。これを作った理由は「ゼロから書くのはちょっと…という理由で手が出しずらい、という印象を少しでも和らげたい」からでした。</p>

<p>この「手軽に使えること」だったり「ゼロから書くのはちょっと…という理由で手が出しずらい、という印象を少しでも和らげたい」という想いがさらに一般に拡がりElementが量産されたのであれば、その未来はブラウザにはよりプリミティブなAPIが実装されるようになり、ブラウザのAPIをより使いやすくする、APIを組合せることで新たな枠組みを作るためのWeb Componentsが「ブラウザのAPIとWebアプリの中間に新たなクリエイティブな層」を創り出して、Web開発がExtensible Webな時代へ突入するのかな？なんて、Webの未来をモヤモヤ考えさせられる2015年のPolymerのセッションでした。</p>
]]></content:encoded>
		
		<series:name><![CDATA[Google I/O 2015 特集]]></series:name>
	</item>
		<item>
		<title>Polymer 1.0最新情報！（前編）ーPolymer 1.0とPolymer Catalog、活用事例の徹底解説</title>
		<link>/ryoyakawai/15885/</link>
		<pubDate>Tue, 30 Jun 2015 06:00:23 +0000</pubDate>
		<dc:creator><![CDATA[河合良哉]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Google I/O]]></category>
		<category><![CDATA[Polymer]]></category>

		<guid isPermaLink="false">/?p=15885</guid>
		<description><![CDATA[連載： Google I/O 2015 特集 (5) Polymerは、Google I/O 2015にて1.0が正式リリースとしてアナウンスされました。本記事は、Google I/OでPolymerが取り上げられた「P...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/google_io_2015/" class="series-313" title="Google I/O 2015 特集" data-wpel-link="internal">Google I/O 2015 特集</a> (5)</div><p><style>.post-detail-contents p{text-indent:0; overflow:hidden}</style></p>

<p><img src="/wp-content/uploads/2015/06/POLYMER-1.0.png" alt="POLYMER 1.0" width="300" class="wp-image-15439" align="left" srcset="/wp-content/uploads/2015/06/POLYMER-1.0.png 599w, /wp-content/uploads/2015/06/POLYMER-1.0-300x209.png 300w, /wp-content/uploads/2015/06/POLYMER-1.0-207x144.png 207w" sizes="(max-width: 599px) 100vw, 599px" />
Polymerは、Google I/O 2015にて1.0が正式リリースとしてアナウンスされました。本記事は、Google I/OでPolymerが取り上げられた「Polymer and modern web APIs: In production at Google scale」のセッションをレポートします。Polymerの最新情報や活用事例、Polymer Catalog、Polymer Starter Kitなど
盛りだくさんのこのセッションの翻訳と解説を前後編に分けてお伝えします。</p>

<p>前編となる本記事では、「Polymer1.0の特徴」、「Polymer Catalogとすぐに使えるElements」、「ライブサイトへの適用例（前半）」を解説します。</p>

<h2>Polymer1.0の特徴</h2>

<p>Polymerが全体的にどう変わったのか、その特徴をまとめて説明してくれました。Polymer1.0の特徴を全て紹介しきれていないとのことですが、セッションで特に紹介されていたのは以下の通りです。</p>

<ul>
<li><strong>高速化(0.5と比較)</strong>：Chromeでは3倍、モバイルSafariでは4倍高速化した</li>
<li><strong>軽量化(0.5と比較)</strong>：以前より35％コード量減らしPolyfillも含めてgzipをすると19kb-42kb</li>
<li><strong>Shady DOMの採用</strong>：スピードを重視したShadow DOMのPolyfillで100％互換ではない</li>
<li><strong>CSS Custom プロパティ</strong>：プロパティの変更だけでテーマやスタイルの変更を可能に</li>
</ul>

<p>「PolymerはWeb標準技術であるWeb Componentsのライブラリであって、そのElementを作ることができます。なので、結果的にそれらのElementはWeb標準技術の上に作られたのと同意である。他のブラウザ上でも動作するし、AngularやReactといったFrameworkの中に一緒に共存させることもできる、というところが最大の特徴であり利点でもあります」</p>

<p>セッションでは、これらの説明をコンテナを運ぶ物流システムに例え「標準化を元に作られたコンテナ（Polymer Element）だからこそ、標準化されたボート・電車・トラックで効率的に運ぶことだってできる（ブラウザのInteroperabolity）」という形で説明をしていました。この例えは、Polymer TeamはSan Franciscoのオフィスにいて、普段の会話の中に湾を行き交う輸送船について話すことが多いことに由来しているそうです。</p>

<p>(Speaker: Matthew McNulty)</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-17-at-12.39.14-AM.png" alt="SF_Bay" width="640" height="358" class="alignnone size-full wp-image-15430" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-17-at-12.39.14-AM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-17-at-12.39.14-AM-300x168.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-17-at-12.39.14-AM-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>サンフランシスコ オフィスからの眺め</figcaption>
</figure></p>

<h2>Polymer Element Catalogとすぐに使えるElements</h2>

<p>ここからPolymerを使ってWebアプリを作るときのElementについて話に変わります。</p>

<p>「Polymer Teamは全ての開発者にPolymerを使って高品質なアプリを簡単に作ってもらうことを目標にしています。そして、アプリはElementによって出来が左右されるので、高品質なアプリを作るには高品位なElementが不可欠です。なのでGoogleでは高品質なElementを提供します」</p>

<p>という導入があり、続いて具体的にElementの説明です。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-17-at-11.20.41-PM.png" alt="PolymerCatalog" width="640" height="360" class="alignnone size-full wp-image-15480" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-17-at-11.20.41-PM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-17-at-11.20.41-PM-300x169.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-17-at-11.20.41-PM-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>Polymer Catalogに用意されているElementのセット一覧 (2015年5月末の状態)</figcaption>
</figure></p>

<p>まずは去年から公開されていたElementとして、Iron Element、Paper Elementが紹介されています。そして、新しく追加されたElementとして、Google Web Components、Platinum Elements、Gold Elementsがあります。</p>

<ul>
<li><b style="background-color:#81c784;padding:5px">Iron Element (Fe)</b><br>新しく聞こえますが、Core Elementから名称を変更しました。内容は以前と変わらずElementの基本となり、どのアプリケーションにも使うようなエレメントのセット。</li>
<li><b style="background-color:#efefef;padding:5px">Paper Element (Md)</b><br> Material DesignのリファレンスになるElementのセット。</li>
<li><b style="background-color:#64b5f6;padding:5px">Google Web Components (Go)</b><br> Google SDKとも言えるようなElementでGoogleのServiceやAPI（GCP、Drive、Map、Hangout、Calendar、Analytics、YouTube、Docs、Chrome Web Store、アドレス帳など）を利用する際に利用するElementのセット。</li>
<li><b style="background-color:#cfd8dc;padding:5px">Platinum Elements (Pt)</b><br> オフライン・キャッシング、ServiceWorkers、Push Notificationのようなとてもパワフルな機能を最も簡単に利用することのできるElementのセット。このElementを使うことで、半年前には夢だと思っていたような機能が簡単に実装可能。</li>
<li><b style="background-color:#ffbb4d;padding:5px">Gold Elements (Au)</b><br> モバイルでの高品質な決済のチェックアウト遷移を作成できるElementのセット。日付、カード番号等の自動Validationが可能。</li>
</ul>

<p>これらのうち、新しく追加された3つのElementは、Web開発者が特定の問題を解決するために用意しているものとのことです。このPolymer Catalogについては次のように説明しています。</p>

<p>「このサイトの目的は、解決したい問題がある場合は解決策を見つければいいのだけど、例えば、何かに触発されたかったり、思ったこともないようなデザインを見つけたかったり・眺めたかったり、考えたこともないようなアプリケーションを考えたいという場合もあります。この2つ「解決策を見つける」、「インスピレーションを得たい」を実現させる為に、Elementをブラウスでき、デモを動作可能で、ドキュメントも読むことができるのがPoymer Catalogです」</p>

<p><a href="https://elements.polymer-project.org/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">リンク：Polymer Catalog（英語）</a></p>

<h3>Polymerを使ってアプリを実装、公開している3rdパーティとそのアプリの紹介</h3>

<p>「Polymer TeamではWeb開発者が「実装したい」と考えるであろう機能は、&#8221;<q>There is an element for that!</q>&#8220;（それ、Elementであるよ！）
と言えるようにりたいと思っていますが、我々の以外でも同じことを想っている方々は多くいます。そこで、ここでは出版関連を行っているAtabist、Enterprise向けのJavaアプリ用のFrameworkを作っているVaadin、そしてSalesforceの3つの事例を紹介します」</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-25-at-12.51.47-AM.png" alt="3rdparty" width="640" height="361" class="alignnone size-full wp-image-15792" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-25-at-12.51.47-AM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-25-at-12.51.47-AM-300x169.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-25-at-12.51.47-AM-207x117.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>PolymerでElementを作り公開している3rd Partyの紹介</figcaption>
</figure></p>

<h4>Atabist</h4>

<p>出版関連を行っている会社で、Web上に本を作るPlatformをリリース。Webは音声、映像、画像、地図、ブラフを一緒に配置して1つにまとめるにはとてもよい媒体で、これらの1つ1つをPolymerのElementにして自由に配置できるようにしたのがこのPlatform。</p>

<p><a href="https://atavist.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">リンク：Atabist（英語）</a></p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-26-at-10.20.47-PM.png" alt="vaadin" width="640" height="420" class="alignnone size-full wp-image-15903" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-26-at-10.20.47-PM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-26-at-10.20.47-PM-300x197.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-26-at-10.20.47-PM-207x136.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>インタラクティブにSoundCloudをページ上に配置している例</figcaption>
</figure></p>

<h4>Vaadin</h4>

<p>Enterprise向けのアプリを書くためのFrameworkを作っている有名な会社の1つで、Front-endのComponentsはPolymer Elementを使って実装している。特に大量のデータを表示することに重きを置き開発されていて、例えば、v-gridというElementを作っていて、これを使うとアドレス帳のようなモノを表示、LazyLoading、行または列の複数選択の機能もElementを実装することができる。グラフを描くElementも作っていてタグ名を変えるだけで、グラフの種類を変更することができる。</p>

<p><a href="http://vaadin.github.io/components-examples/v-grid/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">リンク：v-grid（英語）</a></p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-26-at-10.13.22-PM.png" alt="vaadin" width="640" height="359" class="alignnone size-full wp-image-15596" />
<figcaption>アドレス帳のElementの例</figcaption>
</figure></p>

<h4>Salesforce</h4>

<p>Salesforceは彼らのPlatform上でそのデータを表示するアプリケーションを作るためのSDK、APIを公開している。このアプリケーション開発をより簡単にしたいということで、Polymer Elementでの提供を行っている。</p>

<p><a href="https://sfdc-designer.herokuapp.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">ライブデモ：デザイナ（英語）</a></p>

<h4>Google社内でのPolymerの実用例</h4>

<p>最後にGoogle社内でのPolymerの実用例の紹介です。Polymer Teamは「GoogleさんはLiveサイトでPolymerを使っているの？」とよく聞かれるそうですが「もちろん使っている」とのことで、そのうち3つを紹介してくれました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/Translate.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/Translate-150x150.png" alt="Translate" width="120" height="120" class="alignleft size-thumbnail wp-image-15908" /></a>
<strong>Translate</strong>：Translation TeamはTranslateの質を上げるためにコミュニティのメンバーが参加して作り上げることのできるシステムを新しく作った。サイト全体がPaper Elementを使ったMaterial Designを採用している。このプロダクトはFront-endエンジニア2人で2～3ヶ月の開発期間で完成させることができたとのこと。Paper Elementを使っているので、開発者はどうやってMaterial Desiginを実装するかということは気にせず、アプリケーションの本質部分に集中して開発を進めらたそうです。</p>

<p><a href="https://translate.google.com/community" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">ライブデモ（英語）</a></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/PlayMusic.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/PlayMusic-150x150.png" alt="PlayMusic" width="120" height="120" class="alignright size-thumbnail wp-image-15905" /></a>
<strong>Play Music</strong>：Play TeamもPaper Elementを使ってMaterial Designを採用しているので、アプリケーションの本質部分に集中して開発を進めることができたとのことです。Play Musicは現在はPolymer Elementの組合せで作られていて、同じような音楽再生用WebサイトにElementを再利用することも可能です。（日本からはアクセスできません）</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/youtube_web.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/youtube_web-150x150.png" alt="youtube_web" width="120" height="120" class="alignleft size-thumbnail wp-image-15906" /></a>
<strong>YouTubeのモバイルWebサイト</strong>：多くのPolymerを使ったサイトはまだGoogle社内にしか公開されていないのですが、その中の1つ、それがYouTubeのモバイルのFront-End。これも全てがPolymer Elementで作られています。キビキビ動き、アニメーション、トランジションもついていて、とてもよいUIに仕上がっている。またビデオを画面の角にドラッグして動かすというWebでは実現が可能とは予想していなかったであろう動作も実現できている。このようにWebでもNativeのような最高の動作をPolymer Elementで作ることができる。</p>

<p>「Elementはとても素晴らしく、紹介したような素晴らしいElementを作ることができます。Polymer Teamは引続き素晴らしいElementを開発していきます。そして、コミュニティからもっと素晴らしいElementが出てくることを楽しみにしています」</p>

<p>と結び、次のライブサイトへの適用例の説明に移りました。</p>

<p>(Speaker: Taylor Savage)</p>

<h2>ライブサイトへの適用例（前半）</h2>

<p>ここからはEric Bidelmanにバトンタッチです。彼の3年間を振り返ってのお話からです。</p>

<p>Polymer Teamにいて「これはどうやってWeb Componentsで実現するの？」ということを開発者と話してきて、そこでよく質問にあがる具体例が「どうやってSPA（Single Page Application）をWeb Componentsでどう実装するのか？」、「他言語化やLazyLoad、またURLルーティングはど実現するのか？」というような「Polymerを使ってどう実現したいモノを実装するか？」という部分です。それに対してPolymer Teamはこう答えているそうです。</p>

<p>&gt; There is an element for that!</p>

<p>という掴みがあり、続いてEric Bidelmanが前回のI/Oから数多くの実験を実際に行い、Google.com上のアプリを作りそれらを公開して、実際に使えるのかを試してみた、というストーリで実例を2つ紹介してくれました。</p>

<p>「これらの事例ではPolymer1.0ではなく、ちょっと遅いけどGoogle.comで公開されているのは0.5。なんだけど、1.0と書き方が少し違うだけで本質的なPolymerの部分は同じなので、これからお話をする事例には影響は特にないのです」</p>

<p>と捕捉があって、Google Santa Tracker 2014とGoogle I/O Web Appの説明が始まります。</p>

<h3>Google Santa Tracker 2014</h3>

<p>このアプリは12月に公開されたアプリで、サンタ村を訪れることができ、12月中は毎日新しいゲームを提供したりしているAdvent Calendarのアプリ。日々提供されるゲームだったり、そのSceneのことを社内ではLaunchと呼んでいて、それらの全部がElementになっていて、Web AudioだったりWeb GLだったりを使っているものもある。クリスマスイブには今どこでサンタがプレゼントを配っているかも見ることができる。もちろんそれもElementになっている。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-20-at-8.06.39-PM.png" alt="SantaTracker" width="636" height="539" class="alignnone size-full wp-image-15586" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-20-at-8.06.39-PM.png 636w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-20-at-8.06.39-PM-300x254.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-20-at-8.06.39-PM-207x175.png 207w" sizes="(max-width: 636px) 100vw, 636px" />
<figcaption>Google Santa Tracker 2014</figcaption>
</figure></p>

<p>コード的な説明です。&lt;santa-app&gt; が全体をオーケストレーションするElementで、Google Analyticsに、また音楽の再生・停止をするEventの発火を行う。&lt;santa-app&gt; の内部にはさらにElementが入っている。URLルーティングもElementを作って対応していて、LazyLoadingのElementとを結びつけ、ユーザがSceneを選択したときにJavaScript、CSSが動的に読み込まれるような仕組みになっている。このプロジェクト全体的にElementはDeclarativeにしていて、各Sceneのプログレスバー、背景色、背景画像もそのおかげでHTMLのAttributeでの設定が可能になっている。</p>

<p><figure class="aligncenter">
<img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-25-at-10.55.33-AM1.png" alt="SantaTracker2014" width="640" height="360" class="alignnone size-full wp-image-15818" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-25-at-10.55.33-AM1.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-25-at-10.55.33-AM1-300x169.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-25-at-10.55.33-AM1-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" />
<figcaption>&lt;santa-app&gt;のElement</figcaption>
</figure>
  </li>
</ul></p>

<p>Google Santa Tracker 2014の説明は以上でした。</p>

<p>リンク：Google Santa Tracker <a href="https://html5experts.jp//santatracker.google.com" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">[ライブサイト]</a> <a href="https://html5experts.jp//github.com/google/santa-tracker-web" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">[コード]</a></p>

<p>（後編に続きます）</p>
]]></content:encoded>
		
		<series:name><![CDATA[Google I/O 2015 特集]]></series:name>
	</item>
		<item>
		<title>これからのモバイル向けWeb制作──The Next Generation Mobile Web</title>
		<link>/furoshiki/15144/</link>
		<pubDate>Fri, 26 Jun 2015 01:00:12 +0000</pubDate>
		<dc:creator><![CDATA[川田寛]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google I/O]]></category>
		<category><![CDATA[パフォーマンス]]></category>
		<category><![CDATA[モバイル]]></category>

		<guid isPermaLink="false">/?p=15144</guid>
		<description><![CDATA[連載： Google I/O 2015 特集 (4)最近、モバイルではネイティブ一強という状況にみえます。Webはあまり注目されません。今後も同じ状況が続くのでしょうか？そのことについて、Google I/O 2015の...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/google_io_2015/" class="series-313" title="Google I/O 2015 特集" data-wpel-link="internal">Google I/O 2015 特集</a> (4)</div><p>最近、モバイルではネイティブ一強という状況にみえます。Webはあまり注目されません。今後も同じ状況が続くのでしょうか？そのことについて、Google I/O 2015のセッション「The Next Generation Mobile Web」が参考になります。補足を加えつつ翻訳してみましたので、どうぞご覧ください。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/f29abf68c0f445a56f7dfc2747f2f6d9.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/f29abf68c0f445a56f7dfc2747f2f6d9.jpg" alt="スクリーンショット 2015-06-23 15.13.24" width="640" height="292" class="alignnone size-full wp-image-15669" srcset="/wp-content/uploads/2015/06/f29abf68c0f445a56f7dfc2747f2f6d9.jpg 640w, /wp-content/uploads/2015/06/f29abf68c0f445a56f7dfc2747f2f6d9-300x137.jpg 300w, /wp-content/uploads/2015/06/f29abf68c0f445a56f7dfc2747f2f6d9-207x94.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h1>But What About Mobile</h1>

<p>Webはパワフルな技術だ！これからも、ビジネスをもっと盛り上げていく。2014年、Eコマースは低く見積もっても1.5兆ドルの規模になった。そんな中、モバイルは何を変えたのか？ユーザにどんなインパクトを与えたのか？</p>

<p>モバイルは経済のシフト、デスクトップが担っていた領域の変化だ。パフォーマンスが求められるような動作も、従来のPCとは違い、バッテリーで動いているデバイス上で実現しなくてはいけない。必要とされる機能も完全に変わってしまった。プッシュ通知はモバイルのポテンシャルを高める上で重要なのだが、Webにそれはできなかった。結果、ネイティブの方が当然良く見えるわけだ。</p>

<p><img src="/wp-content/uploads/2015/06/1142563afd4b16f188a4fbcb59137e37.jpg" alt="スクリーンショット 2015-06-23 15.30.34" style="width:320px;float:right;padding-left:10px" class="alignnone wp-image-15673" srcset="/wp-content/uploads/2015/06/1142563afd4b16f188a4fbcb59137e37.jpg 640w, /wp-content/uploads/2015/06/1142563afd4b16f188a4fbcb59137e37-300x185.jpg 300w, /wp-content/uploads/2015/06/1142563afd4b16f188a4fbcb59137e37-207x127.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />しかし、我々は全てをネイティブアプリに置き換えるべきなのだろうか？ネイティブにはいいところがあるけれど、Webもまた負けないいいところがあるはずだ。</p>

<p>みなさんは、Chrome Dev Toolsがどれだけの人に使われているのかご存知だろうか？Androidは400万人/週だが、Dev Toolsは2,500万人/週に使われている。そして、素晴らしいことに、今もなお増加し続けている。全ての人が巨大で複雑なWebサイトを作っているわけじゃないし、中にはあまり上手くWebサイトを作れていない人もいる。けど、少なくともDev Toolsを使っているみなさんは十分にスキルが高い。今からするこの話は、そんなWebを愛する2,500万人のあなたたちに伝えたい。</p>

<h1>Reach</h1>

<p>Webサイトはツリー型だ。例えば以下の図だと、ノードにあたるのが<a href="https://www.pinterest.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Pinterest.com</a>みたいなサイトで、あなたたちのサイトはその葉にあたる。URLからURLへ、ノードから葉へ飛ぶ。異なるサイトであっても、リンクからリンクへ飛ぶことはそんなに難しいことじゃない。サイトの奥地へだって行ける。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/95a6fa84e4c5674d4d394ca513b17a7f.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/95a6fa84e4c5674d4d394ca513b17a7f.jpg" alt="スクリーンショット 2015-06-23 16.59.35" width="640" height="346" class="alignnone size-full wp-image-15677" srcset="/wp-content/uploads/2015/06/95a6fa84e4c5674d4d394ca513b17a7f.jpg 640w, /wp-content/uploads/2015/06/95a6fa84e4c5674d4d394ca513b17a7f-300x162.jpg 300w, /wp-content/uploads/2015/06/95a6fa84e4c5674d4d394ca513b17a7f-207x112.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>人間が使うモバイルアプリは平均12から20と言われている。しかし一方で、アクセスされるWebサイトは、一ヶ月あたり100ドメイン以上だ。それはWebが、リンクを使って簡単にアクセスできるからだ。USにおいて、85%のリテーラーはモバイル上のトラフィックがWeb経由でやってくる。これがWebの持つパワーなのだ。</p>

<h1>Performance</h1>

<p>では、これらのリーチに対して、Webページはどの程度のパフォーマンスが必要なのか？ページの読み込み時間か？いや、それでは十分とは言えない。実際にはもっと様々なメトリクスがある。スクロールだってサクサク動かなくちゃいけないし、アニメーションも60fpsで動かすべきだ。ただ、どんなパフォーマンスをどれぐらい速くすれば十分なのかは、なかなかわからない。</p>

<p>その答えとして「RAIL」というコンセプト挙げている。Reaction、Animation、Idle、Loadの略称だ。RAILでカギとなっている考え方は「When is performance &#8216;Good Enough&#8217;? When the user can&#8217;t perceive it.(十分な速さとは、ユーザがそれを気にしないことだ)」だ。そしてそれを実現するために、60fpsを意味する16.67ミリ秒、100ミリ秒、1秒という時間に注目している。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/4a57d3f075698caef5bacd6807a5b89f.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/4a57d3f075698caef5bacd6807a5b89f.jpg" alt="スクリーンショット 2015-06-23 17.39.31" width="640" height="345" class="alignnone size-full wp-image-15681" srcset="/wp-content/uploads/2015/06/4a57d3f075698caef5bacd6807a5b89f.jpg 640w, /wp-content/uploads/2015/06/4a57d3f075698caef5bacd6807a5b89f-300x162.jpg 300w, /wp-content/uploads/2015/06/4a57d3f075698caef5bacd6807a5b89f-207x112.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>RAILのR、Reaction Timeは、例えば画面にタップするなどのアクションに対して、100ミリ秒未満でリアクションすることを求めている。そうでないと、ユーザはそのアプリが、壊れているだとか遅いだとか感じるだろう。100ミリ秒未満で、ボタンの色を変えたりインジケーターを回したりすれば、フリーズしたようには見えない。</p>

<p>RAILのA、Animation Time。アニメーションは、16.67ミリ秒未満で動作することを求めている。RAILのI、Idle Timeについて。JavaScriptなどでデコードなどの重い処理を行うと、UIが固まってしまう。処理をチャンクを使うなどして分けて、Idleを作り出さなくてはいけない。その期間は50ミリ未満が望ましいだろう。そうすることで、RのReaction Timeの100ミリ秒未満は守られるだろう。</p>

<p>RAILのLは、みなさんもよく知っているLoad Timeだ。これは1秒未満が望ましい。ただ、これに関しては、Service Workerを使えば、読み込み時に動作中であることをユーザに伝えることができる。</p>

<p>Chrome開発チームには現在、約200人程度のエンジニアがいる。そしてその多くは、パフォーマンスを改善するために働いている。モバイルを良くしようと、様々な取り組みを行っている。その全てを深く語るには、時間が足りなさ過ぎている。一つだけ紹介すると、例えば「スケジューラー」。これはパフォーマンスを劇的に変えたと思っている。タスクの優先度が変わったことで、スクロールのパフォーマンスが大きく改善されたのだ。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/2076431dc9f44f8267098fa9046d04a7.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/2076431dc9f44f8267098fa9046d04a7.jpg" alt="スクリーンショット 2015-06-23 18.11.15" width="640" height="338" class="alignnone size-full wp-image-15684" srcset="/wp-content/uploads/2015/06/2076431dc9f44f8267098fa9046d04a7.jpg 640w, /wp-content/uploads/2015/06/2076431dc9f44f8267098fa9046d04a7-300x158.jpg 300w, /wp-content/uploads/2015/06/2076431dc9f44f8267098fa9046d04a7-207x109.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>パフォーマンス改善は、とても難しいことにみえるかもしれない。しかし臆することはない。博士号なんか取得していなくても、ちゃんとできる。Chrome Dev Toolを使って、サードパーティスクリプトであったり、リソースのパフォーマンスを計測して、問題を探るのだ。そして、RAILをゴールとして、パフォーマンス改善を行っていけばよいだろう。</p>

<h1>Engagement</h1>

<p>モバイルWebに欠けていたのは、エンゲージメントだ。しかし今、Webにはエンゲージメントを助けるたくさんの機能がある。ただ同時にそれは、セキュリティ面に大きな課題を抱えている。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/25f283076e8f93dddd3e89c5ee16f730.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/25f283076e8f93dddd3e89c5ee16f730.jpg" alt="スクリーンショット 2015-06-23 19.29.26" width="640" height="344" class="alignnone size-full wp-image-15690" srcset="/wp-content/uploads/2015/06/25f283076e8f93dddd3e89c5ee16f730.jpg 640w, /wp-content/uploads/2015/06/25f283076e8f93dddd3e89c5ee16f730-300x161.jpg 300w, /wp-content/uploads/2015/06/25f283076e8f93dddd3e89c5ee16f730-207x111.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>例えば、background sync(Service Worker)なんかは、Webページを閉じていても簡単にコンテンツの読み込みや送信ができてしまう。あなたが一ヶ月に100のサイトへアクセスするとして、その全てでbackground syncが有効になることは望まないだろう。質の悪いWebページにアクセスしようものなら、Background syncが裏で動き続け、バッテリはどんどん消耗されるなんてこともある。バッテリー効率の悪いネットワーク処理を、ガンガン動かすことが可能だからだ。</p>

<p>誰しも、初対面の相手は簡単には信頼しない。Webサイトオーナーとユーザーとの関係は、ゆっくりと築かれる。ネイティブはアプリのコピーがWebほど簡単ではない。ストアがいて、その開発元も明かされているからだ。しかしWebはオープンだ。パーミッション機能は慎重に作られていなくてはいけない。ユーザに確認して、パーミッションをWebサイト側へ与えることで、初めてリスクの高い機能は使えるようにしている。</p>

<p>さて、これらの機能のうち、有益なものを2つ紹介しよう。</p>

<p>一つ目が「Add to homescreen」だ。例えば興味をもったWebサイトがあったとする。そこに手軽にアクセスしたい。そういう時に、ホームスクリーン上へアイコンを配置しておき、ネイティブアプリのように手軽にアクセスできるようにしておくと、簡単にWebサイトへ飛べる。</p>

<p>実は、古くからそのような機能がブラウザについているのだけれど、設定メニューの中に隠れていたため、手軽では使えなかった。しかし今は、それができるAPIを提供している。これをWebサイト上から呼び出せば、以前より手軽になるだろう。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/a841e301993f92e87426d0e92e435a861.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/a841e301993f92e87426d0e92e435a861.jpg" alt="スクリーンショット 2015-06-23 20.17.32" width="640" height="344" class="alignnone size-full wp-image-15699" srcset="/wp-content/uploads/2015/06/a841e301993f92e87426d0e92e435a861.jpg 640w, /wp-content/uploads/2015/06/a841e301993f92e87426d0e92e435a861-300x161.jpg 300w, /wp-content/uploads/2015/06/a841e301993f92e87426d0e92e435a861-207x111.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>モバイルWebでユーザ体験を高める場合、ネイティブアプリのような、オフライン対応も重要になる。以前は、「App Cache」がその役割を担っていた。しかしそれは、始めること自体は簡単なのだけれど、メンテナンスにやっかいな問題を抱えている。失敗すると、Webサイトは簡単に動かなってしまう。これを改善し、柔軟なコントロールが行えるようにしたのが「Service Worker」だ。</p>

<p>Service Workerはオフラインで動くスクリプトで、Webサイトにアクセスするとまずそこに問い合わせが行われる。Service Workerは何をすべきか判断し、必要であればネットワークを通じてリソースを取得し、キャッシュへ置くことができる。その振る舞いから、クライアントサイドのJavaScriptプロキシなんて呼ばれていたりする。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/369ba25ed1f880652f2c6faf0cfd3efc.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/369ba25ed1f880652f2c6faf0cfd3efc.jpg" alt="スクリーンショット 2015-06-23 20.30.12" width="640" height="343" class="alignnone size-full wp-image-15701" srcset="/wp-content/uploads/2015/06/369ba25ed1f880652f2c6faf0cfd3efc.jpg 640w, /wp-content/uploads/2015/06/369ba25ed1f880652f2c6faf0cfd3efc-300x161.jpg 300w, /wp-content/uploads/2015/06/369ba25ed1f880652f2c6faf0cfd3efc-207x111.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Google I/OのWebサイトなんかが良い例だ。Service Workerを使って、必要な全てのリソースをキャッシュに読み込んでいる。Gulpに「<a href="https://github.com/GoogleChrome/sw-precache" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">sw-precache</a>」というプラグインがある。それを使えば、簡単にService Workerのインテグレーションを、あなたの現場のワークフローへ組み込めるだろう。</p>

<p>Service Workerは、Webページが複数のタブが開かれていても、その全てと通信できる。また逆に、一つも開かれていなくても内部で生存している。それはランダムに起き上がって動くようなことはせず、基本的にはイベント駆動だ。ネットワークなどのイベントを検知して、スクリプトはストレージ内からメモリ上へ移される。だいたい50ミリ秒程度だろうか。その後、Service Workerの処理が実行される。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/07a91e6bb098b31501d1a459fe6f3f2e.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/07a91e6bb098b31501d1a459fe6f3f2e.jpg" alt="スクリーンショット 2015-06-23 20.45.46" width="640" height="345" class="alignnone size-full wp-image-15702" srcset="/wp-content/uploads/2015/06/07a91e6bb098b31501d1a459fe6f3f2e.jpg 640w, /wp-content/uploads/2015/06/07a91e6bb098b31501d1a459fe6f3f2e-300x162.jpg 300w, /wp-content/uploads/2015/06/07a91e6bb098b31501d1a459fe6f3f2e-207x112.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>モバイルであれば、ネイティブアプリのようにプッシュ通知を扱いたい考える事は必然であろう。Anish AcharyaはTechCrunchで「Notification Are The Next Platform(次のプラットフォームは通知だ)」と語っている。通知機能は、エンゲージメントを改革するのだ。</p>

<p>人々がアプリに長く時間を使うのは、人々が通知を受け取るからだ。モバイルの画面を見て、通知を受け取っているのを見て、そこでアプリを使う決断をする。ニュースサイト「<a href="http://www.theguardian.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">The Guardian</a>」はネイティブアプリを提供しているのだが、彼らは事件が起きた時に、そのニュースをプッシュ通知を通じて伝えると、40%のユーザがそこからやってきたそうだ。これはとても多い人数だ。</p>

<p>そんなプッシュ通知だが、今はブラウザから実行できるようになっている。一つの例として、The Guardianのある記事へアクセスした時に、その記事の更新をプッシュ通知を受け取ってみる。</p>

<p>通知の許可を、Webサイト上で行うことができる。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/52aab70da8979c5ed6c1d05556516172.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/52aab70da8979c5ed6c1d05556516172.jpg" alt="スクリーンショット 2015-06-23 20.57.29" width="640" height="342" class="alignnone size-full wp-image-15704" srcset="/wp-content/uploads/2015/06/52aab70da8979c5ed6c1d05556516172.jpg 640w, /wp-content/uploads/2015/06/52aab70da8979c5ed6c1d05556516172-300x160.jpg 300w, /wp-content/uploads/2015/06/52aab70da8979c5ed6c1d05556516172-207x111.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>その後、Chromeを閉じ、ユーザは作業を再開する。そして、記事が更新されると・・・この通り！プッシュ通知が飛んでくる。これは他のネイティブアプリと、同じように扱われている。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/fc0b304a5503fa4bae235cdc919e92e7.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/fc0b304a5503fa4bae235cdc919e92e7.jpg" alt="スクリーンショット 2015-06-23 21.02.02" width="640" height="344" class="alignnone size-full wp-image-15705" srcset="/wp-content/uploads/2015/06/fc0b304a5503fa4bae235cdc919e92e7.jpg 640w, /wp-content/uploads/2015/06/fc0b304a5503fa4bae235cdc919e92e7-300x161.jpg 300w, /wp-content/uploads/2015/06/fc0b304a5503fa4bae235cdc919e92e7-207x111.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>じつは、今サンプルとして紹介したThe Guardianは、今後本当にプッシュ通知を対応させる予定だ。SNSのFacebookや、商品を扱っているebayやticketmasterでも対応する予定だ。今後も増えていくことだろう。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/ce366b694a44a99489bf655e5c4cad83.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/ce366b694a44a99489bf655e5c4cad83.png" alt="スクリーンショット 2015-06-23 21.18.04" width="640" height="344" class="alignnone size-full wp-image-15708" srcset="/wp-content/uploads/2015/06/ce366b694a44a99489bf655e5c4cad83.png 640w, /wp-content/uploads/2015/06/ce366b694a44a99489bf655e5c4cad83-300x161.png 300w, /wp-content/uploads/2015/06/ce366b694a44a99489bf655e5c4cad83-207x111.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h1>最後に</h1>

<p>いかがでしたか？</p>

<p>Reach、Performance、Engagementは非常に重要であり、これらが効果を上げれば、モバイルWebは上手くいく、というのがGoogleらの答えなようです。</p>

<p>「Web vs ネイティブ」という議論は散々行われてきましたが、彼らはそういう見方をしていないようですね。モバイルの本質を考え、そこからWebの立ち位置を明確化してきたように見えます。</p>

<p>よくよく考えてみたら、モバイルのホームスクリーンはブラウザのブックマーク機能と、そのユースケースに大きな違いはありません。そして、最近のプッシュ通知もまた、アプリの状態を表示するものというよりも、エンゲージメントの高い情報を目立つ所にリスト化しているだけのようにみえます。それはWebのサービスにおいて、メールの通知によって補っていた機能です。いまさら、驚くようなことでもありません。従来デスクトップでもやっていたことを、モバイルのユーザビリティに合わせてきたと捉えられます。</p>

<p>この考え方が、一日でも速く現場にも浸透してほしいですね。そのためにも、「Windows XPの悲劇の再来」にも見えるAndroidのフラグメント化が、一日でもはやく改善してくれることを祈っています。</p>
]]></content:encoded>
		
		<series:name><![CDATA[Google I/O 2015 特集]]></series:name>
	</item>
		<item>
		<title>【後編】Material Designの今がわかる「Material Now」―Google I/O 2015</title>
		<link>/t32k/15349/</link>
		<pubDate>Tue, 23 Jun 2015 23:00:17 +0000</pubDate>
		<dc:creator><![CDATA[石本 光司]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[Google I/O]]></category>
		<category><![CDATA[Material Design]]></category>
		<category><![CDATA[Material Now]]></category>

		<guid isPermaLink="false">/?p=15349</guid>
		<description><![CDATA[連載： Google I/O 2015 特集 (3)この記事は2015年5月28日に行われたGoogle I/O 2015「Material Now」セッションの翻訳です。「Material Now」では、Materia...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/google_io_2015/" class="series-313" title="Google I/O 2015 特集" data-wpel-link="internal">Google I/O 2015 特集</a> (3)</div><p>この記事は2015年5月28日に行われたGoogle I/O 2015「Material Now」セッションの翻訳です。「Material Now」では、Material Designがリリースされてからの1年間の状況や反響、事例等を取り上げています。本翻訳の後編は、Google社のデザインに対する取り組みと、Material Designの採用事例について記述します。</p>

<h2>Design Sprints</h2>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/09.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/09.jpg" alt="" width="640" height="339" class="aligncenter size-full wp-image-15326" srcset="/wp-content/uploads/2015/06/09.jpg 640w, /wp-content/uploads/2015/06/09-300x159.jpg 300w, /wp-content/uploads/2015/06/09-207x110.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<ul>
<li><a href="https://developers.google.com/design-sprint/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Design Sprint | Google Developers</a></li>
</ul>

<p>私たちはみなさんにMaterialをもっと好きになってもらいたいですし、みなさんのフィードバックをMaterialに取り込みたいと考えています。みなさんと対話するために、去年から私たちはいくつかのプログラムを始めています。</p>

<p>スターターのために、私たちはGoogleでDesign Sprintsを行いました。マウンテンビューのキャンパスでガレージと呼ばれる場所で、1日かけてデザインワークショップをします。いくつかの企業を招いて、そのチームのデザイナー、プログラムマネージャー、エンジニアが一緒にプロダクト開発における特定の問題に取り組むのです。</p>

<p>私たちはそれをサポートするのですが、それはなにも既存のアプリのMaterial Design化だけでなく、アプリデザインをいろんな観点からサポートするのです。これはとても素敵な取り組みで、私たちはみなさんが抱えている問題が何なのかを理解することができます。とても真剣で濃密なプロセスですが、反応はとても良いものでした。私たちは17の企業と協力し、今もこれ続けています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/05.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/05.jpg" alt="" width="640" height="340" class="aligncenter size-full wp-image-15334" srcset="/wp-content/uploads/2015/06/05.jpg 640w, /wp-content/uploads/2015/06/05-300x159.jpg 300w, /wp-content/uploads/2015/06/05-207x110.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>加えて、私たちは100以上のデザインレビュー、それは1、2時間の短いセッションで、私たちのデザイナーの何人かがみなさんのデザインチームとMaterial Designの実装について話し合うのです。これもまたみなさんと協力しあえることができ、技術・デザイン両面からみなさんをサポートすることができます。</p>

<p>I/Oではデザインのセッションが他にもありますので、ぜひとも、みなさんチェックしてみてください。もし、このようなデザインレビューができないのなら、どうか<a href="http://www.google.com/design/about/#hello-world" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">design@google.com</a>まで連絡ください。</p>

<h2>FORM</h2>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/form.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/form.png" alt="form" width="640" height="363" class="aligncenter size-full wp-image-15360" srcset="/wp-content/uploads/2015/06/form.png 640w, /wp-content/uploads/2015/06/form-300x170.png 300w, /wp-content/uploads/2015/06/form-207x117.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<ul>
<li><a href="http://www.google.com/design/form/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">FORM</a></li>
</ul>

<p>昨年、Googleで初めてデザインカンファレンスを、ここサンフランシスコで開催しました。このイベントはとても素晴らしいものとなりました。このイベントは招待制なので、みなさんの中でどれだけの人がこのイベントに行けるかどうかは私にはわかりませんが、デザインコミュニティに繋がっていればその機会があることでしょうし、私たちは世界中のデザイナーを招き、講演をし、パネルディスカッションをし、ハンズオンのワークショップもしました。次のFORMを企画していますので、どうぞご期待ください。</p>

<h2>Material Design in the Wild</h2>

<p>さて、Material Designについてはここで終わりです。なぜなら、私たちはみなさんにもっと美しいアプリを作ってほしいですし、もっと直感的な体験をみなさんのユーザー・顧客に届けてほしいと考えています。</p>

<p>ここでセッションを終えますが、みなさんが実装したMaterialの事例について話す時間を設けることにしましょう。私たちはいくつかのMaterial Designを採用しようとする企業と話す機会を得ました。そして彼のストーリーを聞きました。そこで彼らの事例についてシェアしたいと思います。</p>

<h3>Trello</h3>

<p>まず、<a href="https://play.google.com/store/apps/details?id=com.trello" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Trello</a>です。いくつかのプロジェクトを組織したりシェアするのに便利です。MobileリードのHamidはTrelloのMaterial Design化することで、プロダクトそれ自体、デザインにフォーカスすることができたと言っています。さらにははっきりとしたインパクトも数字として現れています。</p>

<ul>
<li>週間ユーザーあたりのセッション数が10%増加</li>
<li>セッションあたりのボード作成数が42%増加</li>
<li>セッションあたりのボードを追加するユーザー数が63%増加</li>
</ul>

<h3>The Hunt</h3>

<p>次にファッションスタイルを共有する<a href="https://play.google.com/store/apps/details?id=thehunt.shoptap.thehunt" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">The Hunt</a>ですが、プロダクトデザイナーのJennyは、Material Designはデザインチームをスムーズに拡張してくれるものであり非常に助かっており、それはまたチームを加速させるものだと述べています。私たちは非常に嬉しかったです。なぜならこれは私たちが望んでいたことだからです。同様に、HuntのMaterial Design化で、以前と比べて<strong>”Hunts”が30%増加</strong>しました。</p>

<h3>Pocket Casts</h3>

<p>最後に、ポッドキャストアプリの<a href="https://play.google.com/store/apps/details?id=au.com.shiftyjelly.pocketcasts" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Pocket Casts</a>ですが、前述のアプリと同じような効果をあげていますし、Material Design化により3<strong>0%も売上が増加</strong>しました。ファンタスティックですね！</p>

<p>このような事例は、なぜMaterialを採用するのかといった証明になりますし、まさしく私たちが進むべきものです。私たちは、みなさんが現在やっていることをさらに集中・加速させることを手助けしようとしているのです。もし、Material Design化に対して説得を要するのならこれらの事例をぜひとも使ってもらいたいです。</p>

<p>みなさんのこのような素晴らしい成果に私たちは非常に感動しました。もう少しこのようなアプリに対してより多くのみなさんにシェアや賞賛をしてもらいたいと考え、私たちPlayチームとDevチームは18の素晴らしいMaterial Designアプリを選択し、ショーケースとしてみなさんにシェアしたいと思います。</p>

<ul>
<li><a href="https://play.google.com/store/apps/collection/promotion_3001769_io_awards" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Best-In-Class Android Design &#8211; Google Play の Android アプリ</a></li>
</ul>

<p>昨年、Material Designを紹介する動画を作成しましたが、実際それらはフェイクのアプリですが、今回並んでいるのは実際のみなさんが作ったまぎれもないリアルなアプリです。私たちは非常に興奮しております。</p>

<h2>Material Design Award</h2>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/05.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/05.png" alt="" width="640" height="338" class="aligncenter size-full wp-image-15328" srcset="/wp-content/uploads/2015/06/05.png 640w, /wp-content/uploads/2015/06/05-300x158.png 300w, /wp-content/uploads/2015/06/05-207x109.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<ul>
<li><a href="http://www.google.com/design/articles/material-design-awards/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Material Design Awards &#8211; Articles &#8211; Google Design</a></li>
</ul>

<p>さらに私たちは、特定の分野でもっとも素晴らしいMaterial Designをしているアプリを表彰するためのMaterial Design Awardも用意しました。今年は6つのカテゴリーから選びました。これらのアプリはまさしくMaterial Designのパイオニアです。</p>

<ul>
<li>Adaptive Layouts &#8211; <a href="https://play.google.com/store/apps/details?id=com.ideashower.readitlater.pro" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Pocket</a></li>
<li>Immersive Imagery &#8211; <a href="https://play.google.com/store/apps/details?id=com.bhphoto" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">B&amp;H Photo Video Pro Audio</a></li>
<li>Elegant Typography &#8211; <a href="https://play.google.com/store/apps/details?id=com.nytimes.android" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">NYTimes – Latest News</a></li>
<li>Seamless Browsing &#8211; <a href="https://play.google.com/store/apps/details?id=au.com.shiftyjelly.pocketcasts" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Pocket Casts</a></li>
<li>Crafted Simplicity &#8211; <a href="https://play.google.com/store/apps/details?id=com.samruston.weather" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Weather Timeline &#8211; Forecast</a></li>
<li>Delightful Animation &#8211; <a href="https://play.google.com/store/apps/details?id=com.tumblr" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Tumblr</a></li>
</ul>

<p>私たちMaterial Designチーム全体は非常にみなさんに感謝いたしております。なぜなら、システムそれ自体はただのアイデアに過ぎませんが、みなさんの日々の仕事のがんばり、貢献、革新のおかげで、Material Designがリアルなものとして、実際に手に触れるものとなったのです。本当にありがとうございます。</p>

<p>そういうわけで、Material Designの最初の一年は素晴らしくわくわくするような成功した一年でした。私たちは引き続き、みなさんとコミュニケーションしていきたいと考えています。何が機能して、何が機能しないのか、などみなさんから学びたい。次の一年はさらに素晴らしい一年となることを楽しみにしていますし、また来年ここGoogle I/OでMaterial Designの2歳の誕生日を祝うために集まりましょう。今日は本当にありがとうございました。</p>
]]></content:encoded>
		
		<series:name><![CDATA[Google I/O 2015 特集]]></series:name>
	</item>
		<item>
		<title>【前編】Material Designの今がわかる「Material Now」―Google I/O 2015</title>
		<link>/t32k/15318/</link>
		<pubDate>Tue, 23 Jun 2015 03:01:09 +0000</pubDate>
		<dc:creator><![CDATA[石本 光司]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[Google I/O]]></category>
		<category><![CDATA[Material Design]]></category>
		<category><![CDATA[Material Now]]></category>

		<guid isPermaLink="false">/?p=15318</guid>
		<description><![CDATA[連載： Google I/O 2015 特集 (2)この記事は2015年5月28日に行われたGoogle I/O 2015「Material Now」セッションの翻訳です。「Material Now」では、Materia...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/google_io_2015/" class="series-313" title="Google I/O 2015 特集" data-wpel-link="internal">Google I/O 2015 特集</a> (2)</div><p>この記事は2015年5月28日に行われたGoogle I/O 2015「Material Now」セッションの翻訳です。「Material Now」では、Material Designがリリースされてからの1年間の状況や反響、事例等を取り上げています。本翻訳の前編は、Material Designの普及状況とアップデート内容について記述します。</p>

<p><a href="https://www.youtube.com/watch?v=8UicJ0SxBwA" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/06/01.png" alt="" width="640" height="357" class="aligncenter size-full wp-image-15330" srcset="/wp-content/uploads/2015/06/01.png 640w, /wp-content/uploads/2015/06/01-300x167.png 300w, /wp-content/uploads/2015/06/01-207x115.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<ul>
<li><a href="https://events.google.com/io2015/schedule?sid=35718f8b-b6d4-e411-b87f-00155d5066d7#day1/35718f8b-b6d4-e411-b87f-00155d5066d7" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Material Now &#8211; Google I/O 2015</a></li>
</ul>

<p>こんにちは、みなさん。私の名前は<a href="https://plus.google.com/+MatiasDuarte/posts" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Matias Duarte</a>です。今日はMaterial Nowについてお話したいと思います。まずは、ハッピーバースデー！Materialですね。記念すべきマイルストーンです。昨年のI/Oで私たちはMaterial Designを紹介しました。私たちは異なるプラットフォーム、異なるスクリーンサイズを超えたデザインシステムを作りたかったのです。私たちはモダンなグラフィックデザインと現実的なユーティリティ、ユーザービリティを組み合わせたかったのです。そして、後づけではないモーションデザインを重視したシステムを作りたかったのです。</p>

<p>信じられないかもしれませんが、私たちがMaterial Designを作っていた時、どのようにそれが受け入れられるのか、少しナーバスでした。しかし、ふたを開けてみれば、私たちはそれを気に入っていましたし、こんな素敵なクオートも見かけました。</p>

<blockquote>
  <p>Material Designは単なるタブレット・スマートフォン用のデザインではない。それはプロダクトが何百万というユーザーにどうコミュニケーションするのかシステマティックなアプローチである。<br>
  &mdash; Gizmodo</p>
</blockquote>

<p>また開発者のみなさんも、良い反応を示してくれました。</p>

<blockquote>
  <p>Googleはデザインゲームを次に進めた。それは絶対的な美的感覚に頼る変わりに、個々のデザイナーをより自由にする原則を定義したのだ。<br>
  &mdash; Sacha Greif Creator of Folyo, Telescope, and Sidebar</p>
</blockquote>

<p>もちろん、デザイナーのみなさんもMaterial Designが何を解決しようとしているのか、そのシステムが、すべてのインタラクティブなプラットフォーム上でデザインする上で助けになると、とても理解しているよう思えます。</p>

<blockquote>
  <p>Material Designは、Web全体のビジュアルを根本的に変えるポテンシャルを持っている。<br>
  &mdash; Armin Vit Under Consideration/Brand New</p>
</blockquote>

<p>こういった感想を聞けて、私たちはホッとしました。しかし、本当にみなさんが聞きたいのは、どのくらいMaterialが役に立っているのか？ということでしょう。私たちGoogleは数字が好きですので、ここでMaterial Designに関する数字を見ていきましょう。</p>

<h2>Material Designに関するデータ</h2>

<p>まずは、私たちのMaterial Designガイドラインを見ていきましょう。私たちはこれを親しみを込めて、『スペック』と呼んでいます。この一年足らずで、<strong>250万ユニークビジター</strong>がこのスペックに訪れました。これはとても良い結果だと私は考えます。もし、あなたがYoutuberであったり猫動画をアップロードしている人であれば、これはそんなに良い結果とは言えないでしょう。しかし、これはデザインガイドラインですよ？すごくありませんか？</p>

<p>もっと重要なことに、このうち<strong>60%以上のユーザーが再訪問</strong>しているのです。これはMaterial Designガイドライン決して一度チラ見すれば理解できるものではないですし、何度も何度も見るような役立つリファレンスだということでしょう。特に、カラー、タイポグラフィとアイコン、そしてもちろん、FAB（Floating Action Button）などのコンポーネントのセクションが特に閲覧されているようです。</p>

<p>デザイナーだけでなく、開発者のみなさんもMaterialを使っています。Polymerに目を向ければ、MaterialコンポーネントをWebに実装するために必要なシステム、Paper Elementの仕様書が<strong>250万回も閲覧</strong>されています。もっと重要なことは、<strong>10万ものWebプロジェクト</strong>で、このフレームワークが使われていることです。</p>

<p>また、みなさんが気にかけているのはAndroid上ではどのくらいなのか？でしょう。Play Store上では<strong>25万近くのMaterial Designを実装したアプリ</strong>を確認することができます。たぶん、これはそんなに大きな数字ではないでしょう。なぜなら何十億というAndroidデバイスがあるというのに、もしくはPlay Storeができてからの7年間どれだけのアプリがリリースされたのだろうか？と考えるからです。</p>

<p>違う観点からこの数字を見れば、2014年10月にLollipop(Android 5.0)がリリースされてから、Play Storeで出されたアプリの<strong>40％はMaterial Designを採用</strong>しています。これは良い結果だと考えています。<strong>新しくできたアプリの3つに1つはMaterial</strong>の恩恵を受けているからです。</p>

<p>これらは始まりにしかすぎませんが、私たちはもっとこの数字を大きくしたいと考えています。デザインに終わりはありません。そこでこれらの数字をどのように大きくするのか、またいかに早く普及させるのか、そしてMaterialをみなさんにいかに簡単に使ってもらうか説明したいと思います。</p>

<p>私たちは、より良く、より包括的にするためにMaterial Designガイドラインのアップデートを公開以来、続けています。実際、私たちはこれまで<a href="https://www.google.com/design/spec/whats-new/whats-new.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">2回アップデート</a>を既にしています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/02.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/02.png" alt="" width="640" height="339" class="aligncenter size-full wp-image-15333" srcset="/wp-content/uploads/2015/06/02.png 640w, /wp-content/uploads/2015/06/02-300x159.png 300w, /wp-content/uploads/2015/06/02-207x110.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>最初は2014年11月、Organizing Objects、Navigation Drawers、スクローリングテクニック、Swipe to Reflesh、プロダクトアイコンのセクションを追加しました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/03.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/03.png" alt="" width="640" height="338" class="aligncenter size-full wp-image-15327" srcset="/wp-content/uploads/2015/06/03.png 640w, /wp-content/uploads/2015/06/03-300x158.png 300w, /wp-content/uploads/2015/06/03-207x109.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>2015年4月のアップデートでは、Data Tables、App StructureなどのMaterial Designのガイドラインを多く追記しました。</p>

<h2>2015年5月のアップデート</h2>

<p>そして今日、2015年5月はガイドライン公開後もっとも大きなアップデートとなります。非常に多くのものを追加しました。その中にはデザインパターンのリニューアルも含まれています。</p>

<h3>Floating Action Button</h3>

<p><img src="http://i.imgur.com/VMdu06n.gif" alt="Floating Action Button" /></p>

<p>そう、みなさんも好きなFABです。スペック公開時は非常に限定したガイドラインになっており、どのようにフローティングアクションボタンが振る舞うのか、もっと違うトランスフォームがあるのではないか、もっと柔軟性があっては良いのではないかとみなさん考えたことでしょう。私たちもそう思います。よって今日はこの<a href="http://www.google.com/design/spec/components/buttons-floating-action-button.html#" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">FABパターン</a>を拡張したいと思います。これによりもっと柔軟にFABをみなさんのアプリに実装することができることでしょう。</p>

<h3>Material Icon Library</h3>

<p><a href="https://www.google.com/design/icons/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-11-at-9.09.39-PM.png" alt="Screen Shot 2015-06-11 at 9.09.39 PM" width="640" height="315" class="aligncenter size-full wp-image-15343" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-11-at-9.09.39-PM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-11-at-9.09.39-PM-300x148.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-11-at-9.09.39-PM-207x102.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>また、今日はスペックにまったく新しいリソース、<a href="https://www.google.com/design/icons/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Material Iconライブラリ</a>を追加しました。このサイトには750以上ものみなさんのプロジェクトで簡単に使えるアイコンあります。しかも、ワンクリックでプロジェクトに導入できるようにしてあります。アプリ開発者のみなさんはすべての必要な解像度のアイコンをここでダウンロードできます。さらにこれらのアイコンをWebフォントとしてもリリースしてますので、リガチャ（合字）として利用できるので、みなさんはアイコンの名前をタイプするだけで実装できます。とってもクールですよね？</p>

<h3>Adaptive Layout</h3>

<p><img src="/wp-content/uploads/2015/06/layout_adaptive_breakpoints_01.png" alt="layout_adaptive_breakpoints_01" width="640" height="282" class="aligncenter size-full wp-image-15346" srcset="/wp-content/uploads/2015/06/layout_adaptive_breakpoints_01.png 640w, /wp-content/uploads/2015/06/layout_adaptive_breakpoints_01-300x132.png 300w, /wp-content/uploads/2015/06/layout_adaptive_breakpoints_01-207x91.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<ul>
<li><a href="https://www.google.com/design/spec/layout/adaptive-ui.html#" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Adaptive UI &#8211; Layout &#8211; Google design guidelines</a></li>
</ul>

<p>Material Designについての要望で一番大きなものと１つとしてアダプティブレイアウトがあります。このため、今回はスケーラブルで一貫性のあるグリッド、レイアウト間でのブレークポイント、振る舞いなど関する詳細なセクションを新たに追加しました。この新しいパターンはきっとどのコンテキストにもなじむことでしょう。</p>

<h3>Device Metrics</h3>

<p><a href="https://www.google.com/design/tool/devices/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-11-at-9.11.50-PM.png" alt="Screen Shot 2015-06-11 at 9.11.50 PM" width="640" height="337" class="aligncenter size-full wp-image-15345" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-11-at-9.11.50-PM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-11-at-9.11.50-PM-300x158.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-11-at-9.11.50-PM-207x109.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<ul>
<li><a href="https://www.google.com/design/tool/devices/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Device Metrics &#8211; Google Design</a></li>
</ul>

<p>加えて、アダプティブデザインのためにデバイスのサイズレファレンスを新たにサイトに追加しました。これは、ウェアラブルだろうと、携帯端末であろうとも、タブレット・ラップトップであろうとも任意のサイズのデバイス上でデザインするときに役立つでしょう。そしてキーとなる解像度や密度を発見できるでしょう。もっと重要なことは、これによってどのデバイス・向きで、どのアダプティブテンプレート・パターンを使うべきか理解できるようになったことでしょう。この2つのリソースがみなさんの役に立つことを祈っています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/04.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/04.png" width="640" height="338" class="aligncenter size-full wp-image-15331" srcset="/wp-content/uploads/2015/06/04.png 640w, /wp-content/uploads/2015/06/04-300x158.png 300w, /wp-content/uploads/2015/06/04-207x109.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>もちろん、ほかにもたくさんのアップデートがあります。意味のあるモーションについて解説したセクション、ローンチスクリーン、エンプティステートなどの追加と、多くのアップデートがなされました。</p>

<p>そして、現在Material Designはほかのプロダクト、TV、Auto、VRのCardboardに対しても適用できるよう、ガイドラインを追加しました。</p>

<p>今回の大型アップデートによって、みなさんのデザインのお役に立てること祈っていますし、私たちに引き続きフィードバックをください。そうすれば、私たちはアップデートを続けることができます。</p>

<p>私たちはガイドライン・ツール、リファレンスの枠を超えたかったのです。つまり、それらはいくぶんか静的で、ドライ、権威的なのです。そこで、私たちはデザイナーがダイレクトに繋がれる場所にするために、<a href="http://www.google.com/design/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google Design</a>を新しくリニューアルしました。</p>

<p>つまり、それをデザイナーと開発者のコミュニティにしたかったのです。どうしてデザインをするのか、どのようにデザインするのかといった情報をシェアする場所として考えています。実用的な記事やビデオを配信することで、デザイナー・開発者が抱えている関心事、例えば、どのようにブランド・アイデンティティを損なわずMaterial Designを実装するのかなどを解決できると思っています。</p>

<p>また、Android、iOS、Webと異なるプラットフォーム間でデザインを簡単にするTipsなどの記事などもあります。私たちはみなさんにどこでも快適にMaterialを使ってほしいと思っています。チュートリアルもちろん、Material Designの裏側のシーンを収めたビデオなどもありますので、どうぞチェックしてみてください。</p>

<h2>Polymer</h2>

<p><a href="https://www.polymer-project.org/1.0/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/06/Screen-Shot-2015-06-11-at-10.06.53-PM.png" alt="Screen Shot 2015-06-11 at 10.06.53 PM" width="640" height="266" class="aligncenter size-full wp-image-15352" srcset="/wp-content/uploads/2015/06/Screen-Shot-2015-06-11-at-10.06.53-PM.png 640w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-11-at-10.06.53-PM-300x125.png 300w, /wp-content/uploads/2015/06/Screen-Shot-2015-06-11-at-10.06.53-PM-207x86.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<ul>
<li><a href="https://www.polymer-project.org/1.0/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Welcome &#8211; Polymer</a></li>
</ul>

<p>ここまで紹介してきた技術はデザイナーにとって、Materialを表現する上で便利なものですが、今日は開発者のカンファレンスですからMaterialを実装する上で役立つものを紹介したいと思います。</p>

<p>もちろん、最初はPolymerです。今日Polymer 1.0がアナウンスされました。これはパフォーマンス的にも満足が得られるようになったり、安定したり、APIが固定されたことを意味します。PolymerはモダンなWebプラットフォームとモバイルプラットフォームのために必要なものです。もしPolymerを使えば、簡単にスケール可能なアプリケーションを作ることができるでしょう。Polymer開発チームはパフォーマンス改善のために、一行毎にPolymerのコードを書き直したと私に言いました。とっても速くなりましたよ。つまり、プロダクション用途に使ってもらっても問題ないということであり、高品質のアプリのようなものをWeb上でも作成可能ということです。</p>

<p>さらに、Polymer Starter kitとCatalogはMaterial Designのアプリ作成にとりかかる前に、すべてのPaper Elementsを実際に使って試してみることができます。デモやサンプルも含んでいて、とっても見やすいサイトになっていますし、コマンドラインを使わなくてもクールなショッピングカートで各エレメンツをダウンロードできます。</p>

<h2>Android Design Library</h2>

<p>もちろん、MaterialはAndroid 5.0、Mでも使うことができますが、みなさんは2つの気にかかっていることでしょう。もっと簡単に使いやすいコンポーネントがないのか、そして後方互換性も広く対応してほしいと。</p>

<p><a href="http://developer.android.com/tools/support-library/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Support Library</a>は常に後方互換性と対峙しています。これはプラグ・アンド・プレイシステムなので、古いAndroidバージョンで新しい機能を動かすことができます。昨年、Materialをリリースしたとき、appcompat libraryを提供しました。これは基本的なレイアウトとスタイリングをサポートするライブラリです。</p>

<p>今回紹介する新しいライブラリはAndroid Design Libraryです。このライブラリはMaterial Designのコアエレメントを使うことができ、隠蔽化された実装を簡単に導入することもできます。例えば、以前シンプルなFABを実装するにも5,6つのXMLファイルが必要でしたが、今日からは1つのフローティングアクションボタンの要素を追加するだけです。新しいライブラリは、他にも簡単に実装できるシャドウ付きのカード、複雑なサイドナビゲーションも、Navigation Drawer Viewにドロップするだけで、スペック通りの動作をするコンポーネントを実装できます。</p>

<p>同様にMaterialタブもまた、アプリに簡単に実装できます。私のお気に入りであり、複雑なコンポーネントで知られるツールバースクローリングも１つのコンポーネントにピンチなどの動作を設定するだけで実装できます。パレットは去年紹介しましたが、今日はそれが6倍速くなりました。詳細について知りたければデベロッパーサイトを確認して下さい。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/07.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/07.png" alt="後方互換性" width="640" height="339" class="aligncenter size-full wp-image-15332" srcset="/wp-content/uploads/2015/06/07.png 640w, /wp-content/uploads/2015/06/07-300x159.png 300w, /wp-content/uploads/2015/06/07-207x110.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>先ほど、私はSupport libraryは完全なMaterialコンポーネントを提供していない、つまり簡単にデプロイできない、より多くのAndroidデバイスに提供できていないと申し上げました。現在、LoliipopはAndroidデバイスの10%程度しかありませんが、今回紹介した新しいSupport libraryを使用すれば、Android2.1以上のデバイスにMaterialを提供することができます。最高じゃありませんか？</p>

<p>（後編に続きます）</p>
]]></content:encoded>
		
		<series:name><![CDATA[Google I/O 2015 特集]]></series:name>
	</item>
		<item>
		<title>ネイティブでもWebRTCを使おう！―Android／iOSでWebRTC</title>
		<link>/mganeko/15221/</link>
		<pubDate>Fri, 19 Jun 2015 03:00:01 +0000</pubDate>
		<dc:creator><![CDATA[がねこまさし]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Google I/O]]></category>
		<category><![CDATA[WebRTC]]></category>

		<guid isPermaLink="false">/?p=15221</guid>
		<description><![CDATA[連載： Google I/O 2015 特集 (1)こんにちは！今回はGoogle I/O 2015の小セッションから、Justin UbertiさんとSam Duttonさんによる、&#8221;Video chat ...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/google_io_2015/" class="series-313" title="Google I/O 2015 特集" data-wpel-link="internal">Google I/O 2015 特集</a> (1)</div><p>こんにちは！今回はGoogle I/O 2015の小セッションから、Justin UbertiさんとSam Duttonさんによる、&#8221;Video chat for Web, Android and iOS&#8221;のお話をお届けします。このセッションではWebRTCを使ってビデオチャットアプリを作る方法について、WebRTCの中の人であるお二人が説明してくれました。<br /></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_beggin.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_beggin-300x160.png" alt="gio_webrtc_beggin" width="300" height="160" class="alignnone size-medium wp-image-15254" srcset="/wp-content/uploads/2015/06/gio_webrtc_beggin-300x160.png 300w, /wp-content/uploads/2015/06/gio_webrtc_beggin.png 640w, /wp-content/uploads/2015/06/gio_webrtc_beggin-207x110.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p>WebRTCはWeb Realtime Communication の略で、Webブラウザ上でカメラやマイクの映像/音声を取得したり、他のブラウザと通信するための技術です。過去のHTML5Experts.jpの記事に解説がありますので、併せてそちらもご覧ください。</p>

<ul>
<li><a href="https://html5experts.jp/mganeko/5098/" target="_blank" data-wpel-link="internal">HTML5でWebRTCを使ってみよう！「カメラを使ってみよう」編</a></li>
<li><a href="https://html5experts.jp/mganeko/5181/" target="_blank" data-wpel-link="internal">WebRTCに触ってみたいエンジニア必見！手動でWebRTC通信をつなげてみよう</a></li>
</ul>

<h2>セッションの始めに</h2>

<p>最初にJastinさんから、今日は Web/Android/iOS のアプリにリアルタイムコミュニケーションを組み込む話をする、との宣言がありました。従来は「Webブラウザで、JavaScriptでできる」という部分がクローズアップされることが多いのですが、今回はあえてWebブラウザ以外の「Androidネイティブアプリ」や「iOSネイティブアプリ」でも使えるということを強調した内容になっています。そう言えばセッションのタイトルも「WebRTC」という言葉は使っていませんでした。</p>

<p>セッションの冒頭では、関連する資料の公開先が案内されました。どちらもGoogle Docs上で共有されています。</p>

<ul>
<li>
関連する様々なリソースのまとめ <a href="https://g.co/webrtc" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">g.co/webrtc</a>
</li>
<li>
今回のプレゼンの資料 <a href="https://docs.google.com/presentation/d/1CjuTaY2J9P5xrFDtRCh6VmS7Iw2UBbm-JEwzCHQCYkE/mobilepresent?slide=id.g521d01055_1_0" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Video chat for Web, Android and iOS</a>
</li>
</ul>

<p>余談ですが企業でGoogle Apps for work を使っていてdocs/driveが使えないように機能制限している場合、アカウントにログインした状態では見れません。私も最初は見れなくて、地味にはまりました。</p>

<p>Google I/Oの大きなセッションのビデオは、<a href="https://events.google.com/io2015/videos" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">公式サイトで公開</a>されています。残念ながら本セッションのような小規模セッションのビデオは公開されていませんが、Google I/O 2015のお土産にもらったCardboard用の<a href="https://play.google.com/store/apps/details?id=com.google.samples.apps.cardboarddemo" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">アプリ</a>からGoogle I/Oの様子をVRで見ることが可能です。本セッションの映像もVRでみることができるので、今年のCardboardをお持ちの方はお試しください。</p>

<h2>これまでを振り返る</h2>

<p>まずはこれまでの経緯を振り返えっての説明がありました。「数年前、Webをリアルタイムコミュニケーションのプラットフォームにしようと考えた」と言います。</p>

<ul>
<li>あらゆるアプリでリアルタイム通信を可能にしたい</li>
<li>オーディオ、ビデオ、独自のデータを扱えるようにたい</li>
<li>エコシステムを構築するためにオープンなプロトコルを使いたい</li>
</ul>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_target.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_target-300x179.png" alt="gio_webrtc_target" width="300" height="179" class="alignnone size-medium wp-image-15256" srcset="/wp-content/uploads/2015/06/gio_webrtc_target-300x179.png 300w, /wp-content/uploads/2015/06/gio_webrtc_target-207x123.png 207w, /wp-content/uploads/2015/06/gio_webrtc_target.png 556w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p>そのために次の点について力を入れたとのことです。</p>

<ul>
<li>実用になるための高品質</li>
<li>可能な限りPeer-to-Peerで通信</li>
<li>End-to-Endの暗号化を提供</li>
</ul>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_tech_target.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_tech_target-300x181.png" alt="gio_webrtc_tech_target" width="300" height="181" class="alignnone size-medium wp-image-15417" srcset="/wp-content/uploads/2015/06/gio_webrtc_tech_target-300x181.png 300w, /wp-content/uploads/2015/06/gio_webrtc_tech_target-207x125.png 207w, /wp-content/uploads/2015/06/gio_webrtc_tech_target.png 620w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p>実に野心的なプランで、ここでSamさんが&#8221;Crazy Plan!&#8221;と突っ込みます。</p>

<ul>
<li>そんなプランに取り組み、WebRTCができあがった</li>
<li>しかしその後、モバイルシフトがものすごい勢いで起こった</li>
<li>モバイルでは、コミュニケーションアプリに非常に多くの時間を使っている</li>
</ul>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_mobile1.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_mobile1-300x189.png" alt="gio_webrtc_mobile" width="300" height="189" class="alignnone size-medium wp-image-15418" srcset="/wp-content/uploads/2015/06/gio_webrtc_mobile1-300x189.png 300w, /wp-content/uploads/2015/06/gio_webrtc_mobile1-207x131.png 207w, /wp-content/uploads/2015/06/gio_webrtc_mobile1.png 608w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p>利用シーンの変化に合わせるため、AndoridとiOSのネイティブアプリでもWebブラウザと同じことができるようにした、との説明がありました。そしてここで、(WebRTC改め)&#8221;AndroidiOSWebRTC&#8221; と大きく書いたスライドが登場しました。<br /></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_aiwrtc.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_aiwrtc-300x165.png" alt="gio_webrtc_aiwrtc" width="300" height="165" class="alignnone size-medium wp-image-15259" srcset="/wp-content/uploads/2015/06/gio_webrtc_aiwrtc-300x165.png 300w, /wp-content/uploads/2015/06/gio_webrtc_aiwrtc-207x114.png 207w, /wp-content/uploads/2015/06/gio_webrtc_aiwrtc.png 515w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p>この通信技術は、Webブラウザだけリアルタイムコミュニケーションではなく、すべてのプラットフォームで使えるリアルタイムコミュニケーション技術だよ、との力強い声明です。<br /></p>

<p>WebRTCの普及については、次のように説明しています。</p>

<ul>
<li>いまや 1.5 billion (15億)を超えるWebRTC対応ブラウザが使われている</li>
<li>また 3 billion (30億)を超える回数、WebRTCのアプリがダウンロードされている</li>
<li>現在はWeb, Android, iOS の3つのプラットフォームで使える様になっている</li>
</ul>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_3platform.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_3platform-300x162.png" alt="gio_webrtc_3platform" width="300" height="162" class="alignnone size-medium wp-image-15260" srcset="/wp-content/uploads/2015/06/gio_webrtc_3platform-300x162.png 300w, /wp-content/uploads/2015/06/gio_webrtc_3platform-207x112.png 207w, /wp-content/uploads/2015/06/gio_webrtc_3platform.png 518w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>30億回ダウンロードというのはにわかには信じがたいですが、アップデートも含めればそうなるのでしょう。
<a href="https://webrtchacks.com/facebook-webrtc/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">FacebookのメッセンジャーがWebRTCを使っている</a>という話もあるので、<a href="http://jp.techcrunch.com/2015/06/10/20150609the-new-facebook/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">それを含めれば30億回に到達する</a>のかもしれません。</p>

<h2>ソースコードの紹介</h2>

<p>次に、実際のソースコードの概要について、3つのステップで説明がありました。Webブラウザ、Android、iOSのケースを順番に比較しています。</p>

<h3>(1) カメラ、マイクへのアクセス</h3>

<h4>Webブラウザの場合</h4>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_camera_web.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_camera_web-300x163.png" alt="gio_webrtc_camera_web" width="300" height="163" class="alignnone size-medium wp-image-15276" srcset="/wp-content/uploads/2015/06/gio_webrtc_camera_web-300x163.png 300w, /wp-content/uploads/2015/06/gio_webrtc_camera_web-207x112.png 207w, /wp-content/uploads/2015/06/gio_webrtc_camera_web.png 633w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p></p><pre class="crayon-plain-tag">navigator.getUserMedia(constraints, onStream);
function onStream(localStream) {
  // do something with stream
}</pre><p> 
Webブラウザの場合、getUserMedia()を使って、リアルタイムの映像/音声データをセットでMediaStreamという形で取得できます。取得に成功するとコールバック関数（この例では onStream ）に渡されるので、そこで処理します。映像/音声の取得については、こちらの記事もご覧ください。</p>

<ul>
<li><a href="https://html5experts.jp/mganeko/5098/" target="_blank" data-wpel-link="internal">HTML5でWebRTCを使ってみよう！「カメラを使ってみよう」編</a></li>
</ul>

<h4>Androidの場合</h4>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_camera_android.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_camera_android-300x171.png" alt="gio_webrtc_camera_android" width="300" height="171" class="alignnone size-medium wp-image-15278" srcset="/wp-content/uploads/2015/06/gio_webrtc_camera_android-300x171.png 300w, /wp-content/uploads/2015/06/gio_webrtc_camera_android.png 640w, /wp-content/uploads/2015/06/gio_webrtc_camera_android-207x118.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p></p><pre class="crayon-plain-tag">VideoCapturer c = VideoCapturer.create(device);
PeerConnectionFactory factory = new PeerConnectionFactory();
MediaStream localStream = factory.createLocalMediaStream(streamName);
VideoSource s = factory.createVideoSource(c, constraints);
VideoTrack t = factory.createVideoTrack(trackName, s);
localStream.addTrack(t);</pre><p></p>

<p>Androidの場合は、カメラの映像とマイクの音声は別々に取得するようです。</p>

<ul>
<li>まずVideoCaptureクラスを使ってVideoSource取得します</li>
<li>次にVideoSouceから、実際の映像であるVideoTrackを取得します</li>
<li>VideoTrackが取得できたら、WebRTCで映像/音声を扱うためのMediaStreamクラスの配下に加えます</li>
</ul>

<p>興味深いのは、MediaStreamのインスタンスはPeerConnectionFactoryから作る、というところでしょうか。Androidの通常の映像処理とは異なり、WebRTC専用クラスということだと思います。<br />
コードの紹介では出てきませんでしたが、マイクからの音声もAudioTrackとして取得してからMediaStreamの配下に追加するのでしょう。</p>

<h4>iOSの場合</h4>

<p>iOSもAndroidと同じく、VideoCapture → VideoSource → VideoTrack → MediaStream という流れになります。<br />
<a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_camera_ios.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_camera_ios-300x169.png" alt="gio_webrtc_camera_ios" width="300" height="169" class="alignnone size-medium wp-image-15277" srcset="/wp-content/uploads/2015/06/gio_webrtc_camera_ios-300x169.png 300w, /wp-content/uploads/2015/06/gio_webrtc_camera_ios.png 640w, /wp-content/uploads/2015/06/gio_webrtc_camera_ios-207x117.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p></p><pre class="crayon-plain-tag">RTCVideoCapturer* c = [capturerWithDeviceName device];
RTCMediaStream* localStream = [factory mediaStreamWithLabel:streamName];
RTCVideoSource* s = [[factory videoSourceWithCapturer:c ...];
RTCVideoTrack* t = [[RTCVideoTrack alloc] source:s ...]; 
[localStream addVideoTrack:t];</pre><p></p>

<h3>(2) PeerConnectionを使った通信</h3>

<p>次は通信です。通信で使うRTCPeerConnectionがWebRTCの肝で、裏で非常にたくさんのことをやっている、との説明がありました。</p>

<h4>Webブラウザの場合</h4>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_peer_web.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_peer_web-300x153.png" alt="gio_webrtc_peer_web" width="300" height="153" class="alignnone size-medium wp-image-15268" srcset="/wp-content/uploads/2015/06/gio_webrtc_peer_web-300x153.png 300w, /wp-content/uploads/2015/06/gio_webrtc_peer_web.png 640w, /wp-content/uploads/2015/06/gio_webrtc_peer_web-207x106.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p></p><pre class="crayon-plain-tag">pc = new RTCPeerConnection(config);
pc.onaddstream = onRemoteStream;
pc.addStream(localStream);
pc.createOffer(onCreateSuccess);
function onCreateSuccess(offer) { sendMessage(offer); }</pre><p></p>

<p>Webブラウザの場合はPeerConnectionのオブジェクトを作るところから始まります。</p>

<ul>
<li>PeerConnecitonのオブジェクトのonaddstreamイベントハンドラに、相手側のメディア（映像/音声）を扱う処理を設定する（この例ではonRemoteStream）</li>
<li>PeerConnecitonのオブジェクトにaddStream()で自分のメディア（映像/音声）を教える</li>
<li>通信を始めるための情報であるSDPを、createOffer()を呼び出して生成する</li>
<li>SDPが生成されたらコールバックが呼ばれるので（この例ではonCreateSucess）、その中で相手側に送信する</li>
</ul>

<p>Peer-to-Peer通信を始めるまでの手順をシグナリングと呼びます。シグナリングについてはこちらの記事もご覧ください。</p>

<ul>
<li><a href="https://html5experts.jp/mganeko/5181/" target="_blank" data-wpel-link="internal">WebRTCに触ってみたいエンジニア必見！手動でWebRTC通信をつなげてみよう</a></li>
<li><a href="https://html5experts.jp/mganeko/5349/" target="_blank" data-wpel-link="internal">WebRTC初心者でも簡単にできる！Node.jsで仲介（シグナリング）を作ってみよう</a></li>
</ul>

<h4>Androidの場合</h4>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_peer_android.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_peer_android-300x161.png" alt="gio_webrtc_peer_android" width="300" height="161" class="alignnone size-medium wp-image-15270" srcset="/wp-content/uploads/2015/06/gio_webrtc_peer_android-300x161.png 300w, /wp-content/uploads/2015/06/gio_webrtc_peer_android.png 640w, /wp-content/uploads/2015/06/gio_webrtc_peer_android-207x111.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p></p><pre class="crayon-plain-tag">PeerConnection pc = factory.createPeerConnection(iceServers, constraints, observer);
pc.addStream(localStream);
pc.createOffer(this, offerConstraints);
public void onCreateSuccess(final SessionDescription offer) {
 sendMessage(offer);
}</pre><p></p>

<p>Androidも流れは同じです。FactoryでPeerConnectionを生成する際に、observerを指定するのがAndroid流のようですね。PeerConnectionにaddStream()して、createOffer()を呼び出し、生成されたSDPをobserver側のメソッド（この例ではonCreateSucess）で処理しているようです。</p>

<h4>iOSの場合</h4>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_peer_ios.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_peer_ios-300x162.png" alt="gio_webrtc_peer_ios" width="300" height="162" class="alignnone size-medium wp-image-15269" srcset="/wp-content/uploads/2015/06/gio_webrtc_peer_ios-300x162.png 300w, /wp-content/uploads/2015/06/gio_webrtc_peer_ios.png 640w, /wp-content/uploads/2015/06/gio_webrtc_peer_ios-207x112.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p></p><pre class="crayon-plain-tag">RTCPeerConnection* pc = [factory peerConnectionWithICEServers:iceServers constraints:constraints delegate:self];
[pc addStream:localStream];
[pc createOfferWithDelegate:self constraints:offerConstraints];
- (void)peerConnection:(RTCPeerConnection *)peerConnection
    didCreateSessionDescription:(RTCSessionDescription *)offer
    error:(NSError *)error {
  sendMessage(offer);
}</pre><p></p>

<p>流れはAndroidと同様ですが、delegateを使うのがiOS流ということでしょうか。createOffer()で作られたSDPを、delegateのdidCreateSessionDescrition()で処理しているようです。</p>

<h3>(3) 表示</h3>

<p>最後は動画を表示する部分です。</p>

<h4>Webブラウザの場合</h4>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_video_web.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_video_web-300x168.png" alt="gio_webrtc_video_web" width="300" height="168" class="alignnone size-medium wp-image-15280" srcset="/wp-content/uploads/2015/06/gio_webrtc_video_web-300x168.png 300w, /wp-content/uploads/2015/06/gio_webrtc_video_web.png 640w, /wp-content/uploads/2015/06/gio_webrtc_video_web-207x116.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p></p><pre class="crayon-plain-tag">function onRemoteStream(remoteStream) {
  videoElement.src = window.URL.createObjectURL(remoteStream);
}</pre><p> 
おなじみの video タグを使います。 URL.createObjectURL()を使って、MediaStreamをvideoタグで表示できる形に変換します。</p>

<h4>Androidの場合</h4>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_video_android.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_video_android-300x159.png" alt="gio_webrtc_video_android" width="300" height="159" class="alignnone size-medium wp-image-15282" srcset="/wp-content/uploads/2015/06/gio_webrtc_video_android-300x159.png 300w, /wp-content/uploads/2015/06/gio_webrtc_video_android.png 640w, /wp-content/uploads/2015/06/gio_webrtc_video_android-207x110.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p></p><pre class="crayon-plain-tag">public void onAddStream(final MediaStream stream) {
  VideoTrack track = stream.getVideoTracks(0);
  YuvImageRenderer renderer = remoteRenderer;
  track.addRenderer(new VideoRenderer(renderer));
}</pre><p></p>

<p>MediaSteamからvideoTrackを取り出し、OpenGLベースのVideoRendererを使って描画する、という流れの様です。OpenGLベースなので描画にGPUを使っていて、CPU負荷が低いのが特徴とのこと。
ソースコードの中にYuvImageRendererとVideoRendererという2種類のRendererが登場していますが、私には役割の違いがよく分かっていません。すみません&#8230;。</p>

<h4>iOSの場合</h4>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_video_ios.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_video_ios-300x164.png" alt="gio_webrtc_video_ios" width="300" height="164" class="alignnone size-medium wp-image-15281" srcset="/wp-content/uploads/2015/06/gio_webrtc_video_ios-300x164.png 300w, /wp-content/uploads/2015/06/gio_webrtc_video_ios.png 640w, /wp-content/uploads/2015/06/gio_webrtc_video_ios-207x113.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p></p><pre class="crayon-plain-tag">- (void)peerConnection:(RTCPeerConnection *)peerConnection
       addedStream:(RTCMediaStream *)stream {
  RTCVideoTrack* track = stream.videoTracks[0];
  RTCEAGLVideoView* view = _remoteVideoView;
  [track addRenderer:view]; 
}</pre><p></p>

<p>OpenGLベースのRTCEAGLVideoViewというものを使うそうです。VideoTrack.addRenderer()を使うところは、Androidと同じです。</p>

<h3>詳細は</h3>

<p>Web上に公開されている2つの記事を参考にしてい欲しいとのことでした。（どちらも、WebRTCを使ったビデオチャットサービスを提供している、<a href="https://appear.in/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">apper.in</a>のブログ記事です）</p>

<ul>
<li><a href="https://tech.appear.in/2015/05/25/Introduction-to-WebRTC-on-Android/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Introduction to WebRTC on Android</a></li>
<li><a href="https://tech.appear.in/2015/05/25/Getting-started-with-WebRTC-on-iOS/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Getting started with WebRTC on iOS</a></li>
</ul>

<h2>AppRTCを使ったデモ</h2>

<p>実際に動くデモを用意していますとのことで、<a href="https://apprtc.appspot.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">AppRTC</a>についての紹介がありました。Hight performance, fast call setup, easy to understand and extend の3つを目指しているとのことです。
実際にChromebookとNexus6 を使ったデモが行われました。Nexus6ではエンコード側でもハードウェア(GPU)を使えて、720pのHD動画が快適に送れます。<br /></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_demo1.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_demo1-300x200.png" alt="gio_webrtc_demo1" width="300" height="200" class="alignnone size-medium wp-image-15273" srcset="/wp-content/uploads/2015/06/gio_webrtc_demo1-300x200.png 300w, /wp-content/uploads/2015/06/gio_webrtc_demo1.png 640w, /wp-content/uploads/2015/06/gio_webrtc_demo1-207x138.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_demo2.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_demo2-300x169.png" alt="gio_webrtc_demo2" width="300" height="169" class="alignnone size-medium wp-image-15272" srcset="/wp-content/uploads/2015/06/gio_webrtc_demo2-300x169.png 300w, /wp-content/uploads/2015/06/gio_webrtc_demo2.png 640w, /wp-content/uploads/2015/06/gio_webrtc_demo2-207x117.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p>フロントカメラからバックカメラに切り替えて、観客も映して見せました。<br /></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_demo3.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_demo3-300x166.png" alt="gio_webrtc_demo3" width="300" height="166" class="alignnone size-medium wp-image-15271" srcset="/wp-content/uploads/2015/06/gio_webrtc_demo3-300x166.png 300w, /wp-content/uploads/2015/06/gio_webrtc_demo3.png 640w, /wp-content/uploads/2015/06/gio_webrtc_demo3-207x114.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p>apprtc関連として、次の情報も紹介されていました。</p>

<ul>
<li>apprtcの短縮URLとして、<a href="https://appr.tc/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">appr.tc</a> が使える</li>
<li>ソースコードはgithubで <a target="_blank" data-wpel-link="internal">github.com/webrtc</a></li>
<li>ブラウザ側で[i]キーを押すと、統計情報(stats)が表示される</li>
</ul>

<p>統計情報(stats)を表示しているところ<br />
<a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_demo_stat2.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_demo_stat2-300x212.png" alt="gio_webrtc_demo_stat2" width="300" height="212" class="alignnone size-medium wp-image-15274" srcset="/wp-content/uploads/2015/06/gio_webrtc_demo_stat2-300x212.png 300w, /wp-content/uploads/2015/06/gio_webrtc_demo_stat2.png 640w, /wp-content/uploads/2015/06/gio_webrtc_demo_stat2-207x147.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p>自分でも試してみましたが、Chromeで表示できる統計情報(stats)はどのような通信が行われているかを知る手掛かりとして、とても興味深いです。<br /></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/apprtc_stats.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/apprtc_stats-300x137.png" alt="apprtc_stats" width="300" height="137" class="alignnone size-medium wp-image-15408" srcset="/wp-content/uploads/2015/06/apprtc_stats-300x137.png 300w, /wp-content/uploads/2015/06/apprtc_stats.png 640w, /wp-content/uploads/2015/06/apprtc_stats-207x95.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<h2>つながるためのサーバー側の仕組み</h2>

<p>デモの後は、実際の通信がつながるまでの裏側についての解説です。</p>

<h3>シグナリングサーバー</h3>

<p>Peer-to-Peer通信を始める前にはシグナリングと呼ばれる処理が必要ですが、AppRTCではそのサーバーとデバイスの間の通信にはWebSocketを使っているそうです。（シグナリングについては<a href="https://html5experts.jp/mganeko/5349/" target="_blank" data-wpel-link="internal">こちら</a>をご覧ください）<br /></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_signaling.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_signaling-300x188.png" alt="gio_webrtc_signaling" width="300" height="188" class="alignnone size-medium wp-image-15267" srcset="/wp-content/uploads/2015/06/gio_webrtc_signaling-300x188.png 300w, /wp-content/uploads/2015/06/gio_webrtc_signaling.png 640w, /wp-content/uploads/2015/06/gio_webrtc_signaling-207x129.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p>AppRTCならではの工夫(Smart signaling)として、最初のユーザがシグナリングサーバーに接続した際に、ユーザの接続情報（おそらくSDPのことだと思われます）をサーバー側にキャッシュしているとのこと。2番目のユーザが接続してきたら、サーバーから直ちにキャッシュされた情報を渡すことで、接続までの時間を短縮しているそうです。</p>

<h3>リレーサーバー(TURN)</h3>

<p>Peer-to-Peerで通信できないケースでは、リレーサーバー(TURNサーバー)が必要です。AppRTCでは次の仕組みを用意しているそうです。<br />
TURNサーバーの役割については、こちらの記事をご覧いただくと参考になると思います。</p>

<ul>
<li><a href="https://html5experts.jp/mganeko/5554/" target="_blank" data-wpel-link="internal">壁を越えろ！WebRTCでNAT/Firewallを越えて通信しよう</a></li>
</ul>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_turn.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_turn-300x175.png" alt="gio_webrtc_turn" width="300" height="175" class="alignnone size-medium wp-image-15266" srcset="/wp-content/uploads/2015/06/gio_webrtc_turn-300x175.png 300w, /wp-content/uploads/2015/06/gio_webrtc_turn.png 640w, /wp-content/uploads/2015/06/gio_webrtc_turn-207x121.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<ul>
<li><a href="https://github.com/dataarts/tailbone" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Tailbone</a> &#8230;  オープンソースのGoogle App Engineモジュール（動的にGoogle Compute Engineのインスタンスを起動する仕組みのようです。そのなかのmeshというものが、webrtc関連のように見えます）</li>
<li><a href="https://code.google.com/p/coturn/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Coturn server</a> + (Tailboneで起動される)オンデマンドのGoogle Compute Engineインスタンス</li>
</ul>

<p>これによってすべてのGCEのゾーンでTURNサーバーが動き、世界中で快適に接続できるとのことでした。
ユーザになるべく近いゾーンのTURNサーバーを経由することで、遅延を小さく抑えるようにしているのだと思います。</p>

<p>さまざまな工夫によって「通信が確立するまで500ミリ秒しかかからないよ」と、その短さを強調していました。<br /></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/gio_webrtc_500ms.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/gio_webrtc_500ms-300x158.png" alt="gio_webrtc_500ms" width="300" height="158" class="alignnone size-medium wp-image-15279" srcset="/wp-content/uploads/2015/06/gio_webrtc_500ms-300x158.png 300w, /wp-content/uploads/2015/06/gio_webrtc_500ms.png 640w, /wp-content/uploads/2015/06/gio_webrtc_500ms-207x109.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><br /></p>

<p>最後に、改めて「情報は<a href="g.co/webrtc" target="_blank" data-wpel-link="internal">g.co/webrtc</a>を見てほしい」との紹介のあと、「フィードバックを歓迎します」と締めくくられました。</p>

<h2>おまけ</h2>

<p>セッション終了後、Justinさんに質問してみました。</p>

<ul>
<li>Q. iOSのSDKでTURN over TCPがProxy設定を見てくれないようですが？</li>
<li>A. 先週(5/21)その修正が反映されました。最新のソースで試してください</li>
</ul>

<ul>
<li>Q. ChromeのBandwidth Estimationで、帯域の上限を指定するにどうすればよいですか？</li>
<li>A. SDPのb=ASで指定すれば、その上限は超えません</li>
<li>Q. 指定しているのですが効いていないみたいです。2Mbit/secぐらいです</li>
<li>A. それはデフォルトの値ですね。指定が間違っていると思うので確認してください</li>
</ul>

<p>どちらもちょっと間の抜けた質問だったようです。失礼しました&#8230;。</p>
]]></content:encoded>
		
		<series:name><![CDATA[Google I/O 2015 特集]]></series:name>
	</item>
	</channel>
</rss>
