<?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>Microsoft &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/microsoft/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>進化するWeb ～Progressive Web Appsの実装と応用～(de:code2018より)</title>
		<link>/osamum_ms/25709/</link>
		<comments>/osamum_ms/25709/#respond</comments>
		<pubDate>Thu, 05 Jul 2018 02:00:10 +0000</pubDate>
		<dc:creator><![CDATA[物江 修]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PWA]]></category>
		<category><![CDATA[Progressive Web Apps]]></category>
		<category><![CDATA[Service Worker]]></category>
		<category><![CDATA[de:code]]></category>

		<guid isPermaLink="false">/?p=25709</guid>
		<description><![CDATA[2018年5月に開催された日本マイクロソフト主催のイベントde:code 2018で「進化するWeb ～Progressive Web Appsの実装と応用～」というセッションを担当しました。 イベントに参加できなかった...]]></description>
				<content:encoded><![CDATA[<p>2018年5月に開催された日本マイクロソフト主催のイベント<a href="https://www.microsoft.com/ja-jp/events/decode/2018/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">de:code 2018</a>で「進化するWeb ～Progressive Web Appsの実装と応用～」というセッションを担当しました。</p>

<p>イベントに参加できなかった方に向けてセッションの内容を記事にまとめましたので、ぜひご覧ください。</p>

<div style="margin-bottom:5px"> <strong> <a href="https://html5experts.jp//www.slideshare.net/osamum/web-progressive-web-apps" title="進化する Web ～ Progressive Web Apps の実装と応用 ～" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">進化する Web ～ Progressive Web Apps の実装と応用 ～</a> </strong> from <strong><a href="https://www.slideshare.net/osamum" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Osamu Monoe</a></strong> </div>

<p>この記事では、昨今話題に上ることが多いPWAことProgressive Webアプリケーションについて、実際の作り方を解説しながら、それがいったいどういったものであるかを詳(つまび)らかに紹介することを目的としています。</p>

<p>Webでは、「ネイティブアプリと同じことができる」「ネイティブアプリを置き換える」など、期待に胸を膨らませずにいられない浪漫に満ちた噂がありますが、それが本当かどうか記事をご覧いただくとご理解いただけると思います。</p>

<p>Progressive Web Appsの作り方を紹介する前に、簡単に概要を紹介しましょう。</p>

<h2>Progressive Web Appsとは?</h2>

<p>Progressive Web Apps(以下PWAと記述) は、一言でいうならば「ネイティブアプリのようなUXを提供するWebアプリの概念」といったところでしょう。2015年の11月に開催された<a title="Chrome Dev Summit 2015" href="https://codelabs.developers.google.com/chrome-dev-summit" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Chrome Dev Summit 2015</a>のキーノートで発表されて話題となりました。</p>

<p>もともとは、その年の10月にAlex Russell氏(Google)が<a title="Progressive Web Apps: Escaping Tabs Without Losing Our Soul" href="https://infrequently.org/2015/06/progressive-apps-escaping-tabs-without-losing-our-soul/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">ブログ記事</a>に投稿した、クライアントの性能に合わせて段階的に進歩するWebアプリケーションのコンセプトでした。</p>

<p>PWAというと、&#8221;ネイティブアプリのような体験&#8221;といった特徴ばかりが注目されますが、大きな特徴がもう一つあります。それは、PWAという名前にも含まれているProgressiveというところです。</p>

<p>これはHTML5が普及しはじめた頃にあった、「HTML5が解釈できるモダンブラウザーにはリッチな体験を、そうでないブラウザーには従来とおなじ体験を」というデザインの考え方&nbsp;<a href="https://www.blwisdom.com/dictionary/item/6559-001474.html" title="プログレッシブ・エンハンスメント" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Progressive Enhancement</a>に由来します。</p>

<p>PWAはこの思想を踏襲し、性能の低いWebブラウザーを切り捨てることなく、クライアントの性能に合わせた機能提供を行います。</p>

<p>PWAは、性能の低いWebブラウザーからアクセスがあった場合は従来と同じWebページとして動作し、PWAが動作する機能を備えたWebブラウザーからアクセスがあった場合は、その機能を活かし、これまでのWebアプリにはなかったネイティブアプリのような体験を提供します。</p>

<p><img src="https://msdnshared.blob.core.windows.net/media/2018/06/pwa.png" alt="Web アプリケーションの Progressive Enhancement" width="1634" height="900" class="alignnone size-full wp-image-5485" /></p>

<h2>Progressive Web Appsを実現する機能</h2>

<p>それでは、&#8221;これまでのWebアプリにはなかったネイティブアプリのような体験&#8221;というのはどのようなものがあるでしょう? </p>

<p>代表的なものとしては以下の4つが挙げられます。</p>

<ol style="font-size:15px">
<li>オフラインサポート</li>
<li>プッシュ通知</li>
<li>バックグラウンド処理</li>
<li>デバイスへのインストール(デバイスのホーム画面から起動できる)</li>
</ol>

<p>これらはの機能はそれぞれ以下のような新しいAPIによって実現されます。</p>

<ol style="font-size:15px">
<li>オフラインサポート&nbsp;&#8211;&nbsp;<span style="color:blue;font-weight:bold">Cache API</span></li>
<li>プッシュ通知&nbsp;&#8211;&nbsp;<span style="color:blue;font-weight:bold">Push API</span></li>
<li>バックグラウンド処理&nbsp;&#8211;&nbsp;<span style="color:blue;font-weight:bold">Background Sync</span></li>
<li>デバイスへのインストール(OSのメニューから起動できる)&nbsp;&#8211;&nbsp;<span style="color:blue;font-weight:bold">Web App Manifest</span></li>
</ol>

<p>そして、これらの機能を提供しているのが1～3が<a href="https://developer.mozilla.org/ja/docs/Web/API/ServiceWorker_API" target="_blank" title="MDN - サービスワーカー API" data-wpel-link="external" rel="follow external noopener noreferrer">Service Worker</a>で、4が<a href="https://developer.mozilla.org/ja/docs/Web/Manifest" title="MDN - Web App Manifest" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Web App Manifest</a>です。</p>

<p><img src="https://msdnshared.blob.core.windows.net/media/2018/06/sw_new2.png" alt="新しいAPIの提供の図" width="1083" height="456" class="aligncenter size-full wp-image-5505" /></p>

<p>PWAの定義に明確なものはありませんが、上記の機能の中からオフラインサポートと、インストール（アイコンをデバイスのホーム画面に追加）機能をサポートしていれば、PWAを名乗ってもそう否定されることはないでしょう。</p>

<p>これらの機能により、デバイスのホーム画面から、ナビゲーションバーなどのブラウザーUIがない状態でアプリケーションを起動し、オフラインの状態でも使用できる、という体験をユーザーに提供できます。これらの体験は、これまでのWebアプリケーションにはなかったネイティブアプリのならではのメリットと言えるでしょう。</p>

<p>それでは、逆に Web ならではのメリットとはなんでしょう?</p>

<h2>Webのメリット</h2>

<p>ネイティブアプリにはないWebならではのメリットを、Googleさんのイベントではよく以下の<a href="https://paul.kinlan.me/slice-the-web/" title="SLICE: The Web - Tales of a Developer Advocate by Paul Kinlan" target="_blank" style="font-weight:bold" data-wpel-link="external" rel="follow external noopener noreferrer">SLICE</a>という言葉で表しています。</p>

<ul style="font-size:15px">
<li><span style="font-weight:bold">S</span>ecure (安全)</li>
<li><span style="font-weight:bold">L</span>inkable (リンク可能)</li>
<li><span style="font-weight:bold">I</span>ndexable (インデックス可能)</li>
<li><span style="font-weight:bold">C</span>omposable (再構成可能)</li>
<li><span style="font-weight:bold">E</span>phemeral (一時的な利用)</li>
</ul>

<p>これら従来のWebとネイティブアプリの体験上のメリットを合わせたものが、PWAのメリットとなります。</p>

<h2>Progressive Web Appsが提供する価値</h2>

<p>PWAの提供する価値について、Googleさんのイベントではよく<a href="https://youtu.be/NITk4kXMQDw?t=5m48s" title="PWAs: building bridges to mobile, desktop, and native (Google I/O &#039;18)" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">FIRE</a>という言葉で紹介されていますが、 </p>

<ul style="font-size:15px">
<li><span style="font-weight:bold">F</span>ast: パフォーマンスの良い、軽快な動作</li>
<li><span style="font-weight:bold">I</span>ntegrated: OSと統合されたユーザー体験</li>
<li><span style="font-weight:bold">R</span>eliable: オフラインでも動作する利便性と信頼性</li>
<li><span style="font-weight:bold">E</span>ngaging: Webサイトの価値向上</li>
</ul>

<p>この記事ではもう少しかみ砕いて紹介しましょう。</p>

<p><img src="https://msdnshared.blob.core.windows.net/media/2018/06/PWA_Merit.png" alt="" width="1100" height="455" class="aligncenter size-full wp-image-5515" /></p>

<h3 style="font-weight:bold">発見性</h3>

<p>PWAであれば、アプリを公開するのにアプリストアにわざわざお金を払ってアプリを提出したり、審査を通すための不自由なルールに縛られる必要はありません。これまでのWebアプリと同じようにインターネットに公開しておけば、検索エンジンがクロールして見つけてくれます。</p>

<p>いままでのSEOのスキルがそのまま使える上、Webはアプリストアとは比べものにならない数のユーザーが、比べものにならないくらいの回数、常に検索を行っています。この圧倒的なオポチュニティ（機会）の違いは、自分自身が今日何回Webを検索したか、アプリストアを何回検索したか、比べてみればよくわかるでしょう。</p>

<h3 style="font-weight:bold">インストール可能</h3>

<p>PWAはさまざまなデバイスにインストール可能ですが、そのためにプラットフォームごとに違う開発言語で書き直したりパッケージンクしなおしたりする必要はありません。PWAをサポートしているWebブラウザーであれば、同じアプリケーションをその全部にインストールして使うことができます。</p>

<p>また、&#8221;インストールしなくても使える&#8221;点もメリットです。もともとがWebページなので、ちょっとだけ使ってみるということが可能です。</p>

<p>サービスを試用してみようと思ったときに、&#8221;アプリのインストールが障壁になって利用を中断してしまった&#8221;、という経験は誰にでもあることでしょう。また、スマートフォンでコンテンツを閲覧中に、突然、アプリのストア画面が表示され、アプリのインストールを促されて不快な思いをしたこともあるかと思いますが、そういったことを避けられます。</p>

<p>PWAであれば提供者もユーザーもアプリのインストールについてのネガティブな点を回避することができます。</p>

<h3 style="font-weight:bold">再エンゲージ可能</h3>

<p>従来のWebページであれば、ユーザーがコンテンツから離脱したあとは、再び訪問してくれることを祈るくらいしかできませんでしたが PWAはサーバー側から通知をPushすることができます。</p>

<p>これによりユーザーに即時的な価値を提供できます。例えば、ECショップであればタイムセールの開始であるとか、オークションサイトであればオークションの開始や、最高落札額の更新などです。</p>

<p>通知機能を適切に利用することで、ユーザー側の機会獲得を増やし、再エンゲージを促すことができます。</p>

<p>逆にどうでもいいことを通知しすぎるとユーザーの心象を害するので注意が必要です。特に、初めてページを訪問したユーザーに「プッシュ通知を許可しますか?」というメッセージを表示するのは避けたいところです。</p>

<h3 style="font-weight:bold">ネットワーク非依存</h3>

<p>PWAはオフラインでの使用が可能ですので、ネットワークの状態に左右されないように作ることが可能です。また、常に使用されるアセットをローカルにキャッシュすることで表示のスピードアップや、回線の使用料を減らすことにも貢献します。</p>

<h3 style="font-weight:bold">プログレッシブとレスポンシブ</h3>

<p>PWAはきちんとその思想を理解して開発すれば、低機能なブラウザーやPWAをサポートしないデバイスにもサービスを提供できます。また、さまざまな画面サイズに対応するためのレスポンシブな機能については、WebにはMedia Queries等、そのためのナレッジもリソースも豊富に存在するため、既存のスキルを活かして機能を実装できます。</p>

<h3 style="font-weight:bold">安全</h3>

<p>PWAはWebコンテンツと同じWebブラウザーの強力なサンドボックス内で動作するため、ネイティブアプリのようにユーザーの強い権限で動作しないため、誤動作や悪意のあるコードによってシステムに深刻なダメージを与えることはありません。またhttpsによる接続でのみ動作するのでサーバーとのやりとりを安全に行うことができます。</p>

<h3 style="font-weight:bold">リンク可能</h3>

<p>PWAはインターネット上でユニークな URL をもっており、ハイパーリンクのあるさまざまなところからサービスに接続することができます。PWAを使用するのにアプリ ストアは必要なく、面倒なインストールプロセスも必要ありません。</p>

<p></p>

<p>PWAのメリットは、Webとネイティブ アプリのメリットを合わせたということだけでなく、それらを状況に合わせて取捨選択できることです。</p>

<h2>Progressive Web Appsを実現するAPI</h2>

<p>ここからはPWAを実現するためのAPIと、それらをどのように使ってアプリケーションを構築していくかについて紹介します。</p>

<h3>Service Worker</h3>

<p>PWAを実現する上で中心となる機能を提供するのが、Service Workerです。</p>

<p>Service Workerとは何か？ 端的に言うと、「バックグラウンドで動作する<span style="font-weight:bold">&#8220;プログラミング可能な&#8221;ネットワークプロキシ</span>」です。</p>

<p>Service WorkerはWeb Workerの一つで、Webページのスクリプトとは独立して動作しており、DOMにアクセスしたりすることはできませんが、Webページのネットワークリクエストすべてをインターセプトできます。</p>

<p>つまり、Webページからのリクエストを横取りしてキャッシュしたものを返したり、改ざんしたりといったことができます。そのため localhost、127.0.0.1接続以外はhttpsの使用が必須となります。</p>

<h3>Service Workerが提供する機能</h3>

<p>Service Workerが提供する機能は主に以下の4つです。</p>

<ul style="font-size:15px">
<li>キャッシュ</li>
<li>リクエストのハンドリング</li>
<li>Push通知</li>
<li>バックグラウンド同期</li>
</ul>

<p>これらの機能を図で紹介します。</p>

<h3 style="font-weight:bold">キャッシュとリクエストのハンドリング</h3>

<p>Service WorkerはWebページからのリクエストの中に、自分のキャッシュリストに含まれるアセットを見つけると、レスポンスからこれを取得してキャッシュします。</p>

<p><img src="https://msdnshared.blob.core.windows.net/media/2018/06/SW_Chache01.png" alt="" width="1207" height="546" class="aligncenter size-full wp-image-5525" /></p>

<p>それ以降、Webページからリクエストされたアセットがキャッシュ内に存在する場合は、そのキャッシュされたアセットを返します。ネットワークから取得しないので、アセットの取得は高速に完了し、通信コストは発生しません。</p>

<p><img src="https://msdnshared.blob.core.windows.net/media/2018/06/SW_Chache02.png" alt="" width="1206" height="545" class="aligncenter size-full wp-image-5535" /></p>

<h3 style="font-weight:bold">Push通知</h3>

<p>関連付けられたWebページがアクティブでなくても、サーバーからのPushを受け取り、Notification API等を使用してユーザーに通知を行えます。</p>

<p><img src="https://msdnshared.blob.core.windows.net/media/2018/06/sw_push1.png" alt="" width="1206" height="544" class="aligncenter size-full wp-image-5555" /></p>

<h3 style="font-weight:bold">バックグラウンド同期</h3>

<p>オフライン中にユーザーが行った操作をキャッシュし、</p>

<p><img src="https://msdnshared.blob.core.windows.net/media/2018/06/SW_Offline.png" alt="" width="1207" height="546" class="aligncenter size-full wp-image-5565" /></p>

<p>オンライン時にその内容を同期することができます。</p>

<p><img src="https://msdnshared.blob.core.windows.net/media/2018/06/sw_backgroundsync.png" alt="" width="1205" height="544" class="aligncenter size-full wp-image-5575" /></p>

<p>このように Service Worker は<span style="font-weight:bold">プログラミング可能なネットワークプロキシ</span>として、これまでにないさまざまな機能を提供します。</p>

<p>これらの機能の2018年6月時点の<a href="https://caniuse.com/#search=service%20worker" target="_blank" title="Can I use... Support tables for HTML5, CSS3, etc" data-wpel-link="external" rel="follow external noopener noreferrer">サポート状況</a>は以下のとおりです。</p>

<p><img src="https://msdnshared.blob.core.windows.net/media/2018/06/SW_Browser_support.png" alt="" width="1218" height="496" class="aligncenter size-full wp-image-5585" /></p>

<p>ここからは、Service Workerの具体的使い方について解説していきます。</p>

<h2>Service Workerを使う準備 </h2>

<p>Service Workerを使った開発を行う際に用意しなければならないものがあります。</p>

<p>まず、Service Workerを利用するためのWebアプリケーション、もしくはWebコンテンツが必要です。これはけしてSPA(Single Page Application)のようなアプリケーション然としたものである必要はなく、既存の一般的な Web ページであってもかまいません。</p>

<p>このWebページ、もしくはWebアプリケーションは、htmlやcss、jsや画像に代表されるメディアといった複数のファイルで構成されていると思いますが、それとはべつにService Worker用のJavaScriptファイルをひとつ用意します。ここでは便宜上sw.jsと名付けます。</p>

<p><img src="https://msdnshared.blob.core.windows.net/media/2018/06/webAsser.png" alt="" width="800" class="aligncenter size-full wp-image-5595" /></p>

<p>このService Worker用のJavaScriptファイルはWebコンテンツ側のJavaScriptコードから登録され稼働を開始します。</p>

<p>Service Workerは、自身のファイルが配置された以下のディレクトリに対しスコープを持つので、コンテンツ/アプリケーション全体をキャッシュするなど管理下におきたい場合はWebサイトのルートに配置します。</p>

<h2>Service Workerの登録</h2>

<p>Service Workerの登録はWebコンテンツのJavaScript から行います。</p>

<p>登録に必要なコードは非常にシンプルで、最低限、以下のコードで問題を発生させることなく、Service Workerの登録が行えます。</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px">
<div style="text-align:center;width:140px;height:20px;background-color:black;float:right;color:white;margin-top:-10px;margin-right:-10px">Webコンテンツ側</div>
<span style="color:#32CD32">//Service Workerがサポートされているかチェック</span>
if&nbsp;(navigator.serviceWorker)&nbsp;{
&nbsp;&nbsp;&nbsp;<span style="color:#32CD32">//Service Worker を登録</span>
&nbsp;&nbsp;&nbsp;<span style="font-weight:bold;color:fuchsia">navigator.serviceWorker.</span><span style="font-weight:bold;color:blue">register</span><span style="font-weight:bold;color:fuchsia">(&#8216;</span><span style="font-weight:bold;color:blue">/sw.js</span><span style="font-weight:bold;color:fuchsia">&#8216;);</span>
<br />
}
</div>
</div>

<p>&nbsp;<br /></p>

<p>Webコンテンツ側のコードから、navigator.serviceWorker.registerメソッドにより、Service Workerの登録が行われると、Service Worker用のJavaScriptコード（ここではsw.js）ではinstallイベントが発生します。</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px">
<div style="text-align:center;width:140px;height:20px;background-color:black;float:right;color:white;margin-top:-10px;margin-right:-10px">sw.js側</div>
<span style="color:#32CD32">//キャッシュするアセットのリスト</span><br />
var <span style="font-weight:bold;color:green">urlsToCache</span> = [<br />
&nbsp;&nbsp;&nbsp;&#8216;/&#8217;,<br />
&nbsp;&nbsp;&nbsp;&#8216;/index.html&#8217;,<br />
&nbsp;&nbsp;&nbsp;&#8216;/css/index.css&#8217;,<br />
&nbsp;&nbsp;&nbsp;&#8216;/script/index.js&#8217;<br />
];<br />
<span style="color:#32CD32">//install イベントのハンドラ</span><br />
<span style="font-weight:bold;color:fuchsia">Self.addEventListener(&#8216;</span><span style="font-weight:bold;color:blue">install</span><span style="font-weight:bold;color:fuchsia">&#8216;, function(event) {</span><br />
&nbsp;&nbsp;&nbsp;event.waitUntil(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#32CD32">//キャッシュを開く</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caches.open(&#8216;キャッシュの名前&#8217;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then(function(cache) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#32CD32">//アセットのリストをキャッシュに登録</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return cache.addAll(<span style="font-weight:bold;color:green">urlsToCache</span>);<br />
&nbsp;&nbsp;&nbsp;}));<br />
});
</div>
</div>

<p><br /></p>

<p>install イベントハンドラ内では、キャッシュを開き</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px">
<span style="color:#32CD32">//キャッシュするアセットのリスト</span><br />
var urlsToCache = [<br />
&nbsp;&nbsp;&nbsp;&#8216;/&#8217;,<br />
&nbsp;&nbsp;&nbsp;&#8216;/index.html&#8217;,<br />
&nbsp;&nbsp;&nbsp;&#8216;/css/index.css&#8217;,<br />
&nbsp;&nbsp;&nbsp;&#8216;/script/index.js&#8217;<br />
];<br />
<span style="color:#32CD32">//install イベントのハンドラ</span><br />
Self.addEventListener(&#8216;install&#8217;, function(event) {<br />
&nbsp;&nbsp;&nbsp;event.waitUntil(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#32CD32">//キャッシュを開く</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight:bold;color:fuchsia">caches.open(</span><span style="font-weight:bold;color:blue">&#8216;キャッシュの名前&#8217;</span><span style="font-weight:bold;color:fuchsia">)</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then(function(cache) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#32CD32">//アセットのリストをキャッシュに登録</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return cache.addAll(urlsToCache);<br />
&nbsp;&nbsp;&nbsp;}));<br />
});
</div>
</div>

<p>&nbsp;<br /></p>

<p>キャッシュにアセットのリストを登録します。</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px">
<span style="color:#32CD32">//キャッシュするアセットのリスト</span><br />
var <span style="font-weight:bold;color:blue">urlsToCache</span> = [<br />
&nbsp;&nbsp;&nbsp;<span style="color:blue">&#8216;/&#8217;,<br />
&nbsp;&nbsp;&nbsp;&#8216;/index.html&#8217;,<br />
&nbsp;&nbsp;&nbsp;&#8216;/css/index.css&#8217;,<br />
&nbsp;&nbsp;&nbsp;&#8216;/script/index.js&#8217;</span><br />
];<br />
<span style="color:#32CD32">//install イベントのハンドラ</span><br />
Self.addEventListener(&#8216;install&#8217;, function(event) {<br />
&nbsp;&nbsp;&nbsp;event.waitUntil(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#32CD32">//キャッシュを開く</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caches.open(&#8216;キャッシュの名前&#8217;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then(function(<span style="font-weight:bold;color:fuchsia">cache</span>) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#32CD32">//アセットのリストをキャッシュに登録</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return <span style="font-weight:bold;color:fuchsia">cache.addAll</span>(<span style="font-weight:bold;color:blue">urlsToCache</span>);<br />
&nbsp;&nbsp;&nbsp;}));<br />
});
</div>
</div>

<p>&nbsp;<br /></p>

<p>Service Workerが登録され、installイベント内の処理が無事に完了すると、次にactivateイベントが発生します。（もしinstallイベント内の処理が失敗した際にはerrorイベントが発生します）</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px">
<span style="font-weight:bold;color:fuchsia">self.addEventListener(&#8216;</span><span style="font-weight:bold;color:blue">activate</span><span style="font-weight:bold;color:fuchsia">&#8216;,&nbsp;function(e)&nbsp;{</span><br />
&nbsp;&nbsp;e.waitUntil(<br />
&nbsp;&nbsp;&nbsp;&nbsp;caches.keys().then(function(keyList)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Promise.all(keyList.map(function(key)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(key&nbsp;!==&nbsp;&#8216;キャッシュの名前&#8217;)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;caches.delete(key);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}));<br />
&nbsp;&nbsp;&nbsp;&nbsp;})<br />
&nbsp;&nbsp;);<br />
<span style="font-weight:bold;color:fuchsia">});</span>
</div>
</div>

<p>&nbsp;<br /></p>

<p>installイベント内で&#8221;しなければいけない処理&#8221;というものは特にないのですが、一般的に古いキャッシュを削除するのに使用されます。このサンプルコードではキャッシュからキーの一覧を取り出し、</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px">
self.addEventListener(&#8216;activate&#8217;,&nbsp;function(e)&nbsp;{<br />
&nbsp;&nbsp;e.waitUntil(<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight:bold;color:fuchsia">caches.keys().then(function(</span><span style="font-weight:bold;color:blue">keyList</span><span style="font-weight:bold;color:fuchsia">)&nbsp;{</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Promise.all(keyList.map(function(key)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(key&nbsp;!==&nbsp;&#8216;キャッシュの名前&#8217;)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;caches.delete(key);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}));<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight:bold;color:fuchsia">})<br />
&nbsp;&nbsp;);</span><br />
});
</div>
</div>

<p>&nbsp;<br /></p>

<p>キャッシュの名前（新しく指定された）と比較し、異なるものをすべて削除しています。</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px">
self.addEventListener(&#8216;activate&#8217;,&nbsp;function(e)&nbsp;{<br />
&nbsp;&nbsp;e.waitUntil(<br />
&nbsp;&nbsp;&nbsp;&nbsp;caches.keys().then(function(keyList)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;<span style="font-weight:bold;color:fuchsia">Promise.all(keyList.map(function(</span><span style="font-weight:bold;color:blue">key</span>)&nbsp;<span style="font-weight:bold;color:fuchsia">{</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight:bold;color:fuchsia">if&nbsp;(</span><span style="font-weight:bold;color:blue">key</span>&nbsp;<span style="font-weight:bold;color:fuchsia">!==&nbsp;&#8216;キャッシュの名前&#8217;)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;caches.delete(</span><span style="font-weight:bold;color:blue">key</span><span style="font-weight:bold;color:fuchsia">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}));</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;})<br />
&nbsp;&nbsp;);<br />
});
</div>
</div>

<p>&nbsp;<br /></p>

<p>上記サンプルコードの、&#8221;キーの一覧と新しく登録されたキャッシュの名前を比較して異なるものをすべて削除してしまう&#8221;、というやり方は少々乱暴かもしれませんので、実際に実装を行う際にはどのようにキャッシュの削除を行うかは十分に考慮してください。</p>

<h3 style="font-weight:bold">なぜ、activateイベントでキャッシュを削除するのか？</h3>

<p>Service Worker自体は、Service Worker用のJSファイルを更新することで再登録されますが、キャッシュが削除されるわけではありません。よって、いずれどこかのタイミングで用済みとなった古いキャッシュを削除する必要が出てきます。</p>

<p>例えば、キャッシュの対象となっているindex.htmlに更新があった場合は、更新前のindex.htmlを保持しているキャッシュを削除しないかぎりユーザーにはいつまでも更新前のindex.htmlが表示されることになります。</p>

<p>Service Worker用のJSファイルが更新されたあと、新しいService Workerはバックグラウンドでインストールされますが、まだ動作はしません。新しいService Workerに制御が移るタイミングは、古いService Workerが制御しているすべてのページが閉じた後からになります。そのためinstallイベントで古いキャッシュを削除してしまうと、まだ動作している古いService Workerはキャッシュを使用できなくなってしまいます。</p>

<p>一方、activateイベントではページの制御が新しいService Workerに移っているので、古いService Workerが使用していたキャッシュを削除することができます。</p>

<h3 style="font-weight:bold">何をキャッシュさせるか？</h3>

<p>Service Workerにキャッシュさせるべきは、App Shellです。App ShellはアプリケーションのUIが機能するために必要な最小限のリソースです。App Shellをローカルにキャッシュすることで、アプリケーションのUI表示と使用可能となるまでの時間を短縮することができ、オフラインでの使用も可能になります。また要件に応じて、キャッシュが有効となるアセット類を指定してもよいでしょう。</p>

<p>しかし、何でもキャッシュさせればよいというものでもありません。例えば、WebGLベースのゲームは、一般的に使用するアセット類のサイズが大きく、これを毎度起動する際にサーバーからダウンロードするのは時間もかかり、通信コストもかさみます。たしかに、これらをキャッシュさせておけば、通信コストを下げ、ゲーム開始までの時間も短縮できます。</p>

<p>しかし、キャッシュストレージの容量には制限があり、また、cacheオブジェクトの代わりに容量の大きいIndexedDBを使用したとしてもクライアントのストレージを占有することになります。</p>

<p>PCなどのストレージ容量の大きいデバイスではあまり問題にならないかもしれませんが、スマートフォンのようなモバイルデバイスではストレージ容量を圧迫することにつながります。よって、なにをキャッシュさせるかは十分に考慮する必要があります。</p>

<h2>リクエストのハンドリング</h2>

<p>Service Workerは有効化(activate)された後、アイドル状態となり、WebページからのリクエストやサーバーからのPushを待ちます。</p>

<p>アイドル状態のとき、制御下にあるWebページでリンクをクリックするなどしてネットワークリクエストが発生するとService Worker ではfetchイベントが発生します。</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px">
<span style="font-weight:bold;color:fuchsia">self.addEventListener(&#8216;</span><span style="font-weight:bold;color:blue">fetch</span><span style="font-weight:bold;color:fuchsia">&#8216;,&nbsp;function(e)&nbsp;{</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;e.respondWith(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caches.match(e.request)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then(function(response)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;response&nbsp;||&nbsp;fetch(e.request);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}));<br />
<span style="font-weight:bold;color:fuchsia">})</span>
</div>
</div>

<p>&nbsp;<br /></p>

<p>fetchイベントハンドラの引数として渡されるオブジェクトに、発生したリクエストが含まれるので、同リクエストがキャッシュ内に存在するのか調べ、</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px">
self.addEventListener(&#8216;fetch&#8217;,&nbsp;function(<span style="font-weight:bold;color:blue">e</span>)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;e.respondWith(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight:bold;color:fuchsia">caches.match(<span style="font-weight:bold;color:blue">e</span>.request)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then(function(response)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;response&nbsp;||&nbsp;fetch(e.request);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}));<br />
})
</div>
</div>

<p>&nbsp;<br /></p>

<p>キャッシュ内にリクエストが存在すればそれを返し、存在しなければfetchメソッドを使用してネットワークにリクエストを投げます。</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px">
self.addEventListener(&#8216;fetch&#8217;,&nbsp;function(e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;e.respondWith(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caches.match(<span style="font-weight:bold;color:blue">e.request</span>)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight:bold;color:fuchsia">.then(function(</span><span style="font-weight:bold;color:green">response</span><span style="font-weight:bold;color:fuchsia">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return</span>&nbsp;<span style="font-weight:bold;color:green">response</span>&nbsp;<span style="font-weight:bold;color:fuchsia">||&nbsp;fetch(</span><span style="font-weight:bold;color:blue">e.request</span><span style="font-weight:bold;color:fuchsia">);</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;}));<br />
})
</div>
</div>

<p>&nbsp;<br /></p>

<p>それぞれの処理結果をリクエスト元のWebコンテンツ側に返します。</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px">
self.addEventListener(&#8216;fetch&#8217;,&nbsp;function(e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight:bold;color:fuchsia">e.respondWith(</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caches.match(e.request)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then(function(response&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;response&nbsp;||&nbsp;fetch(e.request);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight:bold;color:fuchsia">}));</span><br />
})
</div>
</div>

<p>&nbsp;<br /></p>

<p>この動作により、Webコンテンツ側ではService Workerやキャッシュを意識することなく、これまで通りの方法でページの制作を行うことができます。</p>

<p>また既存のWebコンテンツにService Workerの機能を追加する場合も、Service Workerを登録するためコードを追加する以外の作業は基本的に必要ありません。</p>

<p>de:code 2018のセッション動画で<a href="https://youtu.be/mk5qkxekFUs?t=20m3s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Service Workerを追加するデモ</a>を行っていますので、ぜひ実際の動作をご覧ください。</p>

<h2>Web App Manifest</h2>

<p>Web App Manifestは、デバイスのブラウザーによって[ホーム画面に追加]される際のアイコンや、ホーム画面から起動した際のスプラッシュアイコンや背景色、アプリケーションが動作するウィンドウのスタイルを定義します。</p>

<p>manifestは、json形式で記述し、以下のようなlinkタグをWebコンテンツ/アプリケーション側に追加して参照させます。</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px;text-align:center">
&lt;<span style="font-weight:bold;color:fuchsia">link</span> rel=&#8221;<span style="font-weight:bold;color:blue">manifest</span>&#8221; href=&#8221;<span style="font-weight:bold;color:blue">/manifest.json</span>&#8220;&gt;
</div>
</div>

<p>&nbsp;<br /></p>

<p>Web App Manifestについては、詳しい解説が<a href="https://developer.mozilla.org/ja/docs/Web/Manifest" target="_blank" title="Web App Manifest | MDN" data-wpel-link="external" rel="follow external noopener noreferrer">MDN</a>にあるので、そちらを参照することをお勧めしますが、以下に簡単な説明を兼ねたサンプルを掲示します。</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px">
{<br />
&nbsp;&nbsp;&nbsp;&#8220;lang&#8221;:&nbsp;&#8220;ja&#8221;,<span style="color:gray">&nbsp;←&nbsp;言語</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&#8220;name&#8221;:&nbsp;&#8220;The enemy of galaxy&#8221;,<span style="color:gray">&nbsp;←&nbsp;アプリケーションの名前</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&#8220;short_name&#8221;:&nbsp;&#8220;T.E.O.G&#8221;,<span style="color:gray">&nbsp;←&nbsp;アプリケーションのショートネーム</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&#8220;start_url&#8221;:&nbsp;&#8220;/?utm_source=pwd&#8221;,<span style="color:gray">&nbsp;←&nbsp;開始するときの&nbsp;URL&nbsp;(※1)</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&#8220;display&#8221;:&nbsp;&#8220;standalone&#8221;,<span style="color:gray">&nbsp;←&nbsp;ウィンドウのスタイル</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&#8220;background_color&#8221;:&nbsp;&#8220;black&#8221;,<span style="color:gray">&nbsp;←&nbsp;背景色</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&#8220;description&#8221;:&nbsp;&#8220;銀河に平和を取り戻すためのゲームです。&#8221;,<span style="color:gray">&nbsp;←&nbsp;説明文</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&#8220;orientation&#8221;:&nbsp;&#8220;portrait&#8221;<span style="color:gray">&nbsp;←&nbsp;画面の向き</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&#8220;icons&#8221;:&nbsp;[{<span style="color:gray">&nbsp;(※2)</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;src&#8221;:&nbsp;&#8220;images/homescreen48.png&#8221;,<span style="color:gray">&nbsp;←&nbsp;画像ファイルのパス</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;sizes&#8221;:&nbsp;&#8220;48&#215;48&#8221;,<span style="color:gray">&nbsp;←&nbsp;サイズ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;type&#8221;:&nbsp;&#8220;image/png&#8221;<span style="color:gray">&nbsp;←&nbsp;画像の種類</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;src&#8221;:&nbsp;&#8220;images/homescreen72.png&#8221;,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;sizes&#8221;:&nbsp;&#8220;72&#215;72&#8221;,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;type&#8221;:&nbsp;&#8220;image/png&#8221;<br />
&nbsp;&nbsp;&nbsp;}]<br />
}
</div>
<div style="width:600px;margin:0 auto">
<p style="margin-top:10px">(※1)Google Analytics等を使用しているときはクエリーストリングを使用することでPWAとして起動されたのか、ブラウザからページにアクセスしたのか判断が可能</p>
<p>(※2)iPhoneやiPadでアイコンが反映されない場合は、apple-touch-iconを使用</p>
</div>
</div>

<p>de:code 2018のセッション動画で<a href="https://youtu.be/mk5qkxekFUs?t=27m24s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Web App Manifest を追加するデモ</a>を行っているので、ぜひ実際の動作をご覧ください。</p>

<h3>現在のWindows 10バージョン 1803のProgressive Web Appsの動作</h3>

<p>なお、2018年6月現在のWindows 10バージョン1803(OS ビルド 17134.112)では、残念ながらWeb App Manifestによるウィンドウの制御は有効になりません。</p>

<p>例えば、Windows 10のMicrosoft EdgeでProgressive Web Appsのページをタスクバーにピン留めして起動したとしてもWebブラウザーのUIを表示したまま起動してきます。</p>

<p>Windows 10でProgressive Web Appsにそれらしい動作をさせるにはUWP(Universal Windows Platform)アプリでラップする必要があります。</p>

<p>しかし、Windows 10の次のアップデートでは、Web App Manifestのdisplayの設定に対し、PWAのウィンドウは<a href="https://youtu.be/6fb-t9ffDvo?t=10m5s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">以下のような表示になるそうです。</a></p>

<p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/win10display.png" alt="" width="1283" height="449" class="aligncenter size-full wp-image-5605" />
<br />&nbsp;</p>

<h2>マイクロソフトのProgressive Web Appsへの<br />取り組み</h2>

<p>Windows 10の[Microsoft Store]から Progressive Web Appsとして作られたアプリを入手することができます。</p>

<p>Web App Manifestのところで書いたとおり、現在のWindows 10にプレーンな Progressive Web Appsをインストールしても、ネイティブアプリのような外観にはなりません。そのためMicrosoft Storeから入手できるProgressive Web AppsはUWPアプリにラップされています。</p>

<h3>MicrosoftストアでのProgressive Web Appsの公開</h3>

<p>MicrosoftストアでProgressive Web Appsを公開するには 2つの方法があります。</p>

<p>1つめがBingによる自動インデックスによる登録と、2つめがProgressive Web Appsの提供者がMicrosoftストアにProgressive Web Appsを提出するセルフパブリッシングです。</p>

<p>以下でこの 2つの方法について紹介します。</p>

<h3>Bingによる自動インデックス(BETA)</h3>

<p>現在はまだBETAの状態ですが、BingがWeb上のProgressive Web Appsを検出し、レビューを行い、自動的にMicrosoftストアに公開します。</p>

<p>Bingに自動インデックスされるための条件は、現在のところ以下のようなものがあります。</p>

<ul>
<li>HTTPS、セキュアなエンドポイント</li>
<li>高品質の manifest</li>
<li>オフラインサポート</li>
<li>ストアの審査をパス
   <ul>
      <li>デジタルグッズを販売しないこと</li>
      <li>アダルトコンテンツを含まないこと</li>
      <li>不快なコンテンツは不可</li>
</ul></li>
<li>Windowsならではの差別化がされている</li>
</ul>

<p>上記リストで、最後の&#8221;Windowsならではの差別化がされている&#8221;というのは、少しわかりづらいかもしれません。</p>

<p>Microsoft Storeで公開されるProgressive Web Appsは、UWPアプリにラップされるので<a href="https://docs.microsoft.com/ja-jp/uwp/api/" target="_blank" title="Windows UWP Namespaces" data-wpel-link="external" rel="follow external noopener noreferrer">WinRT (Windows Runtime) API</a>を使用することができます。</p>

<p>つまりWinRT APIを使用することで、Windows 10で使用した際には、純粋なProgressive Web Appsからはアクセスできないプラットプラットフォームやハードウェアリソースの機能を使用することができるため、これらを利用した機能を実装することで差別化を図ることができます。</p>

<h3>Microsoftストア向けProgressive Web Appsの検証</h3>

<p>決して、Progressive Web Appsの検証に限ったものでなく、ましてやMicrosoftストア向けのWebコンテンツ用に限定するものではありませんが、WebサイトやProgressive Web Appsの品質をチェックするための<a href="https://sonarwhal.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">sonarwhal</a>というサービスが公開されています。</p>

<p><a href="https://sonarwhal.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/sonarwhal.png" alt="" width="400" class="aligncenter size-full wp-image-5625" /></a></p>

<p>sonarwhalはProgressive Web AppsがMicrosoftストア向けの準備がてきているか、だけでなく、一般的なWebサイトやアプリケーションのパフォーマンスやユーザーエクスペリエンス、セキュリティの向上の役に立つ情報を提供してくれます。</p>

<h3>Bingに検出されないようにするには</h3>

<p>インターネットで公開しているProgressive Web AppsをMicrosoftストアから配布されたくない場合、Progressive Web Appsが以下のいずれかの条件に合致していた場合、Bingは自動インデックスを行いません。</p>

<ul>
<li>manifest なし</li>
<li>https なし、もしくは オフラインで動作しない</li>
<li>Robot.txtファイルが設定されている</li>
<li>manifestのdisplay設定がbrowser</li>
</ul>

<p>既に Microsoftストアで公開されているものを取り消したい場合は、アプリを削除するよう <a href="reportapp@microsoft.com" data-wpel-link="internal">reportapp@microsoft.com</a>宛にサービスリクエストを出します。</p>

<h3>セルフパブリッシングによるMicrosoftストアでの公開</h3>

<p>Bingの自動インデックスに期待するのではなく、明示的にMicrosoftストアでProgressive Web Appsを公開するには<a href="https://developer.microsoft.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">dev.microsoft.com</a>で開発者アカウントを取得し、パッケージ(appx)化してMicrosoftストアに提出します。アプリの内容がMicrosoftストアの審査をパスすればMicrosoftストアで公開されます。</p>

<p>Progressive Web Appsをパッケージ化するには以下の方法があります。</p>

<ul>
<li><a href="https://visualstudio.microsoft.com/ja/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Visual Studio 2018</a> を使用する</li>
<li><a href="https://www.pwabuilder.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">PWABuilder</a> を使用する</li>
<li><a href="https://github.com/pwa-builder/ManifoldJS/releases" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">pwa-builder CLI</a> を使用する</li>
</ul>

<h3 style="font-weight:bold">PWABuilder</h3>

<p><a href="https://www.pwabuilder.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/PWABuilder.png" alt="" width="400" class="aligncenter size-full wp-image-5635" /></a></p>

<p>PWABuilderはインターネットにホストされているサービスで、同じくインターネットにホストされているWebアプリケーションのためのmanifestファイルやService Workerのコード、Service Workerを登録するためのコードを生成します。</p>

<p>また、UWPのHostedアプリのパッケージも生成できるので、Progressive Web AppsをMicrosoftストアで公開する際にはこれをストアに提出します。</p>

<p>PWABuilderを使用した既存のWebアプリケーション用のmanifestファイルやService Workerのコードを生成する手順については de:code 2018 の
<a href="https://youtu.be/mk5qkxekFUs?t=35m19s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">セッション動画のデモ</a>をご覧ください。</p>

<h3 style="font-weight:bold">Windows ストア(UWP) アプリの価値</h3>

<p>前述しましたが、Progressive Web AppsをUWPアプリ(<a href="https://msdn.microsoft.com/en-us/magazine/mt797652.aspx" target="_blank" title="UWP Apps - Develop Hosted Web Apps for UWP" data-wpel-link="external" rel="follow external noopener noreferrer">Hosted Web アプリ</a>)としてラップすることで WinRT が提供するすべての機能を利用することができます。</p>

<p>これは予定表やアドレス帳といったプラットフォームが提供するソフトウェア的なリソースはもちろん、USBやセンサー類といったハードウェアリソースも含まれます。</p>

<p>アプリケーションが通常のWebブラウザー上で動作しているのか、UWPで動作しているかは JavaScriptのif文で簡単に判断できるので、WinRT APIにアクセスするためのコードをインターネットでホストされているコンテンツに含めておくことができます。</p>

<div style="width:100%">
<div style="width:600px;background-color:gainsboro;margin:0 auto;padding:10px;font-size:15px">
//UWP として動作しているかどうか<br />
if(window.Windows){<br />
&nbsp;&nbsp;&nbsp;//セカンダリータイルをピン留めする<br />
&nbsp;&nbsp;&nbsp;tile&nbsp;=&nbsp;new&nbsp;Windows.UI.StartScreen.SecondaryTile(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tileId,&nbsp;text,&nbsp;text,&nbsp;&nbsp;activationArguments,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newTileDesiredSize,&nbsp;logoUri);<br />
}
</div>
</div>

<p><br /></p>

<p>JavaScriptで記述したUWPから,WinRT APIを使用するサンプルコードは以下に豊富に用意されているので、Windows 10限定となってしまいますが、純粋なProgressive Web Appsの機能だけでは実現できない要件がある場合は、こういった方法もあるということを覚えておくとよいかもしれません。</p>

<p><a href="https://developer.microsoft.com/ja-jp/windows/samples" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">・コードサンプル &#8211; Windows アプリの開発</a></p>

<p>Visual Studio 2018を使用してProgressive Web AppsをUWPでラップし、WindowsRT APIを使用する方法については、de:code 2018 の<a href="https://youtu.be/mk5qkxekFUs?t=42m9s" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">セッション動画のデモ</a>をご覧ください。</p>

<p>その他、Progressive Web AppsをUWPとしてMicrosoftストアに公開することで、Microsoftストアの提供するマーケティングデータ (ダウンロード数、ユーザーの性別、年齢層、国、etc.)や、決済のためのストアのAPIが利用できたり、人気があればMicrosoftストアのトップページに掲示されたり、とさまざまなメリットもあります。</p>

<p>しかも、Hostedアプリであれば、共通のコンテンツでありながら純粋なままのProgressive Web Appsがインターネットでホストされているので、アプリストアを通さない場合のメリットも享受できます。</p>

<p>【参考】<br />
<a href="https://developer.microsoft.com/ja-jp/windows/pwa" target="_blank" style="font-size:15px" data-wpel-link="external" rel="follow external noopener noreferrer">・Windows デベロッパーセンター &#8211; PWAとWindows10</a>
</p>

<p>この記事では、UWPのHostedアプリについて紹介しましたが、Apache Cordovaでもさまざまなモバイル プラットプラットフォーム向けに Hostedアプリを開発することができます。興味のある方は以下の記事をご覧ください。</p>

<p><a href="https://docs.microsoft.com/en-us/visualstudio/cross-platform/tools-for-cordova/first-steps/create-a-hosted-app?view=toolsforcordova-2015" target="_blank" style="font-size:15px" data-wpel-link="external" rel="follow external noopener noreferrer">・Create a hosted web app using Apache Cordova</a></p>

<h2>Progressive Web Appsの価値を高める API</h2>

<p>ここまでWindows 10で動作するUWPアプリでラップされたProgressive Web Appsの紹介をしていましたが、ここからは再びプレーンな Progressive Web Appsについてです。</p>

<p>Progressive Web Appsは、ネイティブアプリのような体験を提供しますが、WebアプリケーションなのでWebブラウザーの機能を超えて動作することはできません。</p>

<p>例えば、表示速度や動作速度はネイティブアプリと比較するとどうしても劣ります。</p>

<p>しかし、Webブラウザーで新しくサポートされた以下のような機能を使用すれば、その能力的な差を縮めることができます。これまでの Webコンテンツにはなかった新しい体験をユーザーに提供したり、決済の仕組みもWeb標準のAPIを使用してこれまでよりも少ない工数で組み込むことができるので、これらを使用してアプリケーションの価値を高めることができます。</p>

<ul>
<li><span style="font-weight:bold;font-size:15px"><a href="https://www.w3.org/TR/css3-namespace/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">CSS3</a></span>
3D Transform関連等GPUを使用する設定があり、これを意識的に利用することで描画速度を向上させることができます。
</li>
<li><span style="font-weight:bold;font-size:15px"><a href="https://webassembly.org/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">WebAssembly</a></span>
C言語などで記述し、あらかじめコンパイルしたものをWebブラウザーで動作させるため高速な計算が可能となります。
</li>
<li><span style="font-weight:bold;font-size:15px"><a target="_blank" data-wpel-link="internal">WebVR</a></span>
VRデバイスの提供するAPIをサポートし、ユーザーによりImmersiveな体験を提供できます。
</li>
<li><span style="font-weight:bold;font-size:15px"><a href="https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/paymentrequest/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web Payments</a></span>
決済画面その他、支払いに関する機能を提供します。これとPaypalやStripeなどが提供する決済用のAPIを繋げれば少ない工数で独自に決済期の機能を実装できます。自前の決済の仕組みがあれば、もう何かを販売するたびにアプリ ストアに使用料を支払う必要はありません</li>
</ul>

<p>この他にも、最新のWebブラウザーにはこれまでできなかった機能が日々搭載されてきます。そういった新機能をいち早く利用できるのも、逆にレガシーなWebブラウザーには引き算した機能を提供できるのもProgressive Web Appsの良いところです。(もちろん、そう作れば、ですが)</p>

<h1>Progressive Web Appsの位置づけ</h1>

<p>PWAことProgressive Web Appsは「ネイティブアプリのような体験を提供する」という言葉が独り歩きしてしまい、まるで「ネイティブアプリを置き換える」といった印象を持っている人も多いようです。とはいえ、「ネイティブアプリを置き換えることはできない」というのも真ではないでしょう。</p>

<p>例えば、スマートフォンアプリには、アプリとしてインストールさせるためだけに外側をWeb Viewでラップしたいわゆる「ガワアプリ」と呼ばれるものがあります。こういったものは今後はProgressive Web Appsに置き換えられていくでしょう。</p>

<p>実際にイベントサイトや、カンファレンスのセッションスケジュールの部分をPWA化してユーザーが持ち歩けるようにしているサイトはすでにいくつか存在します。</p>

<ul>
<li><a href="https://abc.android-group.jp/2018s/" target="_blank" style="font-size:15px" data-wpel-link="external" rel="follow external noopener noreferrer">ABC 2018 Spring | 日本最大級のAndroidデベロッパーの祭典</a></li>
<li><a href="https://ngjapan.org/" target="_blank" style="font-size:15px" data-wpel-link="external" rel="follow external noopener noreferrer">ng-japan &#8211; The Angular conference in Tokyo, Japan (2018/6/16)</a></li>
</ul>

<p>こういったものもProgressive Web Appsが出てくる以前はWebページとは別にスマートフォン用のアプリを、場合によってはプラットフォームごとに別々の言語で開発し、それぞれのアプリストアに提出して審査を受けるといったことをしていました。</p>

<p>Webページとアプリの開発が共通化でき、配布の手間もかからないということは予算や時間的にも非常に大きなメリットがあります。</p>

<p>しかし、Webブラウザー内のJavaScriptからアクセスできないプラットフォームの機能を利用するアプリケーションや、高速な動作や描画を必要とする用途には今後もネイティブ アプリが選択されることでしょう。</p>

<p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/PWA_position.png" alt="" width="1141" height="292" class="aligncenter size-full wp-image-5645" /></p>

<p>Progressive Web AppsはWebアプリケーションとネイティブアプリの体験的なメリットを受け継ぎ、ちょうどその中間に位置し、その隙間を埋めるものです。</p>

<p>Webのページではpoorだったもの、逆にネイティブアプリではtoo muchだったものが、Progressive Web Appsには最適なのかもしれません。</p>

<p>少し作って試すだけの実装ならそれほど難しくありませんので、気になる人はぜひProgressive Web Appsを作ってみることをお勧めします。</p>

<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>/osamum_ms/25709/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2020年のプログラミング教育必修化で、未来はどう変わる？―教育現場の現状と課題・教材・義務教育のビジョンetc.</title>
		<link>/miyuki-baba/25376/</link>
		<pubDate>Thu, 10 May 2018 01:00:07 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Hour of Code]]></category>
		<category><![CDATA[Life is Tech!]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Minecraft]]></category>
		<category><![CDATA[みんなのコード]]></category>
		<category><![CDATA[プログラミング教育]]></category>

		<guid isPermaLink="false">/?p=25376</guid>
		<description><![CDATA[連載： Webの未来を語ろう 2018 (4)HTML5 Experts.jp編集部の馬場です。 いよいよ2020年度から小学校でプログラミング教育が必修化されますね。 今回の「Webの未来を語ろう2018」は「プログラ...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/future-of-web-2018/" class="series-496" title="Webの未来を語ろう 2018" data-wpel-link="internal">Webの未来を語ろう 2018</a> (4)</div><p>HTML5 Experts.jp編集部の馬場です。<br>
いよいよ2020年度から小学校でプログラミング教育が必修化されますね。<br>
今回の「Webの未来を語ろう2018」は「プログラミング教育」がテーマです。</p>

<p>HTML5 Experts.jpの白石編集長をモデレーターに、プログラミング教育の最前線で活躍中の、みんなのコード利根川裕太さん、ライフイズテック水野雄介さん、日本マイクロソフト春日井良隆さんをお招きし、プログラミング教育の現状からプログラミング教育必修化の課題、その先に目指す未来について語っていただきました。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00447.gif" alt="" width="640" height="402" class="alignnone size-full wp-image-25425" /></p>

<p><br></p>

<h2>今回のゲストプロフィール</h2>

<p><img src="/wp-content/uploads/2018/04/mizuno.gif" alt="" width="100" height="100" class="alignleft size-full wp-image-25465" /><span style="font-size: 95%;"><strong>ライフイズテック株式会社 代表取締役CEO 水野 雄介さん</strong></span><br><span style="font-size: 79%;">1982年生まれ。慶応義塾大学理工学部物理情報工学科、同大学院在学中に、開成高等学校物理非常勤講師を2年間勤める。卒業後、人材系コンサルティング会社に入社。教育変革を掲げ、退社後、2010年7月、ピスチャー株式会社（現ライフイズテック株式会社）設立。シリコンバレーIT教育法をモチーフとした中高生向けIT教育プログラム「Life is Tech!」を立ち上げる。現在延べ15000名の中高生がLife is Tech !に参加。</span></p>

<p><img src="/wp-content/uploads/2018/04/tonegawa.gif" alt="" width="100" height="100" class="alignleft size-full wp-image-25469" /><span style="font-size: 95%;"><strong>NPO法人みんなのコード 代表 利根川 裕太さん</strong></span><br><span style="font-size: 79%;">一般社団法人みんなのコード代表。慶應義塾大学経済学部卒業後不動産デベロッパーへの勤務を経て2011年よりラクスル株式会社に立ち上げより参画。2014年Hour of Codeのボランティア実施後プログラミング教育の必要性を感じ、2015年7月一般社団法人みんなのコードを設立し代表理事に就任。2016年、文部科学省「小学校段階における論理的思考力や創造性、問題解決能力等の育成とプログラミング教育に関する有識者会議」委員。</span></p>

<p><img src="/wp-content/uploads/2018/04/kasugai-01.gif" alt="" width="100" height="100" class="alignleft size-full wp-image-25475" /><span style="font-size: 95%;"><strong>日本マイクロソフト株式会社 プロダクトマネージャ 春日井 良隆さん</strong></span><br><span style="font-size: 79%;">岐阜大学 教育学部を卒業後、大沢商会、アドビ システムズを経て、マイクロソフトに入社し、ExpressionとSilverlightのマーケティング戦略を担当する。その後、エバンジェリストとして、ユーザーエクスペリエンスやHTML5、プログラミング教育の普及に奔走し、Imagine CupやHour of Codeの日本での活動を主導する。2015年よりWindowsのプロダクトマネージャーとしてコンシューマ市場を、2017年より教育市場を担当。</span></p>

<p><br></p>

<h2>プログラミング教育のこれまでの取り組み</h2>

<p><strong>白石</strong>：まずは皆さんの自己紹介と、プログラミング教育との関わりについてお聞かせください。</p>

<p><strong>水野</strong>：ライフイズテック水野です。これまでプログラミング教育は重要だと言われながら、社会がなかなかついていけてなかった。プログラミングスキルは「やりたい」「好き」という気持ちがないと伸びないと考え、7年半前に中高生向けIT教育プログラム「<a href="https://life-is-tech.com/camp/index.html" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">Life is Tech!</a>」を立ち上げました。</p>

<p>「Life is Tech!」は春夏冬休み中に、3～8日間のキャンプ形式でiPhoneアプリやゲームを作りながらプログラミングを学びます。1回150～200人の中高生が参加し、5～6人が1チームになり、大学生がメンターとなって中高生に教えています。これまで延べ27,000人が参加しており、世界2位の規模となりました。</p>

<p>Life is Tech!では、ただプログラミングのスキルをつけるだけでなく、好きな仲間と出会ったり、尊敬する大学生のメンターに学ぶことでこんな先輩になりたいと思ったり、夢中になれることを見つける体験をしてほしいので、大学や企業など、中高生にとって非日常な空間でキャンプするということを大事にしています。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00450.gif" alt="" width="640" height="400" class="alignnone size-full wp-image-25564" /><span style="font-size: 80%;">▲<strong>「Life is Tech!」キャンプの様子</strong></span></p>

<p>有料コースと無料コースがありますが、全体の1/3が無料体験会や企業とのタイアップキャンプの参加者です。最近はIoTをテーマに開催したり、NHKさんとAIを学んだりしています。ポケモンGOやUnityのコースも人気があります。参加者には勉強時間はLINEが使えなくなったり、ライバルが勉強し出すと通知が来る機能など、独創的な発想で作った勉強管理のアプリを作り、ダウンロード数が10万超えした子もいます。</p>

<p>子どもたちにはいつも<strong>プログラミングの力で「半径2mの世界を自分たちで変えていこう」、さらに「その半径を広げていこう」</strong>と伝えています。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00404.gif" alt="" width="640" height="420" class="alignnone size-full wp-image-25435" /><br><span style="font-size: 90%;">▲<strong>ライフイズテック株式会社 代表取締役CEO 水野 雄介さん</strong></span></p>

<p><strong>利根川</strong>：僕は大学卒業後、大手の不動産会社に就職し、2011年にラクスルというベンチャーに社長の次にエンジニアとして入って、立ち上げから携わりました。それから4年経った2014年くらいに、エンジニアと非エンジニアの壁をなんとなく感じていたこともあり、アメリカの非営利活動法人Code.orgが展開している「<a href="https://hourofcode.com/jp" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">Hour of Code</a>」をみんなでやってみたんですね。</p>

<p>それをきっかけに、こうしたプログラミング教育が日本にも必要だと思うようになり、2015年1月に小学生のプログラミング教育を支援する活動準備を始めました。7月にはCode.orgの日本パートナーとなる<a href="https://code.or.jp/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">一般社団法人みんなのコード</a>を設立しました。</p>

<p>当時はプログラミング教育がこんなに盛り上がるとは思っていませんでしたが、2020年から必修化も決まり、行政・企業との連携を深めながらプログラミング教育の支援活動を広げています。</p>

<p>私たちみんなのコードは、「<strong>全ての子どもがプログラミングを楽しむ国にする</strong>」というミッションを掲げています。なぜ、全ての子どもなのかというと、プログラミングコンテストはある程度できる子を伸ばすのにはいいけど、全ての子どもの育成に対する取り組みってあまりないと思ったから。なので、裾野を広げるほうを頑張ろうというコンセプトでやってます。</p>

<p><img src="/wp-content/uploads/2018/04/presentati.gif" alt="" width="640" height="382" class="alignnone size-full wp-image-25555" /></p>

<p>IT人材不足や論理的思考を鍛えるという考え方も大事ではあるんですが、実際に授業でやるときは「プログラミングを楽しむ」というのを第一にして、結果的に子どもの能力が高まるとか、社会で活躍できる人材を育てたいと考えたからです。</p>

<p>「国にする」とした背景は、こういう活動って東京だけ先に進んでしまって、地方との格差が生まれることが多いんですよね。その差を埋めるために地方でも活動しています。とはいえ、全ての子どもに直接教えるのは無理なので学校の先生、特に小学校の先生に対しての指導を行っています。プログラミング教育についてのシンポジウムを開催したり、地方に出向いて体系的に学んでもらったり、実際の授業で使える教材を提供したりなどですね。2017年度のシンポジウムは10都市1000名超の先生に参加してもらいました。これからはさらに拡大していく予定です。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00432.gif" alt="" width="640" height="424" class="alignnone size-full wp-image-25438" /><br><span style="font-size: 90%;">▲<strong>一般社団法人みんなのコード 代表 利根川 裕太さん</strong></span></p>

<p><strong>春日井</strong>：日本マイクロソフトの春日井です。Windowsのマーケティング担当として、教育市場を見ています。HTML5 Experts.jpのエキスパートに名前を連ねているように、以前はWeb系の技術のエバンジェリストをしていたのですが、後半は学生向けのエバンジェリズム活動も兼任していて、その頃に知り合ったのが水野さん。</p>

<p>「Life is Tech!」は大学生が中高生を教えるというスタイルで、お互いの年齢が近いから親近感があるんですよね。子どもたちを盛り上げる趣向が凝らされていて「すごい！」って毎回感動しています。しかも、経験と知見が積み重なり、どんどんバージョンアップしてる。</p>

<p>利根川さんとは、彼がCode.orgの日本パートナーとして、みんなのコードを立ち上げた頃に知り合いました。Code.orgはアメリカのSTEM教育（※）の普及を支援するNPO団体で、Microsoft、Apple、Google、Facebook、AWSなど大手のIT系企業が数多くサポートしています。</p>

<blockquote>
  <p><span style="font-size: 80%;"><strong>STEM（ステム）教育</strong>：科学（Science）、技術（Technology）、工学（Engineering）、数学（Mathematics）の教育分野を総称する、2000年代に米国で始まった教育モデル。</span></p>
</blockquote>

<p>Microsoftは「<a href="https://makecode.com/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">Microsoft MakeCode</a>」というMicrosoftが開発した学習者向けのプログラミング環境とコンピューティング教育用教材を展開しています。最近はIoTを活かしたフィジカルコンピューティングが人気で、micro:bitというマイコンと連携できる「<a href="https://minecraft.makecode.com/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">MakeCode micro:bit</a>」が注目されています。USBでつないだmicro:bitをビジュアルコーディングでLEDを光らせたり、温度センサーや加速度センサーを使ったモノ作りにも使えます。理科や技術なんかの教科との組み合わせの相性もいいですよね。</p>

<p><a href="https://makecode.com/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external"><img src="/wp-content/uploads/2018/04/Wrist_cuff.gif" alt="" width="640" height="360" class="alignnone size-full wp-image-25561" /></a></p>

<p>ほかにも、MakeCodeはMinecraft（マインクラフト）をプログラミング教材として使うこともできて、一緒に組み合わせる「<a href="https://docs.microsoft.com/ja-jp/education/windows/get-minecraft-for-education" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">Minecraft Education Edition</a>」というマイクラの教育版があります。Minecraftは全世界の子どもがほぼ100％やっている人気のサンドボックスゲームですね。</p>

<p><strong>水野</strong>：シンガポールでも大人気で、どこのコンビニでも一番目立つ場所に置いてあります。</p>

<p><strong>白石</strong>：うちの小4の息子もすごくはまっていますね。いつもYouTubeの実況を見てます(笑)。</p>

<p><strong>春日井</strong>：YouTubeを見て勉強する子も多いみたいですね。古い世代は先生からの一方的な詰込み型の教育が当たり前だったんですが、お互い子ども同士が学び合おうという協働学習の学習効果に注目が集まっていて、Minecraft: Education Editionにはそんなこともできるように工夫されています。</p>

<p>先生が黒板に「ここに集合！」と書いたり、仮想世界にいる子どもをガイダンスしたりする機能もあって、お値段もお手頃。先生が一人、1年あたり544円払えば使うことができます。</p>

<p>実績としておもしろいのは、立命館小学校の事例ですね。京都には、たくさんの観光施設があることはご存じの通りですが、海外の人にもっと知ってもらおうという課題を解決する学習にMinecraft: Education Editionが使われました。</p>

<p>ちゃんと設計図を手に入れて、誰が屋根と庭とかを作るかなどの業務分担をし、訪れた人のアングルまで徹底的に考え、議論しながら作っています。先生はあくまで手助けするだけで、子どもたちが主体的に取り組んでいるところが素晴らしいんです。</p>

<p>Minecraft Education Editionはプログラミング教育だけでなく、STEM教育全般をやろうとしています。例えば、私たちの世代だと元素記号を覚えるだけだったものが、仮想空間の中で水素と酸素を合成すると水を生成するようなことを体験したりします。現CEOのサティア・ナデラの理解もあり、マイクロソフトでは全世界的にかなり教育に力を入れていますね。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00426.gif" alt="" width="640" height="419" class="alignnone size-full wp-image-25439" /><br><span style="font-size: 90%;">▲<strong>日本マイクロソフト株式会社 Windows プロダクトマネージャ 春日井 良隆さん</strong></span></p>

<p><strong>白石</strong>：子どものプログラミング教育を支援するのは、Microsoftにとってどういうメリットがあるんですか？</p>

<p><strong>春日井</strong>：1つは社会的な責任ですね。。第4次産業革命に向けた人材育成を引き合いに出すまでもなく、ICTのスキルを持った人材の育成は急務です。日本のマイクロソフトの人間として、日本の将来に貢献をしたい。それは、偽らざる気持ちです。</p>

<p>商売的な話をすれば、子どもの頃からWindowsに慣れ親しめば、大人になったらSurfaceを買ってくれるだろうという期待もあります(笑)。あとはスマートフォンに対する、パソコンの意義というのも伝えていきたいと考えています。</p>

<h2>世界のプログラミング教育はどうなっている？</h2>

<p><strong>白石</strong>：続いては、世界のプログラミング教育どうなっているかについて伺いたいと思います。1月にロンドンで開催された「<a href="https://www.bettshow.com/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">BETT</a>」という教育イベント、皆さん行かれてるんですよね？</p>

<p><strong>利根川</strong>：私も行ってきました。</p>

<p><strong>春日井</strong>：BETTは世界で一番大きい教育系のイベントで、国を挙げてブース出しているところが多く、今年の韓国は大きかったですね。でも、日本はブース出してないんですよ。遅れをとるのではないかとかなり心配しています。</p>

<p><strong>利根川</strong>：僕は課題はあるけど、単純に「遅れててやばい」という論調は一面的過ぎると思っています。例えば、グローバルでもプライベートの塾はまだあまりないし、日本の小学校でも先進的な取り組みをやっている先生もいます。</p>

<p><strong>春日井</strong>：正確に言うと、プログラミングができる最先端の人材を生み出す高等教育に対する取り組みが遅れているんじゃないかと思っています。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00466.gif" alt="" width="640" height="427" class="alignnone size-full wp-image-25566" /></p>

<p><strong>水野</strong>：そもそもプログラミング教育の前に、まずパソコンが扱えて、パソコンでものが作れることが必要なんですが、Wifiやパソコンの設備が整っていないですね。以前シンガポールに住んでいたんですが、向こうもそれほど進んでいるわけでもなくて、やはり（プログラミングができる）先生が少ない。</p>

<p>英語は「できない」というマイナスの状態から、「できる」というゼロにすることだけど、プログラミングはゼロをプラスにする学びなので、ほぼ横一線。日本はものを丁寧に作るとか、ソフト面では勝っているので、まだ可能性はあると思います。</p>

<p><strong>利根川</strong>：僕も横と比較して嘆くより、これからどれだけ良くしていくかの方が重要で、先に進んでるところからどうやれば前に進めるのかを学べばいいんじゃないかと。アメリカが進んでたらそこからカリキュラムを学べばいいし、悲観する必要はないと思います。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00399.gif" alt="" width="640" height="427" class="alignnone size-full wp-image-25545" /><span style="font-size: 80%;">▲<strong>HTML5 Experts.jp編集長 白石俊平</strong></span></p>

<p><strong>白石</strong>：ちなみにどこの国が進んでるところかありますか？</p>

<p><strong>利根川</strong>：アメリカは進んでますね。あとはイスラエル、イギリス。特にイングランドはコンピューティングという教科があり、小中高と授業があります。時間枠、教科書、センター式みたいな試験もあって枠組みや体制が整っています。</p>

<p><strong>春日井</strong>：ちょっと前に話題になった内閣府では、諸外国の若者と比較すると、日本の中学生のスマホの所有率はあまり変わらないのですが、パソコン所有率はかなり少ないという結果になっていました。</p>

<p><strong>水野</strong>：普通に向こうは小学3年生からiMovieから動画作ったりしますからね。Googleドライブで宿題出したり、リテラシーの差はかなり大きい。</p>

<p><strong>白石</strong>：今の子どもたちはPCがなくてもタブレットやスマホでやっちゃうことが多いですよね。</p>

<p><strong>利根川</strong>：コンテンツの消費側はそれでもいいけど、制作する側になるとまだ本格的なところはPCでないとつらいと思います。</p>

<p><strong>春日井</strong>：消費は間違いなくスマホ。でも何かクリエイトする時は、PC、キーボード、大きな画面がないと難しい。</p>

<p><strong>白石</strong>：ではそういう話やデータから考えると、作る力は育っていかない可能性がありますか？</p>

<p><strong>春日井</strong>：なんとかしないといけないですね。</p>

<p><strong>利根川</strong>：個人の家庭、学校によっても差が出てくる面もあります。</p>

<p><strong>白石</strong>：そういう課題が浮き彫りになり、未来に進んでいかなくてはいけないという話になってきたので、プログラミング教育のこれからの話に進みましょう。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00447-2.gif" alt="" width="640" height="402" class="alignnone size-full wp-image-25577" /></p>

<h2>プログラミング教育のこれから</h2>

<p><strong>白石</strong>：プログラミングの義務教育化の話が出ましたが、ざっくばらんにお聞きしたい。調べたところ「コーディングを覚えることが目的ではない」とか「プログラミング的思考」が大事とか、賛否両論あるらしいですね。アンプラグドコンピュータサイエンスというパワーワードもあったりして。</p>

<p><strong>利根川</strong>：よくプログラミングが2020年から必修化になるってメディアに出てるので勘違いする方もいるのですが、正確にいうと小学校、中学校、高校がプログラミングを教えないといけないんですよと指導要領は出ますが、プログラミングという教科ができたり、コードの書き方そのものの授業をやるわけではないのです。その指導要領は10年に一回しか変わらなくて、そのタイミングが小学校が2020年、中学校が2021年、高校が2022年になります。</p>

<p>現状どのくらいプログラミングを授業に取り入れているかというと、小学校についてはほぼなくて、たまに面白いことをやりたい学校や、2020年を見据えて先行的にやる学校がまれにあるくらい。中学校は今の指導要領でも技術課程の中で、4～8時間くらいロボット制御の計測という授業があります。ただこれも問題が山積みで、教科書には入ってはいるけど、ちゃんとやらない先生もいます。</p>

<p>高校は情報という教科の中に、理系よりの「情報の科学」と文系よりの「社会と情報」という科目があり、プログラミングは情報の科学の中にのみ入っています。ただし、学校ごとに開設科目は決まっていて、配分は15％：85％と情報の科学が少ないという状況です。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00434.gif" alt="" width="640" height="427" class="alignnone size-full wp-image-25571" /></p>

<p><strong>水野</strong>：そうですね。その15％もかなり初歩的な内容が多く、僕が衝撃を受けたのは、テストの問題で「キーボードのここはAですか？Pですか？」って問題が出てたこと。キーボードの位置を覚えることに価値はないし、問題山積みな状況です。</p>

<p><strong>利根川</strong>：そして、小学校は算数とか理科の中で、多角形をプログラミングで書いてみる。書くというより、プログラミング体験してコンピュータに指示する感覚をつかみましょうというかんじですね。中学校は今の指導要領にあるロボット等の制御の内容に加えて、ネットワークを使った活動が増えて、今やっていることを倍増にするイメージです。</p>

<p>高校は「社会と情報」と「情報の科学」を統合して情報の科学よりの「情報Ⅰ」という必履修にして、これまで15％しかやってなかったことを100％にして、教科の中に入っていくといったかんじです。プログラミングという単独の教科はありません。</p>

<p><strong>白石</strong>：小中高とプログラミングという教科は出てこないと。小学校においては、現在技術課程でやっているのを2020年以降は理科とか算数で、もうちょっと厚めにやるということでしょうか？</p>

<p><strong>利根川</strong>：小学校は現時点ではゼロです。ゼロの状態から算数・理科の科目で体験というかたちでやります。ただ、一斉に始められるものでもないので、去年くらいからトライアルが始まっているというかんじです。</p>

<p><strong>白石</strong>：まず授業ができるのかが気になりますね。教える科目・内容は学校や先生任せだということですがそこは変わるんですか？</p>

<p><strong>利根川</strong>：最低限の基準はありますが、そこは変わらないですね。</p>

<p><strong>春日井</strong>：一応教育委員会の皆さんも、変えようとはしていますけどね。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00412.gif" alt="" width="640" height="427" class="alignnone size-full wp-image-25573" /></p>

<p><strong>白石</strong>：学習指導要領とかって全然わからないんですけど、一応ほかの理科、算数、社会などはここまでやろうよというのは決まっている？</p>

<p><strong>春日井</strong>：ざっくりしたガイダンスとかは決まってますね。</p>

<p><strong>白石</strong>：たとえば高校3年生の数Ⅲとかだったら微分積分といったところまではやろうとか。</p>

<p><strong>利根川</strong>：そういうのは決まってますね。小学校も算数・理科は教科書には書かれるので、多角形を書くのをプログラミングでやってみましょうとか。</p>

<p><strong>白石</strong>：でも今の話だと、教科書の内容もバラバラかもしれないと。</p>

<p><strong>利根川</strong>：中学校の技術課程くらいになると、あまり教科書は使われなくなるんですよね。副教材中心で、教科書は参考書くらいの扱いになっていくと思います。</p>

<p><strong>白石</strong>：「プログラミング教育はコーディングを覚えることが目的ではない」といった内容がブログで書かれて話題になってましたが、どう感じてますか？</p>

<p><strong>利根川</strong>：文科省としては、小学校段階からちゃんとプログラミングそのものを学習のターゲットにしようとしています。しかし小学校は全国で2万校あって、40万人の先生がいますが、そのほとんどの先生がITリテラシーが高いわけではありません。その状況から数年でプログラミングを教える環境にするのは無理なんですよね。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00462.gif" alt="" width="640" height="430" class="alignnone size-full wp-image-25580" /></p>

<p><strong>春日井</strong>：僕が小学生の時は書道やそろばんの塾や、授業で音楽・体育・技術とかやりましたけど、みんな音楽家や書道家になるわけじゃなくて、教養として必要だからやるというかんじでしたよね。</p>

<p>中には体育の授業でスケートを知って、冬季オリンピックを目指すことを決意した子もいるかも知れない。プログラミングもこれから必要になる教養、あるいは未来の可能性をひらくきっかけだと思っています。</p>

<p><strong>利根川</strong>：例えば環境問題って家庭科でも理科でも社会科でも、ごみ処理や温暖化などについてはいろんな教科をかいつまんで学ぼうというのは、少しでも興味を持ってもらうために文科省がよくやるやり方です。個人的にはもっとちゃんとやってほしいという思いはありますが、現実的な第一歩としてはしかたがないかもしれません。</p>

<p><strong>白石</strong>：でも、そのまま10年間変わらないというのは問題なのでは？</p>

<p><strong>利根川</strong>：そうなんです。そこが問題なんですよね。</p>

<p><strong>白石</strong>：IT人材を増やすという直接的な影響にはならなさそうですか？</p>

<p><strong>春日井</strong>：いわゆる第四次産業革命の人材を育てると国が打ち上げたので、そこに合わせて一つの指導要項が組まれたという背景はありますね。</p>

<p><strong>利根川</strong>：文部科学省・経済産業省・総務省、それぞれ動きはかなり違いますね。学校の授業の中で何を教えるのかは文部科学省、総務省は学外や部活や地域であったり、基礎スキルがある人をどうやって伸ばしていくか。経産省はグローバルに発展させるための人材の輩出だったり、このEduTechというものを産業にしていこうとか。文科省だけにとどまらない動きがあります。</p>

<p>学校教育、特に小学校中学校は職業教育じゃなくていろんなチャンスに気づくための機会。30～40代はプログラミングに触れたことがあるのは10％いるかいないかなんですが、この世代になると100％になるんですよね。やってみたら面白いとか伸びそうという子どもの母数が増えて、未来の仕事につながればいい。学校教育としては、そうした体験をしてもらう機会を作るというのが責務になります。</p>

<p>Life is Tech !のような塾・クラブ活動、CoderDojo（コーダー道場）みたいなコミュニティは、よりプログラミングをやりたいという子を伸ばすところ。学校教育にプロフェッショナルな体験を期待しすぎるのはちょっと筋が違います。</p>

<p>ただ政府としては第四次産業革命というムーブメントを起こし、この国をAIやIoTといったテクノロジーの力で、もう一度元気にしようという動きがあります。プログラミング必修化になったのも、ある種内閣内のバズワード、必修化するときの体制を第四次産業革命に生かすため。これらの取り組みで興味が出てきた子のスキルを伸ばし、価値を提供する側に育成するという動きが経産省でも出ています。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00431.jpg" alt="" width="640" height="415" class="alignnone size-full wp-image-25585" srcset="/wp-content/uploads/2018/04/DSC00431.jpg 640w, /wp-content/uploads/2018/04/DSC00431-300x195.jpg 300w, /wp-content/uploads/2018/04/DSC00431-207x134.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>社会はどう変わる？子どもたちにはどう教えればいい？</h2>

<p><strong>白石</strong>：最後は社会がどう変わるか、子どもたちにどう教えればいいんだろうというテーマについてお聞きしたいと思います。どうやったら楽しく効率よく教えることができるのでしょうか。</p>

<p><strong>春日井</strong>：白石さんは、今お子さんに何かやらせてるんですか？</p>

<p><strong>白石</strong>：うちの小4の息子はHour of Codeから始めました。でもHour of Codeはわりとさくさくできちゃって、次にスクラッチやらせてみたんですが、UIがイマイチいけてないかんじがして…（苦笑）。あとは「<a href="http://www.mext.go.jp/programin/app/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">プログラミン</a>」をずっとやってました。</p>

<p>最近はビジュアルプログラミング言語で、Minecraftを題材にPythonを教えてました。でも、その辺りから興味が失ってきちゃって。原因はいろいろあると思うのですが、まずプログラミングは多少英語を知ってないとできないんですよね。</p>

<p>例えば、英語でimportと言われてもまったく意味がわからない。すべてがおまじない。コマンドラインをたたかなくてはいけないんですが、そういう単調作業が面倒くさくなってしまってる。親が「やりなよ～」と言うと、逆に嫌になっちゃってる状況なんです。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00396.gif" alt="" width="640" height="427" class="alignnone size-full wp-image-25582" /></p>

<p><strong>利根川</strong>：そもそも白石さんの「教えよう」というのは、あまり筋がよくない気がします(笑)。基本的に「やりたい」と思ったときに、すっと出す方がいい。いわゆる従来の勉強が嫌いになるのと同じことをプログラミングでもやろうとしている。それであれば教えないほうがよくて、興味を持ったときに教えてあげたほうがいい。特に家庭では子どもに押し付けるとよいことがない気がします。</p>

<p><strong>水野</strong>：10歳以上になってくるとだんだん自我が芽生えてくるので、まずお父さんやお母さんがめちゃくちゃ楽しそうにやってることに食いつくんですね。それができないとしたら、僕はコミュニティだと思います。楽しく効率的に学べるかはコミュニティ。</p>

<p>子どもはその場の雰囲気やそこにいる人たちと学ぶことが楽しいとか、ライバルに負けたくないとか、コミュニティに所属することによって子どもたちは成長する。10歳以上になって自分たちが教えられないのなら、自我に任せつつ、そういうところに行かせたほうが伸びると思います。</p>

<p><strong>春日井</strong>：でも、白石さんみたいにPython書けるお父さんがいる家庭はなかなかないですよね。</p>

<p><strong>白石</strong>：子どもたちも楽しくやってたし、最初はやりたがってたんですけど、そこをどううまく育てていけばいいのかなって考えちゃうんですよね。</p>

<p><strong>水野</strong>：英語もそうですよね。5歳くらいのときは楽しかったけど、親が話せなくなると、だんだん楽しくなくなってくる。例えばインターナショナルスクールに行って友だちと毎日楽しく話していると、話せるようになるのと同じことだと思います。</p>

<p><strong>白石</strong>：ライフイズテックさんは子どもが「プログラミングをやりたい」って、参加するんですか？それとも親が「やってみたら？」と勧めて参加させてるかんじなんですか？</p>

<p><strong>水野</strong>：基本的には子どもたちが「やりたい」と言って参加してきてくれます。僕ら教育者の仕事は、子どもがやりたいって思ってくれるようなものを作る、HPの作りもそうだし、チラシもそうです。オリンピックで飛んでたドローンやPerfumeのプロジェクトマッピングみたいに、子どもたちに作ってみたいと思わせる欲求や、キャンプに参加してみたいというワクワク感を出させることが教育者側のやるべきことだと考えています。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00410.gif" alt="" width="640" height="427" class="alignnone size-full wp-image-25584" /></p>

<p><strong>白石</strong>：それは子どもたちに直接アプローチしないと、Life is Tech!のキャンプの情報は伝わらないと思うんですが、どうやってるんですか？親とかならいろんなメディアを見ていると思うんですけど。</p>

<p><strong>水野</strong>：学校でのクチコミや、友だちの紹介が多いです。先生も自分たちでは教えられないからと、学校単位でキャンプをやったりとか。マイクロソフトさんで、品川女子学院と聖光学院でコラボキャンプをやったこともあります。</p>

<p>親としてはマイクロソフトを見に行けるし、品女の子は共学の雰囲気を楽しめる。きっかけは何でも、結果的に興味を持ってくれればいいんですよね。</p>

<p><strong>春日井</strong>：マイクロソフトがMinecraftを教育用にカスタマイズしようとしたのはまさにそれで、子どもたちは興味を持たないとやらない。子どもはMinecraftが大好きなので、だったら教材にしましょうと。Excelでマクロ組んでみましょうっていう授業だったら、楽しくない。</p>

<p><strong>白石</strong>：でも、Education Editionは先生しか使えないとのことですが、一般家庭でやるにはどうしたらいいですか。</p>

<p><strong>春日井</strong>：最近は教育機関じゃないところでもできるようになってきました。ただMinecraftをパソコンで使う場合、Java版とWindows 10 Editionの2パターンあるんですね。</p>

<p><strong>白石</strong>：うちの息子はJava版ですね。</p>

<p><strong>春日井</strong>：Pokect Editionは、どんどん、Java版に近づいているのですが、その、Pocket EditionのWindows10版を「Minecraft Windows10 Edition」と言います。Windows10のストアから3,150円でダウンロードできるんですが、これは最初にお話したMakeCodeとつなげられるようになっています。<a href="https://minecraft.makecode.com/setup" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">Code Connectionという無償のツール</a>をインストールするだけなので、ぜひやってみて下さい。大人がやっても楽しいですよ。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00423.gif" alt="" width="640" height="427" class="alignnone size-full wp-image-25589" /></p>

<p><strong>白石</strong>：みんなのコードでは、プログラミング教材「<a href="https://proguru.jp/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">プログル</a>」というツールを作られているんですよね。</p>

<p><strong>利根川</strong>：プログルは小学校の算数の授業、主に小学校5年生を対象に、学校の先生が使うために作ったプログラミング教材です。多いときだと1日1000人くらいの児童が使ってくれていて、従来の多角形の学習よりは楽しいと思います。</p>

<p><strong>白石</strong>：2020年以降はが爆発的に全国の小学校で使われると。</p>

<p><strong>利根川</strong>：そうなるといいですね。うちでプログラミングをやるとしたら、スクラッチとかマイクラのほうが楽しいと思いますけど(笑)。</p>

<p>先生がちゃんと自分が楽しいと思って授業やクラブ、学校外でもやってくれればいいなと。プログルのホームページも学校の先生向けに作っています。</p>

<p><img src="/wp-content/uploads/2018/04/DSC00395.gif" alt="" width="640" height="427" class="alignnone size-full wp-image-25569" /></p>

<p><strong>白石</strong>：最後に本日のディスカッションを振り返って、ひと言お願いします。</p>

<p><strong>春日井</strong>：子どもの頃にピアノを習って、その後ピアノを弾くことが喜びになる人、音楽を聴くことが喜びになる人、音楽に全く興味が持てなかった人など、人それぞれだと思います。いずれにしろピアノを習うという体験をしなかったらわからなかったことですよね。</p>

<p>これからの社会を考えると、プログラミングもそういった機会が与えられるチャンスが増えていくと考えています。そのための支援や活動を続けていきたいと考えています。</p>

<p><strong>利根川</strong>：プログラミングを勉強することで、将来ITで価値を提供する仕事に就いたり、営業やマーケッターの仕事でも少し役立てることがあると思います。でも大事なのは、やってみて合うか、合わないと知ること。やったけど自分には合わないというのを早めに知ることはメリットになります。</p>

<p>一方で懸念しているのは、テクノロジーで豊かになっていく東京と、そうでない地方に国が分断されていくんじゃないかという危機感があります。そうならないように、テクノロジーの教育の場を全国に広めていきたいですね。</p>

<p><strong>水野</strong>：ライフイズテックは「テクノロジーを知っている」ということを普及させるために活動していますが、プログラミング教育の本質というのはクリエイティビティを伸ばすことだと考えています。業務を効率化させたり、論理的思考を身に付けたり、テクノロジーを進化させるためのツールを作るにもクリエイティビティが必要です。</p>

<p>クリエイティブ力を伸ばすための教育や施策は今後ますます重要になっていきます。本質となるクリエイティビティやコミュニケーションを大事にしながらやっていきたいと思います。</p>
]]></content:encoded>
		
		<series:name><![CDATA[Webの未来を語ろう 2018]]></series:name>
	</item>
		<item>
		<title>VR、AR、MR……各領域のプロフェッショナルが語るxR技術の最先端──Webの未来を語ろう 2018</title>
		<link>/tokutoku393/25205/</link>
		<pubDate>Mon, 19 Mar 2018 01:00:01 +0000</pubDate>
		<dc:creator><![CDATA[ちゃんとく]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[HoroLens]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mixed Reality]]></category>
		<category><![CDATA[VR]]></category>
		<category><![CDATA[WebVR]]></category>
		<category><![CDATA[WebXR]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[three.js]]></category>

		<guid isPermaLink="false">/?p=25205</guid>
		<description><![CDATA[連載： Webの未来を語ろう 2018 (2)こんにちは、dotstudioのちゃんとくです。HTML5Experts.jpでは、昨年に引き続き新春企画として「Webの未来を語ろう 2018」を開催することになりました！...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/future-of-web-2018/" class="series-496" title="Webの未来を語ろう 2018" data-wpel-link="internal">Webの未来を語ろう 2018</a> (2)</div><p>こんにちは、dotstudioのちゃんとくです。HTML5Experts.jpでは、昨年に引き続き新春企画として「<strong>Webの未来を語ろう 2018</strong>」を開催することになりました！</p>

<p><a href="https://html5experts.jp/yoshikawa_t/25150/" data-wpel-link="internal">ブラウザ編</a>に続く第2弾の今回は、2017年初頭のHoloLens発売に始まり、ARKit/ARCoreとスマートフォン対応の拡充、各地にVR Zone誕生と話題を集め、一挙にホットトピック入りした<strong>xR技術の現在と未来</strong>について。各領域のプロフェッショナルを招き、編集長の<a href="https://html5experts.jp/shumpei-shiraishi/" data-wpel-link="internal">白石</a>氏をMCに、さまざまな立場から意見交換を行っていただきました。</p>

<p>広がるxR領域の現状と課題、そして未来への期待について、なかなか聞けない学会話や開発事情など、たっぷりとお楽しみください！</p>

<p><img src="/wp-content/uploads/2018/03/main.jpeg" alt="" width="640" height="419" class="alignnone size-full wp-image-25369" srcset="/wp-content/uploads/2018/03/main.jpeg 640w, /wp-content/uploads/2018/03/main-300x196.jpeg 300w, /wp-content/uploads/2018/03/main-207x136.jpeg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>ゲスト紹介</h2>

<h3>諸星 一行氏（いっこう氏）</h3>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/ac6195dd-0797-4d6d-dab2-54229bb00067.jpeg" width="200" height="200" class="alignleft size-medium" /><strong>Mercari, Inc. R4D</strong><br />
株式会社メルカリの研究開発組織&#8221;R4D&#8221;でVR/AR/MR領域を担当するリサーチエンジニア。
業務の傍らで&#8221;xR Tech Tokyo&#8221;や&#8221;例のハッカソン&#8221;といった勉強会やハッカソンなどのコミュニティ運営を行なっている。日本バーチャルリアリティ学会認定VR技術者。</p>

<div style="clear:both"></div>

<p><br /></p>

<h3>前本 知志氏</h3>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/0dd4dbdc-2309-afad-1f64-53cac8f4b7ad.jpeg" width="200" height="199" class="alignleft size-medium" /><strong>株式会社ホロラボ</strong> / <strong>システムフレンド Co-founder（取締られ役 兼 取締役）</strong><br />
数年前よりモーションセンサーの面白さに取りつかれKINECTを趣味で触り始め、会社にXRや医療機器開発のチームができる。 
センサー系飲み会コミュニティTMCNや、HoloLensに特化した株式会社ホロラボの立ち上げメンバー。
米国MicrosoftよりMixedReality分野のMVPとして認められている。</p>

<div style="clear:both"></div>

<p><br /></p>

<h3>千葉 慎二氏</h3>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/e40d6dee-996f-606d-9818-3b2efa598c8c.jpeg" width="200" height="200" class="alignleft size-midium" /><strong>日本マイクロソフト株式会社</strong><br />
ハドソン中央研究所でゲームのベースシステム等を開発後、Microsoftに転職。ゲーム機向けWindows OSやXbox SDKの開発などを行う。
近年はKinect、HoloLensといった新技術を啓蒙し、研究者や学生向けの支援活動を担当。</p>

<div style="clear:both"></div>

<p><br /></p>

<h2>2017年に印象に残ったxR領域のトピックは？</h2>

<p><strong>白石:</strong> 皆さま、本日はお集まりいただきありがとうございます！まずは簡単に自己紹介と、2017年のxR界隈で1番印象に残ったことを教えてください。</p>

<p><strong>いっこう:</strong> こんにちは、メルカリのいっこうです。2017年のホットトピックは、<strong>MicrosoftがxR領域に本腰を入れてきたこと</strong>ですね。HoloLens、immersiveと、デバイスをいろいろと出してきたのが衝撃的でした。</p>

<p><strong>前本:</strong> 株式会社システムフレンドや株式会社ホロラボで取り締まられ役をしている前本です。僕にとっても、<strong>HoloLensが発売されたこと</strong>は大きな出来事でした。HoloLensが出たから、ホロラボという会社も<a href="http://holomagicians.azurewebsites.net/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HoloMagicians</a>というコミュニティもできましたし。HoloMagiciansでのHoloLens日本発売直後のイベントで、80人もの購入者が一同に集まってみんなで繋げたワクワク感はすごかったです。</p>

<p><strong>白石:</strong> 80人×約30万……2400万円……。お金の話になるとすぐ計算しちゃう（笑）。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/46be4ac3-fcc2-a15f-f370-af68ec4ba176.jpeg" alt="DSC09322.jpg" title="DSC09322.jpg" />
▲ 発売からわずか2週間後に80人が集ったHoloMagiciansミートアップ</p>

<p><strong>千葉:</strong> Microsoftの千葉です。もともとはハドソンというゲーム会社でゲームの根底となる部分のシステム開発をしていて、Microsoftに転職してからは16年くらいずっとXboxチームにいました。HoloLensはKinectから派生してできたところがあって、Xboxチームでは一部Kinectの開発にも携わっていたので<strong>私がHoloLensのプロトタイプを見たのは実はかなり前のこと</strong>なんですよね。その頃から開発を続けて、ようやく世に出てきたな、という感覚です。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/4d92caa6-242c-6072-36cb-cdb05cc3ecb3.jpeg" alt="DSC09334.jpg" title="DSC09334.jpg" />
▲ Xboxをローンチした人にだけ配られるというジャンパーを着た千葉氏</p>

<p><strong>前本:</strong> 千葉さんのことはKinect時代から尊敬しているんですよ！僕は当時からKinectで遊んでいて、それがどんどん進化してHoloLensの形になるのを目の当たりにして、感動です。</p>

<p><strong>千葉:</strong> お二人がHoloLensをトピックに挙げてくださったように、私にとっては<strong>多くの人にHoloLensを使っていただいている</strong>ということが2017年最も印象深いことです。それとMicrosoftに勤めながら、東京女子医科大学で学生としてHoloLensを使った医療の研究をしています。業務でも研究でもHoloLensを使っています。</p>

<p><strong>白石:</strong> えーっ、じゃあ千葉さんは女子大生？周りは女子ばっかりですか？</p>

<p><strong>千葉:</strong> 私がいるのは大学院なので、おじさんばかりですよ（笑）。</p>

<p><strong>白石:</strong> ちなみに私はHTML5Experts.jpの編集長と、<a href="https://techfeed.io/main/realtime/now" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">TechFeed</a>というエンジニア向けのキュレーションサイトを作っています。私自身はWeb領域の人間でxRについては素人なので、今日はバンバン質問させていただきます！</p>

<h2>VR/AR/MRとは何か？デモで見る各領域の現在</h2>

<h3>現実と仮想が複合するMRの世界観</h3>

<p><strong>白石:</strong> 2017年のホットトピックはお三方とも「HoloLens」に関することで一致しましたね。まずはMRについて、現在の様子を伺っていきたいと思います。</p>

<p><strong>千葉:</strong> まず伺ってみたいんですが、「Mixed Reality（MR）」という言葉について正しく理解している自信があるという方？</p>

<p>（会場、手が挙がらない）</p>

<p><strong>千葉:</strong> なかなかいないですよね。それが一つ、現状の課題なんです。簡単に言うと、MRは現実の世界と仮想の世界が融合しているという形です。どう融合するかにも、現実世界の中に仮想世界を入れ込むとか、逆に仮想世界に現実世界を入れ込むとか、いろいろな考え方があります。MRは、<strong>テレビの中に入り込んで、仮想のつくられた世界を見渡すことができ、そこから現実の世界も覗くことができる</strong>、というような考え方です。</p>

<p><strong>白石:</strong> <strong>仮想と現実がMixする</strong>、という意味合いなんですね。HoloLensのデモでは、現実世界をキャラクターが動いたり、現実の壁を割っていたり、というのを見ますが、それはどちらなんですか？</p>

<p><strong>前本:</strong> その捉え方は宗教論争に近いものがあるんですよ。</p>

<p><strong>いっこう:</strong> Microsoftさんの提唱するMRと、もともと日本バーチャルリアリティ学会が学問として20年以上研究している考え方とで違う部分があるんです「VimかEmacsか」という話に近いです（笑）。</p>

<p><strong>白石:</strong> あー、よくわかりました。それは大変だ（笑）。どういう部分でお互いに違うなと思っているんですか？</p>

<p><strong>千葉:</strong> デバイスを主体で見るか、現実世界を主体で見るかなど……考え方の違いですね。揉めているわけではなく、「そういう考え方もあるよね」という感じなんですが。</p>

<p><strong>白石:</strong> なるほど。話の抽象度が高まってきたので、HoloLensの現在がわかるデモがあるといいんですが。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/8de2e5a6-237c-051a-255c-189191a7e61d.png" alt="スクリーンショット 2018-02-12 22.07.34.png" title="スクリーンショット 2018-02-12 22.07.34.png" />
▲ DNP「AR/VR/MRを活用した体感型デジタルショールーム」（<a href="https://www.youtube.com/watch?v=TNi9cK-YfJY" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">動画リンク</a>）</p>

<p><strong>前本:</strong> これはHoroLensだけでなく他のデバイスや技術を組み合わせたデジタルコンテンツエキスポでの展示なんですが、<strong>シェアリング</strong>という技術を使って同じ空間を共有する仕組みです。</p>

<p><strong>白石:</strong> これはHoloLensと、スマートフォン？</p>

<p><strong>前本:</strong> そうです。HoloLensとGoogle Tangoの技術を使って、<strong>デバイス同士がお互いの位置を認識し、他の人が操作したことを他のデバイスでも検知できる</strong>ようになっています。「いま隣の人がこの商品をいいねした」とか、「この商品を買った」とか、デバイスを介して共有できる仕組みです。</p>

<p><strong>千葉:</strong> <strong>複数の人が同じ世界をそれぞれ見ることができる</strong>、というのがシェアリングですね。</p>

<p><strong>前本:</strong> 実はtoBの事例も増えてきて、製造業とかデザインの現場とかで活用が進んでいるんですよ。
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/52ac2d0d-18b4-af80-82f9-2b8d3e8922ac.png" alt="スクリーンショット 2018-02-12 22.21.22.png" title="スクリーンショット 2018-02-12 22.21.22.png" />
▲ ホロラボ「AR CAD Cloud」（<a href="https://www.youtube.com/watch?v=YkCALqPSO1E" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">動画リンク</a>）</p>

<p><strong>前本:</strong> AR CAD Cloudは、CADデータをHoloLensにダウンロードしてその場ですぐに見られるサービスです。<strong>モノを作る前に、作ったらどうなるかが確認できる時代</strong>になっています。</p>

<p><strong>千葉:</strong> <strong>日本で一番最初に業務にHoloLensを取り入れた事例は、日本航空さん</strong>ですね。1つはパイロットの訓練向け、もう1つは整備士の訓練向けシミュレーションです。飛行機は飛ばしていないと利益効率があがらないので実機での練習は難しく、シミュレータも好きな時に使えるわけではなかった。新人の方なんかは、机の上に印刷した紙を広げて手を置いて、ということをしていたらしいです。</p>

<p>VRでもいいんじゃないかと思うかもしれないですが、訓練では<strong>自分の手が認識できること</strong>が重要だそうで、外の世界をシースルーで見ることができるHoloLensが向いていたようです。</p>

<p><strong>白石:</strong> MRとVRは似たようなことができそうだけど、確実な違いがあるんですね。MRのいいところは「現実世界も見えている」というところですかね。</p>

<p><strong>千葉:</strong> そうですね。VRにも現実世界を取り込むことはできるんですが、結局カメラであって目で見る現実とは違うものなんですよね。</p>

<p><strong>白石:</strong> Windows MRというのがありますけど、どういうものなんですか？</p>

<p><strong>千葉:</strong> 最初のデバイスとしてHoloLensが発売されたんですが、やはりコンシューマー向けとしては高額じゃないですか。裾野を広げたいという意図で、Windows MRと名前を変えて、HoloLensはその一つということになりました。</p>

<p><strong>白石:</strong> HoloLensはハイエンドなWindows MR対応デバイスの一つ、というところでしょうか。</p>

<p><strong>千葉:</strong> 開発者視点でいうと、HoloLensの開発ノウハウでWindows MRが開発でき、逆も然りと。デバイスも複数社から出ていて、4〜5万円程度とそれほど高額ではないので手軽さは広がったかと思います。</p>

<h3>被るだけではないVRの領域</h3>

<p><strong>白石:</strong> 続いてVRについても伺っていきたいです。</p>

<p><strong>いっこう:</strong> 実はVRの歴史は長く、日本バーチャルリアリティ学会は25年ほど、研究分野としてのVRは50年ほど前からあります。ちなみに学会的にはVRを「仮想現実」と訳すのは少しNGで、<strong>アカデミア的には「人工現実感」を推していきたい</strong>です。……細かいんですが、一応（笑）</p>

<p><strong>白石:</strong> 訳にも違いが出るんですか。いまVRではどんなことが実現できるんですか？</p>

<p><strong>いっこう:</strong> バーチャルというのは「仮想」ではなく、「姿形はそのままだけど実際にはないもの」なんです。VRというとヘッドマウントディスプレイのイメージですが、実際には被らなくてもそこにあるという捉え方です。例えばドームスクリーンとか、匂い系のデバイスとかもVRですし、舌に電気を流して味を感じるのもVRです。<strong>頭に電気を流して、幼女にビンタされる感覚を味わうというのもVR</strong>です（笑）。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/46dbb860-4bec-d181-10e6-a28290a70bfa.jpeg" alt="DSC09309.jpg" title="DSC09309.jpg" /></p>

<p><strong>白石:</strong> 世界はそんなところまで行っているんですか（笑）！？</p>

<p><strong>いっこう:</strong> 開発者レベルなんですけどね。学術としてのVRとコミュニティのVRはやや溝があり、もう少しうまく繋がったらいいなと思っています。VRはMRに比べてデバイスが多いので、一般のガジェット好きが手軽に楽しめるのがいいところかなと思います。</p>

<p><strong>白石:</strong> 先ほどMRはシースルーなところが利点という話がありましたけど、VRの利点はやはり没入するというところですかね？</p>

<p><strong>いっこう:</strong> 被るタイプのものだと完全没入型というメリットは1つ大きいですね。あとは学会的な見方ですが、<strong>VRは「3C/3E」のための道具</strong>なんです。<strong>3CはCreation（創造）、Control（制御）、Communication（通信）</strong>。3Eは、<strong>Elucidation（解明）、Education（教育）、Entertainment（娯楽）</strong>です。</p>

<p>Control（制御）はいわゆるロボット制御だけでなく、例えば人が入れない原発などを遠隔で見る、というもVRの領域です。</p>

<p>Communication（通信）というと、最近だとVirtual YouTuber（VTuber）やVRChatが流行っていますよね。VTuberではキヅナアイちゃんがいて、去年くらいから他のVTuberがどんどん出てきてかなり盛り上がっています。アイちゃんを知っている人？</p>

<p>（会場、ほとんどが挙手）</p>

<p><strong>白石:</strong> VTuber、VR Chat、初耳です……！流行っているんですね。</p>

<p><strong>いっこう:</strong> アイちゃんに関しては既にかなり稼いでいて、スタイルとして確立しているかなと。加えて、最近は割と簡単にVTuberになれる仕組みが整ってきたと思います。ちょうど先日UnityとWindows MR（Lenovo Explorer）を使って、ほぼコードを書かずにVTuberになるという記事が上がっていました。</p>

<p>⇒ 参考: <a href="https://qiita.com/platoronical/items/754a4e3712574244ea96" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">windowsMRでバーチャル生放送をするためのセットアップ</a></p>

<p><strong>白石:</strong> これは、配信をする側がデバイスを被っているということなんですか？</p>

<p><strong>いっこう:</strong> そうです。鏡を置いて、ボイスチェンジャーを使って。最近はあえて声はおっさんのままというVTuberが流行っていますが（笑）。</p>

<p><strong>白石:</strong> うーん、すごいですね。VR Chatというのは？</p>

<p><strong>いっこう:</strong> VR Chatはここ最近でグッとユーザが伸びているんですが、セカンドライフのようなイメージで、自分のアバターを使ってワールドワイドにコミュニケーションできるものです。まだ高いんですが、一般人でも自分の身体を3Dスキャンしてアバターに使う人も出てきました。</p>

<p>⇒ 参考: <a href="http://panora.tokyo/51297/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">3Dスキャンした実写アバターで「VRオフ会」する猛者が登場　これもうオフかオンかわかんねぇな……</a></p>

<p><strong>白石:</strong> これはどうやって移動するんですか？実際に歩いて動く？</p>

<p><strong>いっこう:</strong> 手に持ったコントローラが紐付いて手の動きを自然に見せてくれ、足の動きは補完されます。</p>

<p><strong>白石:</strong> なるほど。3Eの方だとどのような具体例があるんでしょうか？</p>

<p><strong>いっこう:</strong> Entertainment（娯楽）ではVR ZoneやVR PARK TOKYOなどが流行っていますし、開発者もエンタメ系の用途で使っている人が多いですよね。HoloLensでもエンタメはできるんですけど、<strong>広く受けているのは没入感の違い</strong>かなと思います。</p>

<p><strong>千葉:</strong> 現実世界から離れたいこと、ありますもんね（笑）。</p>

<h3>各OS対応で盛り上がるAR領域</h3>

<p><strong>白石:</strong> AR領域でいうと、<strong>ARKit、ARCore</strong>がすごく盛り上がりましたよね。</p>

<p><strong>千葉:</strong> GoogleのハイエンドなARプラットホームTangoは終了が決まってしまいましたね……。後続でマス向けのARCoreが発表されました。</p>

<p><strong>いっこう:</strong> ARKitの方はアップデートで、これまで<strong>水平だけだったのが垂直も検出できる</strong>ようになり、できることが増えましたね。</p>

<p><strong>白石:</strong> スマートフォンの普及率からいうと、xRの中では一般普及するのはARが早いんでしょうか？</p>

<p><strong>千葉:</strong> 手軽に使えるという意味ではそうでしょうね。</p>

<p><strong>前本:</strong> <strong>VR、MRの課題は、手軽じゃない</strong>という部分がありますからね。買わないと、被らないといけない。最近のARはARKit/ARCoreの登場で、すごく現実感が出てきました。<strong>10cm動かすと10cm動くように精度が上がって、一つ上のステージに上がったな</strong>と思います。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/7fc22d6b-6815-f48e-f579-a285983006b3.png" alt="スクリーンショット 2018-02-13 0.45.58.png" title="スクリーンショット 2018-02-13 0.45.58.png" />
▲ AR World Sharing Demo（<a href="https://www.youtube.com/watch?v=4X6FxE7aSMs&amp;feature=youtu.be" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">動画リンク</a>）</p>

<p><strong>いっこう:</strong> Web技術の文脈では、WebVR、WebARが有用ですね。これまでアプリでしかARが実現できなかったのが、<strong>ブラウザがgetUserMediaに対応して、Webベースでカメラ情報を取得して実現できる</strong>ようになったのが大きいです。MozillaさんがWebVRとWebARを統合した<strong>WebXR</strong>を推していて、W3CではWebVRは既にAPIが用意されていますが、次のバージョンアップではWebXRにしようということになっています。</p>

<p>⇒ 参考: <a href="https://immersive-web.github.io/webxr/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WebXR Device API Specification</a></p>

<p><strong>いっこう:</strong> 簡単にVRアプリケーションを開発できる、WebVRフレームワークのA-Frameもかなり盛り上がっていて、コミュニティが成熟してきていますね。</p>

<p>⇒ 参考: <a href="https://aframe.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">A-Frame</a></p>

<h2>さらなる発展へ向けて技術的課題の解決が必要</h2>

<p><strong>白石:</strong> ここまではそれぞれの技術の現状を伺ってきましたが、さらなる進歩へのボトルネックや技術的な課題といった部分も聞いてみたいですね。</p>

<p><strong>千葉:</strong> <strong>デバイスの制約</strong>は一つ大きな課題ですね。例えばデバイスを被らないといけないし、デバイスの処理能力がそれほど高くないし、バッテリーの持ちの問題もある。VRでもバッテリーとは逆にケーブル接続の制約があるかと思います。</p>

<p><strong>白石:</strong> HoloLensって、実際には電池はどれくらい持つものですか？</p>

<p><strong>千葉:</strong> 通常の使い方だと3〜4時間、積極的に使っていると2時間ほどです。技術の進歩で、将来的には解決されていく課題だとは思いますが。</p>

<p><strong>白石:</strong> 逆に2012年頃に作っていたプロトタイプから考えるとどうですか？</p>

<p><strong>千葉:</strong> 当時はいろいろ剥き出しで、サイズも大きくケーブルも多く、<strong>本当に最終製品になるんだろうか？</strong>と不安でした。でもやっぱり技術の進歩があって、5年経ってわずか579グラムです。今の課題も5年後、10年後と解決されていくはずですね。</p>

<p><strong>前本:</strong> 2017年後半は開発環境の課題が多かったですね。HoloLensのアプリケーションはまずUnityで開発して、Visual Studioに書き出して、HoloLensにデプロイするという流れなんですが、それぞれのバージョンの違いで整合性が取れないようなことがあってかなりバッドノウハウが蓄積していました。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/4be0f7e1-ca5c-c2d8-5a1a-c58e0d4ef03f.jpeg" alt="DSC09318.jpg" title="DSC09318.jpg" /></p>

<p><strong>白石:</strong> 開発環境の問題があったんですね。</p>

<p><strong>前本:</strong> いまはだいぶ落ち着いて、初めての人でも開発しやすくなりました。発売当初に初めてHoloLensを触ったときは、こんなことが生きている間にあるんだ！と思ったのに、すぐに視野が狭いとか腕が疲れるとか、思うところがでてきて、終わりがないです（笑）。</p>

<p><strong>千葉:</strong> 本当ですよね。今から10年前を考えてみると、2017年にこんなデバイスがでていると想像できなかった。10年先は想像できないけど、たぶん10年後も満足していないと思います。人間の探究心って便利じゃないところを見つけてしまうので終わりはないけど、気がついたらみんな普通に使ってましたという感じになるんじゃないかと思っています。</p>

<h2>xRで盛り上がるビジネス領域</h2>

<p><strong>白石:</strong> xRの技術的な側面をたくさん聞かせてもらいましたが、実際にはxR界隈ではどういうビジネスが生まれているんでしょうか？</p>

<p><strong>いっこう:</strong> VRでいうと、アメリカのVR/AR専門ファンドの<a href="http://www.thevrfund.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">The Venture Reality Fund</a>が年に2回作成している<strong>VRカオスマップ</strong>が参考になります。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/7a1921d5-c872-6bd4-857e-78c0aa3dbdd9.jpeg" alt="vrf_vr_industry_q1_2017_v3-2.jpg" title="vrf_vr_industry_q1_2017_v3-2.jpg" />
▲ The Venture Reality FundによるVRカオスマップ</p>

<p><strong>いっこう:</strong> 機械、ソフト、ハードとだいぶプレイヤーが多くなっていると思います。その中で一部日本の企業も入っていて、健闘しているなあと思いますね。</p>

<p><strong>白石:</strong> 大カテゴリが「Applications/Content」「Tools/Platform」「Infrastructure」。ホロラボさんはアプリケーション領域ですよね。どういうお仕事がメインですか？儲かっていますか（笑）？</p>

<p><strong>前本:</strong> まあ、お陰様でぼちぼち……（笑）。受託で作る場合と、AR CAD Cloudのように自社パッケージとして作る場合とがあり、始めたばかりなのでなんでもアリ、という感じです。</p>

<p><strong>いっこう:</strong> ゲームカテゴリだとバンダイナムコさんが入っていますね。もともとが大きい会社ですけど、VR Zoneもかなり盛り上がっていますし、VR領域では日本で一番じゃないかなと思います。</p>

<p><strong>白石:</strong> Tools/Platformというと、去年Oculas Riftが値下げをしたじゃないですか。正直、売れてないのかな？と思ったのですが……。</p>

<p><strong>いっこう:</strong> 逆に、値下げをしたことでめちゃめちゃ売れたと思います。Windows MRも手頃な値段なので、結構売れているのではと思っています。</p>

<p><strong>千葉:</strong> そうですね、各社お互いの価格を意識しつつ値段をつけていると思います。</p>

<h2>xRでどうやって「URL」にアクセスするか</h2>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/e9d969f2-e8f9-e384-d6e4-99364dd4ddf5.jpeg" alt="DSC09342.jpg" title="DSC09342.jpg" /></p>

<p><strong>白石:</strong> 会場からも質問を受け付けてみたいと思うんですが、どうでしょうか？</p>

<p><strong>参加者:</strong> 現在のマウスとキーボードで扱うコンピュータのUIは、平面を前提にしているじゃないですか。xRのような3Dで見られるHPやメディアって、どういう形になっていくんでしょうか？例えばWebページにアクセスしたい時、URLの入力はどうするんだろうって想像がつかないんです。</p>

<p><strong>前本:</strong> 一つあるのは、<strong>リアリティがあるからといって、リアルと同じようにしないといけないと疲れる</strong>んですよね。マウスやキーボードのように、操作性を上げる入力装置があったほうがいいだろうと思います。</p>

<p><strong>いっこう:</strong> HoloLensってエアタップなど手を前に出して操作しますけど、結構腕が疲れるんですよね。VR空間の移動も、ワープ方式やコントローラを使う方式があるけど、あまりしっくり来ていなくてまだ確立していない。</p>

<p><strong>千葉:</strong> これまでのUIが生きる部分と、人間の通常の行動がそのままUIになる部分とあると思います。URLでいうと声を発したら文字になって適用されるというのも
いいかもしれない。</p>

<p><strong>いっこう:</strong> いろいろな方法を試していかないとなあというところですよね。</p>

<h2>2020年に向けた期待</h2>

<p><strong>白石:</strong> たっぷりと伺ったところで締めたいと思いますが、最後に2020年の少しだけ未来に、xRはどうなっているか想像や期待を伺わせてください。</p>

<p><strong>いっこう:</strong> 2年後かあ……。VRはハード面では一体型が出てきて、画質も上がって、さらに進歩すると思うんですけど、<strong>一般普及するのは正直まだまだかなあ</strong>と思っています。</p>

<p><strong>白石:</strong> どうしたら一般普及するんでしょうね？キラーコンテンツの登場？</p>

<p><strong>いっこう:</strong> Yahoo!BBがモデムを無料で配ってADSLが普及したように、<strong>国や機関が無料で配る</strong>くらいしないと普及しないんじゃないかと思います。</p>

<p><strong>白石:</strong> 無料で！確かにそうですね。前本さんはどうでしょう？</p>

<p><strong>前本:</strong> 現実的には通信が5Gになったり、視野が広がったりと、技術的な課題がクリアされていくと思います。期待でいうと、xRネイティブな世代が遊びとしてVRやARとAIを連携したりしていて、そういう<strong>遊びの中からすごいものが出てくるんじゃないか</strong>と密かに思っています。もしかしたら攻殻機動隊も実現するんじゃないかな。</p>

<p><strong>千葉:</strong> 技術的な進歩はもちろんですけど、私が期待したいのは「xR盛り上がっているぞ」という一体感ですね。<strong>熱量のある人が増えて、ビジネスも増えて、私自身この領域の仕事にもっともっと関われたらいいな</strong>と期待しています。</p>

<p><strong>白石:</strong> それぞれの熱いお気持ち、ありがとうございます。本日は大変勉強になりました！
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/7572978a-4f65-78e6-05b8-e912d050707f.jpeg" alt="DSC09343.jpg" title="DSC09343.jpg" /></p>
]]></content:encoded>
		
		<series:name><![CDATA[Webの未来を語ろう 2018]]></series:name>
	</item>
		<item>
		<title>Webの過去から現在・未来まで！エバンジェリストたちが語る、最先端Web技術の世界</title>
		<link>/yoshikawa_t/25150/</link>
		<pubDate>Fri, 16 Mar 2018 01:00:13 +0000</pubDate>
		<dc:creator><![CDATA[吉川 徹]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PWA]]></category>
		<category><![CDATA[Web Authentication]]></category>
		<category><![CDATA[Web Payments]]></category>
		<category><![CDATA[Web Share API]]></category>
		<category><![CDATA[WebAssembly]]></category>
		<category><![CDATA[WebVR]]></category>
		<category><![CDATA[WebXR]]></category>

		<guid isPermaLink="false">/?p=25150</guid>
		<description><![CDATA[連載： Webの未来を語ろう 2018 (1)HTML5 Experts.jp 副編集長兼エキスパートの吉川です。昨年好評だった「Webの未来を語ろう」企画を2018年もやります！ 今回はパネルディスカッション形式で、H...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/future-of-web-2018/" class="series-496" title="Webの未来を語ろう 2018" data-wpel-link="internal">Webの未来を語ろう 2018</a> (1)</div><p>HTML5 Experts.jp 副編集長兼エキスパートの吉川です。昨年好評だった「Webの未来を語ろう」企画を2018年もやります！</p>

<p>今回はパネルディスカッション形式で、HTML5 Experts.jp 編集長の<a href="https://html5experts.jp/shumpei-shiraishi/" data-wpel-link="internal">白石</a>が、ブラウザベンダーのGoogleのデベロッパーアドボケイトの<a href="https://html5experts.jp/agektmr/" data-wpel-link="internal">えーじさん</a>、 Microsoftのエバンジェリスト<a href="https://html5experts.jp/osamum_ms/" data-wpel-link="internal">物江さん</a>をお迎えして、興味深いお話を多数お聞きしました。</p>

<p>会場も交えたトークは、今後のWeb業界の動向を追いかける上で、重要な内容となっているので、ぜひ読んでみてください！</p>

<p><img src="/wp-content/uploads/2018/02/IMG_5426.jpg" alt="" width="640" height="447" class="alignnone size-full wp-image-25186" srcset="/wp-content/uploads/2018/02/IMG_5426.jpg 640w, /wp-content/uploads/2018/02/IMG_5426-300x210.jpg 300w, /wp-content/uploads/2018/02/IMG_5426-207x145.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>2017年のWebで印象に残ったことは？</h2>

<p><b>白石</b>: まずは簡単な自己紹介と、2017年のWebで印象に残ったことを教えてください。</p>

<p><b>えーじ</b>: えーじです。Googleでデベロッパーアドボケイトをしています。もともとは、Google Chromeのアドボケイトという位置付けでしたが、最近はもっと広くなって、Web全体のアドボケイトを担当しています。
特にChromeだけの話に限らず、Web全般について話をしていますね。これには、我々のチームの理想として、<strong>Webすべてに貢献していこう</strong>という想いがあります。</p>

<p>2017年で印象に残ったことは、<strong>SafariがService WorkerとPayment Requestに対応すると表明したことがすごく意義深い</strong>と思っています。</p>

<p><b>物江</b>: 物江と申します。Microsoftでエバンジェリストをしています。以前はWebに軸足を置いていたんですが、現在はWebだけに限らずISV(Individual Software Vendor)、独立してサービスや製品を提供しているパートナーさん向けに様々な技術の啓発を行なっています。Webについては、個人的なものも含めていろいろ活動しています。</p>

<p>2017年に印象に残ったことは、<strong>WebAssemblyやPWA（Progressive Web Apps）などについて、ブラウザベンダーがきちんと足並みを揃えて、仕様を策定するようになった</strong>ということですね。非常にいい流れになってきていると思います。</p>

<p><img src="/wp-content/uploads/2018/02/IMG_5445.jpg" alt="" width="640" height="447" class="alignnone size-full wp-image-25188" srcset="/wp-content/uploads/2018/02/IMG_5445.jpg 640w, /wp-content/uploads/2018/02/IMG_5445-300x210.jpg 300w, /wp-content/uploads/2018/02/IMG_5445-207x145.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 90%;">▲<strong>左から、日本マイクロソフト株式会社 物江修さん、Google デベロッパーアドボケイト えーじさん</strong></span></p>

<p><b>白石</b>: 皆さん、ありがとうございます。ついでに私の2017年で印象に残ったこともお話ししておくと、個人的には<a href="https://dev.to/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">dev.to</a>や日本経済新聞社の<a href="https://www.nikkei.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">日経電子版</a>が爆速だったという、そういう事例が出てきたのは印象的だったなと思います。裏側でHTML5やWebの最先端技術とか、そういったものを使って1段階上のレベルの速さを実現している。</p>

<p>Webプラットフォームベンダーやコミュニティの皆さんの啓蒙活動などもあって、PWAをはじめとしたWeb技術だとかパフォーマンスだとかが、ビジネス上も重要であるというところも浸透してきている。その結果として、Webプラットフォームの機能がフル活用されつつ、パフォーマンスというところに影響がでた良い例かなと。</p>

<p>今回は、Webの過去・現在・そして未来を語るという構成で進めてみたいと思います。</p>

<h2>イントロダクション:HTML5は世界を変えたのか？</h2>

<p><b>白石</b>: 2017年以前のWebを振り返ると、ブラウザ戦争などの分断化があって、そこからHTML5のムーブメントが起こり、Webの様々な仕様が生まれてブラウザに実装されました。</p>

<p>ただ、<strong>それら「HTML5」のムーブメントは世界を変えたんでしょうか？</strong>
これまであまり、そういう振り返りをしたことがなかったので、一度やってみたいなと思っていたんです。お二人はどうお考えですか？</p>

<p><b>物江</b>: そうですね、一般ユーザーの目からすると、確かにあまり変わっていないかもしれません。例えば、YouTubeのプレイヤーは、FlashからHTML5になりましたけど、変わったって気がつく人はあまりいませんよね。普通の人は、きっとまったく意識せずに使っている。HTML5でできたことは、とっくにFlashでもできていたわけで。</p>

<p>でも、開発者にとっては大きな変化がありましたよね。結局、開発者はみなHTML5を使っています。これはなぜかというと、HTML5がシンプルだからこそだと思うんですよ。</p>

<p>エキスパートの<a href="https://html5experts.jp/takehora/" data-wpel-link="internal">竹洞さん</a>がいいことを言っていたんですけど、Webが素晴らしく進化したのはKISSの原則(*1)のおかげといっていました。つまり、誰でも簡単に使えるからこそ普及した。わざわざFlashを使わなくても、Web標準技術だけを使えばいろんなことができるようになった。それによって作り手側の裾野が広がって、以前よりもリッチなコンテンツがたくさん出るようになってきたのかなと思います。</p>

<p>*1 … &#8220;Keep it simple, stupid&#8221; （シンプルにしておけ！この間抜け）、もしくは、&#8221;Keep it short and simple&#8221; （簡潔に単純にしておけ）という経験的な原則の略語。<a href="https://ja.wikipedia.org/wiki/KISS%E3%81%AE%E5%8E%9F%E5%89%87" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Wikipedia</a></p>

<p><img src="/wp-content/uploads/2018/02/IMG_5433.jpg" alt="" width="640" height="422" class="alignnone size-full wp-image-25189" srcset="/wp-content/uploads/2018/02/IMG_5433.jpg 640w, /wp-content/uploads/2018/02/IMG_5433-300x198.jpg 300w, /wp-content/uploads/2018/02/IMG_5433-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b>えーじ</b>: ぼくも、世界は変わったと思います。やっぱりHTML5でWebを変えようっていうムーブメントがあったこと、それ自体が良かったと思うんですよね。良い意味でのブラウザ間の競争が起きて、どんどん新しい提案がなされて、共通して使えるものがどんどん生まれていった。</p>

<p>ちゃんと数えたことないですが、HTML5の機能でみんな当たり前に使うようになったものっていっぱいあると思うんですよ。例えば、CSS3で角丸を使うっていうのももう当たり前にみんなやっているし、それが動かないブラウザはほぼ、ない。そういうものが当たり前に使えるようになったっていうのは、一昔前からすると全然状況は異なっている。そういう意味では、相当変わったと思います。</p>

<p><b>白石</b>: そういえば、元Mozilla Japanの浅井智也さんに以前教えてもらったんですが、Web関連技術を全部まとめた図があるんです。これ、曼荼羅図みたいな感じなので、「Web曼荼羅」なんて呼ばれているそうです(笑)。</p>

<p>HTML5とその関連技術（<a href="https://dynamis.github.io/webapi.link/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">webapi.link</a>）
<img src="/wp-content/uploads/2018/01/webtechnologies.jpg" alt="" width="640" height="360" class="aligncenter size-full wp-image-25159" srcset="/wp-content/uploads/2018/01/webtechnologies.jpg 640w, /wp-content/uploads/2018/01/webtechnologies-300x169.jpg 300w, /wp-content/uploads/2018/01/webtechnologies-207x116.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>こうして考えると、HTML5のムーブメントはたくさんのものを生み出しましたねえ。一般のユーザーからはあまり変わってないように見えても、「それは時間をかけて変わっているから」という面もありそうですね。</p>

<p><b>えーじ</b>: はい、そして、これだけのものがたくさん生み出された結果、Webはアプリケーションプラットフォームになった。それが、HTML5以前との大きな違いだと思いますね。</p>

<h2>Webは難しすぎる─Webプラットフォームの現状と課題</h2>

<p><b>白石</b>: では、iOSやAndroidといった他のプラットフォームとWebプラットフォームとを比較すると、Webはどういう立ち位置にあるとお考えですか？</p>

<p><b>物江</b>: Webプラットフォームは時間をかけてここまで成熟してきました。機能的な面では、他のプラットフォームにもひけをとらないというところまで来たんじゃないかと思います。</p>

<p>そして今、Progressive Web Apps (PWA)が浸透しつつあることが、今後のWebにとってはすごく意義のあることだと思っています。
<strong>PWAって、ある意味ひとつの理想の到達点だと思う</strong>んですよね。Javaなどが理想に掲げていた「Write Once, Run Anywhere」を、PWAは真の意味で実現するわけです。
これ、次のWindowsの大型アップデートでPWAがデスクトップアプリっぽく動いだり、Windowsストアからインストールできるように<a href="https://blogs.windows.com/msedgedev/2018/02/06/welcoming-progressive-web-apps-edge-windows-10/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">なる</a>から言っているわけじゃないですよ(笑)。</p>

<p><b>白石</b>: そこでいつも言われているのが、Webアプリって動作が遅いんじゃないかってことですよね。</p>

<p><img src="/wp-content/uploads/2018/02/DSC09045.jpg" alt="" width="640" height="408" class="alignnone size-full wp-image-25192" srcset="/wp-content/uploads/2018/02/DSC09045.jpg 640w, /wp-content/uploads/2018/02/DSC09045-300x191.jpg 300w, /wp-content/uploads/2018/02/DSC09045-207x132.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b>物江</b>: ただ、そうした問題についても、Webプラットフォームは長いこと取り組んでいて、もはやあまり問題にならないレベルじゃないかと思います。
ブラウザの実装という面でも、仕様の面でも、絶え間ない改善が続けられてきました。</p>

<p>仕様の面でそうした部分について期待できるのは、やはりWebAssemblyですね（筆者注: ブラウザが高速に実行可能な、ポータブルなバイナリ形式）。
昨年、モダンブラウザが同時にWebAssemblyのサポートを表明するということがありましたが、これでWebの速度はまた一段階アップすることが期待できます。</p>

<p>あとはやはりハードウェアの進歩が解決するものも多いでしょう。ちなみに、今のWeb技術の素晴らしいところは、ハードの性能に縛られた設計をしていないこと、どこでも同じWeb技術が動作することだとも思います。</p>

<p>例えば昔、貧弱だった携帯電話の機能に合わせた仕様で、HDMLやCHTMLというモバイル専門のタグがありましたが、今はもうほとんど残っていません。結局、性能に関わる問題は時間が解決してしまう部分も大きいんです。いま大切なことは、「いかに人間が作りやすいか、使いやすいか」が重要になってくるかなと思います。</p>

<p><b>えーじ</b>: ぼくも、パフォーマンス面は既にあまり課題とは考えていません。それよりぼくが課題だと感じているのは、開発者にとってのWeb技術はかなり複雑になってしまっていることです。</p>

<p>例えば「Extensible Web」というのを聞いたことがある方がいらっしゃると思います。これはWebの技術設計に対する、ここ数年における指針のようなもので、具体的には「標準としては、ユースケースを規定しない低レベル（低レイヤー）なAPIを提供する」というものです。</p>

<p>そうすることで、そうしたAPIを使用したハイレベルなライブラリだとかベストプラクティスが、開発者の手によって作られることを期待する。こうすることで、「ハイレベルだけど使われないAPI」が標準で規定されてしまうという問題を解決しようとしています。</p>

<p><img src="/wp-content/uploads/2018/02/DSC09086.jpg" alt="" width="640" height="423" class="alignnone size-full wp-image-25190" srcset="/wp-content/uploads/2018/02/DSC09086.jpg 640w, /wp-content/uploads/2018/02/DSC09086-300x198.jpg 300w, /wp-content/uploads/2018/02/DSC09086-207x137.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>ただ今は過渡期なので、低レベルなAPIがどんどん増え、ライブラリも量産されていて、はっきり言って混沌としています。例えばService Workerもすごく低レベルなAPIで、実際に使うとなるとなかなか難しい。</p>

<p>そこにGoogleが<a href="https://workboxjs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Workbox</a>というライブラリを出していたりするんですが、それを使うと簡単にServiceWorkerを使える一方で、ServiceWorkerもライブラリもどちらも学ばなくてはならない。</p>

<p>これがWeb Componentsなんかだと、仕様そのものがどんどん変わっていて、なかなか安定しない。<a href="https://www.polymer-project.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Polymer</a>というライブラリを使おうにも、Polymerも仕様に合わせてどんどん変わっている。どの時点の仕様が正しいのか、検索したときにどれが最新なのかわかりづらい。そういうところが複雑で、開発者はみな苦労してるんじゃないかなと思います。</p>

<p>個人的には、以前Webpackにやられたことがありまして(笑) 。将来的にはES Modulesが広まれば、そういうビルドプロセスを経なくてもうまく動くようになるんだと思うんですが、今は過渡期として、やっぱりGulpなりWebpackなりRollupなりを使う必要がある。</p>

<p>ビルドツールも次々に生まれるし、フレームワークもそう。フレームワークとビルドツール、様々なライブラリも組み合わせなくちゃならないし、ベストプラクティスが簡単にはわからない。その辺がかなり複雑になっているなと感じています。</p>

<h2>各ブラウザベンダーのこれからの動向は？</h2>

<p><b>白石</b>: 
皆さんご自身の会社の立場からお聞きしたいなと思うんですけど、ブラウザベンダー各社がどういう想いで、どういう方向を向いて実装しているのかをお聞かせください。</p>

<p><b>えーじ</b>: 
会社（Google）としての方向性はもちろんですが、チーム内でWebに関する課題を共有して、その解決策を探ることは普段から行っています。</p>

<p>例えば、先ほど挙がっていたパフォーマンスを例に挙げましょう。</p>

<p>実はJavaScriptのパフォーマンスって、もうあまり問題にならなくなっているんです。むしろ悪いのはレンダリングの部分で、そこを速くするための努力はずっと続けています。</p>

<p>あと、ネットワークの遅延もすごく大きい要因なので、ServiceWorkerみたいな仕様を提供することで、スピードの課題に開発者自身が取り組みやすくする。</p>

<p>さらに、パフォーマンスに関するベストプラクティスを開発者の皆さんと共有するのも重要です。</p>

<p>このように、課題一つとってもたくさんのアプローチがある。こういう活動を、チーム一丸となって同時に取り組んでいるという状態ですね。</p>

<p><img src="/wp-content/uploads/2018/02/IMG_5473.jpg" alt="" width="640" height="417" class="alignnone size-full wp-image-25194" srcset="/wp-content/uploads/2018/02/IMG_5473.jpg 640w, /wp-content/uploads/2018/02/IMG_5473-300x195.jpg 300w, /wp-content/uploads/2018/02/IMG_5473-207x135.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b>白石</b>: 
なるほど。ちなみにGoogleの中で、「今のWebはこういう課題があるね」みたいな、そういう話し合いっていうのはよくされるんですか？どんな議論がされてるのか興味があります。</p>

<p><b>えーじ</b>: 
はい、常にやってますね。世界中から集ってきた情報を、雑談ベースでやり取りするような感じです。</p>

<p>例えばこれからGoogleがインドでももっと使われるようにするためには、インドの市場を考えなきゃいけない。しかしインドは全然違う世界だと。</p>

<p>例えばネットワークにしても、今われわれが4Gは当たり前に使ってますけど、向こうの世界は2Gなんです。3Gですらない。なのに、何MBっていうファイルをダウンロードしないと見れないサイトっていうのはざらにあるわけですよ。そういったネットワーク環境の悪いところに対して、開発者の皆さんがサービスを提供しようと思った時にどうするのか。そういう課題がインドに進出しようと思っているチームから上がってきたりします。</p>

<p>他には例えば最近は、アクセシビリティにもかなり力を入れていたりもしますね。アクセシビリティに強く関心のある人たちがチームに入ったことで、Webのアクセシビリティをもっと良くするための話し合いや仕様の提案なども活発に行なっています。</p>

<p><b>物江</b>: 
Microsoft Edgeは、相互運用性とセキュリティ、アクセシビリティとパフォーマンスの4つが何においても優先されています。</p>

<p>例えば相互運用性でいうと、 <code>-webkit-text-stroke</code> というベンダープリフィックスがあります。これ、以前はWebKit系のブラウザでしか動かなかったんですが、現在はEdgeでも開発中なんです。多くのサイトで使われているような機能については、全部同じように動くようにするというのを優先的にやっています。</p>

<p>アクセシビリティに関しては、画面に表示されるすべてのテキストについて、スクリーンリーダーのような外部のプログラムを呼び出せるような仕組みが、WindowsにはOSレベルで入っています。それを使って、アクセシビリティを強化するような仕組みがEdgeに入っていたりしますね。</p>

<p>パフォーマンスについては、Chakra（EdgeのJavaScriptエンジン）のパフォーマンスアップを継続的に行っています。特に、こないだのアップデートでようやくブラウザ内部のリファクタリングが終わったようで、Edgeが出た頃からのパフォーマンスでいうと、3～4倍速くなってます。</p>

<p><img src="/wp-content/uploads/2018/02/IMG_5440.jpg" alt="" width="640" height="428" class="alignnone size-full wp-image-25195" srcset="/wp-content/uploads/2018/02/IMG_5440.jpg 640w, /wp-content/uploads/2018/02/IMG_5440-300x201.jpg 300w, /wp-content/uploads/2018/02/IMG_5440-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b>白石</b>: 
リファクタリングっていうのは、Internet Explorerから引きずっているコードがかなりあるのを書き直すって話ですよね。それが行われているって話はだいぶ前に聞いていましたが、ついに終わったんですね。</p>

<p><b>物江</b>: 
はい、ほぼ全部終わったんじゃないかと。もともとEdgeのレンダリングエンジンってTrident（IEのレンダリングエンジン）から派生したものなので、20年以上前のものということで、根っこの部分で仕様が古い部分があったんですよ。その修正がようやく終わったという感じです。これから先は、Edgeの開発はどんどん加速していくんじゃないかと期待しています。</p>

<p>あとは、やはり2000年代と比較すると、ユーザーの意見をより開発に取り入れようという姿勢が顕著になったかと思います。Windowsをお使いの方はわかると思うんですが、<a href="https://www.microsoft.com/ja-jp/store/p/%E3%83%95%E3%82%A3%E3%83%BC%E3%83%89%E3%83%90%E3%83%83%E3%82%AF-hub/9nblggh4r32n" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">フィードバックHub</a>というのがありまして、そこでバグの報告だとか、追加してほしい機能をリクエストできるんですよ。そのリクエストのベット数が多いと優先度があがっていって、対応されるというようになっています。</p>

<p><small></p>

<p>各種ブラウザのステータスが確認できるサイト</p>

<ul>
<li><a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/status/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Microsoft Edge</a></li>
<li><a href="https://www.chromestatus.com/features" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Chrome</a></li>
<li><a href="https://webkit.org/status/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Webkit</a></li>
</ul>

<p></small></p>

<h2>注目のWeb最新技術を一挙に解説！Web Payments、WebVR、AMP、PWA、WebAssembly&#8230;</h2>

<p><b>白石</b>: 
ではここからは、注目のWeb最新技術についていろいろお聞きしたいと思います。Web Payments、WebVR、AMP、PWA、WebAssemblyなどなど、仕様ごとに概要と現状をお話しください。</p>

<h3>Web Payments</h3>

<p><b>えーじ</b>: 
今までWebでお金を払うといったら、フォームを使ってクレジットカード番号を入れたりとか、どこかのサイトに飛んで、そこのサイトにあらかじめ保存してある支払い情報を使うといったことがほとんどだったと思います。Web Paymentsを使うと、ブラウザがネイティブで表示してくれるUIを使って支払いができるようになるというのが大きな特徴ですね。ちょっと見てもらうと、<a href="https://polykart.store/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">PolyCart</a>というWeb Paymentsのデモサイトで確認することができます。</p>

<p><strong>Web Paymentsのデモサイト（PolyCart）</strong>
<img src="/wp-content/uploads/2018/01/a6667251245e38bfbcf2b1aaac09926a.png" alt="" width="640" height="521" class="aligncenter size-full wp-image-25171" srcset="/wp-content/uploads/2018/01/a6667251245e38bfbcf2b1aaac09926a.png 640w, /wp-content/uploads/2018/01/a6667251245e38bfbcf2b1aaac09926a-300x244.png 300w, /wp-content/uploads/2018/01/a6667251245e38bfbcf2b1aaac09926a-207x169.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>ブラウザネイティブのUIを通じてクレジットカードの情報や、配送先、連絡先などの入力を促すことができます。そうして入力された情報はブラウザが記憶してくれるので、次からはクリックするだけで支払い情報を入力することができます。</p>

<p>もっとすごいのは、将来的には支払い方法を追加できるようになるんです。例えば、Apple PayやGoogle Payで支払うのも可能ですし、仮想通貨なども使えるようになるでしょう。</p>

<h3>WebVR</h3>

<p><b>物江</b>: 
以前から、「Web上でVRコンテンツを表示する」っていうのは、Three.jsなどを使って実現が可能でした。ではWebVRは何が違うかというとVRデバイスからのフィードバックを受けることができるんです。これによって、VRデバイスと深く連動したWebサイトを作ることができます。</p>

<p>それにWindows10だと、ネイティブでVRの環境をサポートしていて、WebVRに対応したWebサイトにいくと、自動的にVRゴーグル上で全画面表示してくれるようになっています。VRのビデオもそのまま見ることができるので、真の意味でシームレスにVRのコンテンツが提供できるようになっています。</p>

<p>個人的に楽しみなのは、VRをきっかけとして新しいUIが生まれてくることですね。既存のVRゴーグルを使ったことがある人はわかると思うんですけど、キーボードもマウスも何も使えないんです。そうすると新しいUIを考える必要があって、そこに新しい可能性を感じています。</p>

<p><b>えーじ</b>: 
ちなみに最近は<a href="https://github.com/mozilla/webxr-api" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WebXR</a>っていうらしいですね。VR、AR、MRをコンセプトに入れた仕様を作ろうとしているという動きもありますね。</p>

<h3>AMP</h3>

<p><b>白石</b>: 
次はAMPですが、これについては既にたくさんの方がご存知でしょうから、簡潔に。主にモバイル環境で、Webページを素早く表示できるようにするための、HTMLのサブセットですね。</p>

<p><b>えーじ</b>: 
AMPの仕様自体もさることながら、AMPが基本的にWeb Componentsでできているのは興味深いです。Web Componentsの仕組みを使って独自のエレメントを定義していて、なおかつパフォーマンスも追求しているので、結果としてパフォーマンスのベストプラクティスの塊をWeb Components化したものになっている。大変面白いと思います。</p>

<h3>Progressive Web Apps</h3>

<p><b>白石</b>:
次は、恐らく今年最大の注目キーワードProgressive Web Appsですね。これは（ずっと啓蒙してきた）えーじさんに語っていただくしかないでしょう。</p>

<p><b>えーじ</b>: 
はい。とはいえPWAという言葉自体は、皆さんに意識してもらいやすくするためのマーケティング用語のようなもので、技術的な観点からはそれ自体意味がないと思っています。実際の中身はService WorkerだったりとかPush Notificationだったりとかそういう具体的な機能やAPIから構成されています。</p>

<p>日本でも、昨年後半くらいからPWAが注目されはじめました。さっきのdev.toとか日経電子版とかも、PWAの構成要素を利用することで高速化が実現できたと。PWAの中のひとつひとつの技術要素をうまく使うとここまで速くできるんだよ、といういい例ができたなと思っています。</p>

<p><img src="/wp-content/uploads/2018/02/DSC09088.jpg" alt="" width="640" height="412" class="alignnone size-full wp-image-25196" srcset="/wp-content/uploads/2018/02/DSC09088.jpg 640w, /wp-content/uploads/2018/02/DSC09088-300x193.jpg 300w, /wp-content/uploads/2018/02/DSC09088-207x133.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b>白石</b>: 
ちなみに、個人的にはPWAっていまいち意味がわからないな、と思ってて。なにが「プログレッシブ」なんでしょうか？プログレッシブって、「だんだん（進化する）」って意味ですよね。</p>

<p><b>えーじ</b>: 
PWAにおける「プログレッシブ」には2つ意味があります。</p>

<p>1つは昔から言われているプログレッシブ・エンハンスメントです。古いブラウザでも見ることができる基本的なWebサイトをまずは作って、そこに、新しいブラウザで使える機能を足していくという考え方。そうすれば、クライアントの環境を最大限活かすことができます。</p>

<p><b>白石</b>: 
では、Service Workerが使えるブラウザだったらオフラインという機能が使えるけど、そういう機能が使えないブラウザにも同等のものを提供する。既存のサイトにあとからその機能を提供することも割と簡単にできますよっていうそういう思いを込めたものということですね。</p>

<p><b>えーじ</b>: そうです。もう1つが、今あるサイトに機能を付け加えていくことで、徐々にPWAに近づけていけるという意味です。PWAのためにサイトを一から作り直すとか、大幅な改修を行う必要はない。既存のサイトを徐々に拡張していけばいいんです。</p>

<p><b>白石</b>: 
なるほど、そういう意味合いだったんですね。ちなみにPWAの中では、Service Workerが代表的なAPIですよね。他には<a href="https://developers.google.com/web/fundamentals/web-app-manifest/?hl=ja" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web App Manifest</a>とか、<a href="https://developers.google.com/web/fundamentals/codelabs/push-notifications/?hl=ja" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Push Notification</a>とかでしょうか。</p>

<p><b>えーじ</b>: 
そうですね。ちなみに、PWAのウリの一つに、OSのホーム画面にアイコンを追加できるというのがあるんですが、以前はただのWebアプリへのショートカットでした。でも今は違います。PWAをホーム画面に置く際、アプリのパッケージを動的に生成してインストールするので、OS上の扱いはネイティブアプリとほとんど変わりないんです。なので、プッシュ通知のオン／オフをアプリごとに設定できたり、ネイティブアプリでしかできなかったことがPWAでも同様に行えます。</p>

<h3>WebAssembly</h3>

<p><b>白石</b>: 
次はWebAssembly、物江さんご説明お願いします。</p>

<p><b>物江</b>: 
WebAssemblyは、Webブラウザ上で非常に高速に動作させることができる、デバイスに依存しないバイナリ形式です。現在は用途がある程度限られていて、DOMを操作することなどはできませんが、CPU依存の計算処理などは極めて高速に動作させることができます。
<a href="https://developer.mozilla.org/ja/docs/Mozilla/Projects/Emscripten" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Emscripten</a>などのツールを使うと、C/C++で作られたものをWebAssemblyに変換できるので、C/C++で書かれたゲームなどをWebAssemblyに移植することも比較的容易です。また現在はまだ開発中ではありますが、MonoがC#からWebAssemblyをコンパイルする<a href="https://github.com/lrz/mono-wasm" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">mono-wasm</a>であったり、マイクロソフトも実験プロジェクトとしてWebAssemblyを介してWebブラウザー上でC#とRazorを走らせるWeb UI framework  <a href="https://blogs.msdn.microsoft.com/webdev/2018/02/06/blazor-experimental-project/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Blazor</a>を開発していたりします。</p>

<p><img src="/wp-content/uploads/2018/02/IMG_5499.jpg" alt="" width="640" height="387" class="alignnone size-full wp-image-25198" srcset="/wp-content/uploads/2018/02/IMG_5499.jpg 640w, /wp-content/uploads/2018/02/IMG_5499-300x181.jpg 300w, /wp-content/uploads/2018/02/IMG_5499-207x125.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>（ここで会場からエキスパートである<a href="https://html5experts.jp/technohippy/" data-wpel-link="internal">あんどうやすしさん</a>から質問）</p>

<p><b>あんどうやすし</b>: 
現在のWebAssemblyって結局計算することしかできないじゃないですか、DOMもいじれないし、JavaScriptのAPI呼び出しも直接は行えない。今後もそれは変わらないんでしょうか。特にデータの渡し方に結構制限があって、使い勝手がいいものにするには難しいなと感じています。SharedArrayBufferという仕組みで一次元配列の共有はありますが、それも使いづらいし…。</p>

<p><b>物江</b>: 
それは、今の段階ではまだなんとも言えないですね。</p>

<p><b>えーじ</b>: 
ちなみにSharedArrayBufferはこないだのメルトダウンとスペクター(*2)の影響で機能が停止になります。</p>

<p><b>白石</b>: 
ありゃ、まさかそんなところにまで影響及ぶとは…(笑)。</p>

<p>*2 … CPUでの投機的実行という高速化プロセスを悪用した脆弱性</p>

<h3>Web Share API</h3>

<p><b>白石</b>: 
他には、注目のAPIとかはありますか？</p>

<p><b>えーじ</b>: 
最近追加されようとしている新しい機能に<a href="https://developers.google.com/web/updates/2016/09/navigator-share" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web Share API</a>というのがあります。</p>

<p>Androidのインテントをご存知の方だったらすぐ分かる機能ですが、例えばあるサイトを「FacebookやTwitterでシェアしたい」という場合に、Web Share APIを使うと簡単に外部アプリを呼び出すことができます。</p>

<p>逆に、自身のWebアプリを「シェアする先のアプリ」として使ってもらうようにすることもできます。それが<a href="https://github.com/WICG/web-share-target" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web Share Target API</a>というものです。</p>

<p>Web Share APIは既に使えるんですが、Web Share Target APIは、現在限られたサービスにしか開放されていません。このように、Chrome では一部のドメインに先行してWebプラットフォームの機能を試してもらうオリジントライアルというものをやっているのですが、現在TwitterのモバイルサイトがWeb Share Target APIを使えるようになっています。<a href="https://mobile.twitter.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">mobile.twitter.com</a>で実際に試すことができますので、TwitterのPWAをまだ試したことがない方は、AndroidのChrome betaチャネルか、devチャネルを使ってインストールしてみてください。何かシェアしようとしたときに、TwitterのPWAが候補として出てきます。</p>

<h3>Web Authentication</h3>

<p><b>白石</b>: 
Web Authenticationというのもあると聞きました。</p>

<p><b>えーじ</b>: 
Web Authenticationは、実はEdgeでもう使えるんです。仕様がちょっと古いので、APIが全く異なりますが、<a href="https://github.com/MicrosoftEdge/webauthn-polyfill/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Polyfill</a>もあります。Web Authenticationをひとことでいうと、セキュリティキーなどを用いた多要素認証を標準技術で扱えるようにするものです。顔認証や指紋認証と組み合わせれば、安全性の高いログインの敷居はぐっと下がると思います。</p>

<p><b>物江</b>: 
<a href="https://fidoalliance.org/?lang=ja" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">FIDO Alliance</a>という標準化団体があるんですけど、そこで生体認証などのもっと広い話をしています。既にWindowsだとWindows Helloという生体認証の仕組みがFIDOの標準で作られていますね。</p>

<p><b>えーじ</b>: 
FIDOのWeb版がWeb Authenticationになるわけです。Web Authenticationの実装はこれからどんどん出てくるでしょう。Mozillaさんもこないだ実装を開始しましたし、Chromeもそろそろ入ってくるのかなと思います。</p>

<p><b>白石</b>: 
そうすると、もしかしたら今年はWebサイトで指紋認証とか顔認証とかが一般的になってくるという可能性があるってことですかね。</p>

<p><b>えーじ</b>: 
そうですね。どの認証方式を使えるようにするかっていうのは、順番に1つずつ入れていくという話らしいので、まずはセキュリティーキーから利用できるようになって、そのうちNFC、指紋認証ができるようになっていくようです。徐々にそういったものが実装されていけば、本当にパスワードを覚えなくてもいい世界っていうのが実現できるかもしれないので、すごく楽しみにしています。</p>

<p>ちなみに、<a href="https://developers.google.com/web/fundamentals/security/credential-management/?hl=ja" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Credential Management API</a>というIDとパスワード、いわゆる共通鍵認証をする仕様があるんですが、それとAPIのネームスペースが同じになるので、共通のAPIを使うことになります。まったく別々だった仕様が一緒になるというのも個人的には面白いと感じています。</p>

<p><img src="/wp-content/uploads/2018/02/IMG_5443.jpg" alt="" width="640" height="413" class="alignnone size-full wp-image-25199" srcset="/wp-content/uploads/2018/02/IMG_5443.jpg 640w, /wp-content/uploads/2018/02/IMG_5443-300x194.jpg 300w, /wp-content/uploads/2018/02/IMG_5443-207x134.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>エキスパートたちが見据えるWebの未来について</h2>

<p><b>白石</b>: 
最後にWebの今後について感じていることをお聞かせください。</p>

<p><b>えーじ</b>: 
ぼくらブラウザベンダーは、「こうなるといいな」というものをいろいろ作ってるんですけど、それはブラウザベンダーが勝手にやってるわけじゃなくて、開発者の皆さんの声とか、こういうWebがいいという声をもとにやっているので、フィードバックをできるだけいただいたほうが、より皆さんの理想としているWebができると思っています。</p>

<p>フィードバック方法にも今はいろいろあって、GitHub上で管理されている仕様にIssueを立てるっていうのも一つの方法ですし、一番簡単な方法です。それすらめんどくさいということであれば、ぼくに直接言っていただくとかでも構いません(笑)。そんな感じで、開発者の皆さんと一緒にWebを盛り上げていけたらいいなと思います。</p>

<p><b>物江</b>: 
個人的な思いとしては、今非常にWebって良い方向に進んでいると思っています。（お互いを傷つけ合うような）ブラウザ戦争は終わりました。今は良い意味でお互いに競争し合ったり、歩調を合わせてWebを良いものにしていこうという動きが主流になりつつ会って、とても好ましく感じています。今後もそれが続いていって、Webのテクノロジーの活用範囲が広がればいいなと思っています。</p>

<p><b>白石</b>: 
皆さん、本日は様々なお話をお聞かせいただき、ありがとうございました！</p>
]]></content:encoded>
		
		<series:name><![CDATA[Webの未来を語ろう 2018]]></series:name>
	</item>
		<item>
		<title>de:codeで澤円さんが伝えたかった「エンジニアに必要なマネジメント」の真意とは？</title>
		<link>/miyuki-baba/23726/</link>
		<pubDate>Wed, 14 Jun 2017 01:30:27 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[de:code]]></category>
		<category><![CDATA[マネジメント]]></category>
		<category><![CDATA[澤円]]></category>

		<guid isPermaLink="false">/?p=23726</guid>
		<description><![CDATA[連載： de:code 2017 特集 (4)5月23・24日の二日間に渡って開催された日本マイクロソフトの開発者向けカンファレンス「de:code 2017」。その中でも定員数をはるかにオーバーし、入場規制もかかった澤...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/ms-decode2017/" class="series-449" title="de:code 2017 特集" data-wpel-link="internal">de:code 2017 特集</a> (4)</div><p>5月23・24日の二日間に渡って開催された日本マイクロソフトの開発者向けカンファレンス「de:code 2017」。その中でも定員数をはるかにオーバーし、入場規制もかかった澤円さんのセッション「これからのエンジニアに必要な『マネジメント』の考え方」が興味深かったので、レポートしたいと思います。</p>

<p><img src="/wp-content/uploads/2017/06/DSC01357.jpg" alt="" width="640" height="410" class="alignnone size-full wp-image-23730" srcset="/wp-content/uploads/2017/06/DSC01357.jpg 640w, /wp-content/uploads/2017/06/DSC01357-300x192.jpg 300w, /wp-content/uploads/2017/06/DSC01357-207x133.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>マネジメントは「管理職」のことだけはない</h2>

<p>エンジニアの世界では日常茶飯事で交わされている以下のセリフ。皆さんも聞き覚えがありませんか？</p>

<p><span style="font-size: 120%;">「<strong>これさ、なるはやでチャチャっと作ってよ</strong>」</span></p>

<p><span style="font-size: 120%;">「<strong>とりあえずいい感じに仕上げといて</strong>」</span></p>

<p><span style="font-size: 120%;">「<strong>なんかこれ、あんまり動かないよ</strong>」</span></p>

<p>実はこれ、澤さんいわく「<strong>マネジメントが欠けている状態</strong>」なのだとか。どんなマネジメントが欠けているのかというと…、</p>

<ul>
<li><span style="font-size: 120%;"><strong>なるはやでチャチャっと　→　スケジュールマネジメント</strong></span></li>
<li><span style="font-size: 120%;"><strong>とりあえずいい感じに　→　クオリティマネジメント</strong></span></li>
<li><span style="font-size: 120%;"><strong>あんまり動かない　→　リスクマネジメント</strong></span></li>
</ul>

<p>このように全ての出来事にはマネジメントがからんでいます。</p>

<p>マネジメントという言葉からは人事管理や人事評価といった「管理職」をイメージしがちですが、必ずしもそれだけではありません。仕事をする全ての人は、上記のようになんらかの形でマネジメントを「する側」の人であるのです。こうした<strong>マネジメントをきちんと意識して仕事をすることが「エンジニアを救う」</strong>のだと澤さんは言います。</p>

<p>マネジメントという言葉は、もしドラ（※もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら）でピーター・F・ドラッカー氏とともにメジャーになりましたが、セッションではそのドラッガーの名言として澤さんが紹介したのがこちら。</p>

<p><img src="/wp-content/uploads/2017/06/FireShot-02.jpg" alt="" width="640" height="356" class="alignnone size-full wp-image-23747" srcset="/wp-content/uploads/2017/06/FireShot-02.jpg 640w, /wp-content/uploads/2017/06/FireShot-02-300x167.jpg 300w, /wp-content/uploads/2017/06/FireShot-02-207x115.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>テクノロジーで生活は便利になる。効率化するツールが出てくることによって、幸せになることもあれば、逆に振り回されることもある。ある人に都合のいいことは、ある人には都合が悪い場合もある。それは全てのマネジメントは常に「人」にあるからであり、エンジニアも結局は「人」だから。</p>

<p>「テクノロジーは人を幸せにするし、人の生活を豊かにするために存在するものですが、『Visual Studioはこういうことができます』『Windows 10にはこういう機能があります』というように、技術や製品の機能に人を合わせて説明してしまうと、だいたいうまくいかなくなります。主役は人であることを常に意識し、ユーザーサイドに立ち、主語を人にして人の立場をメインに話すとわかりやすくなります。そのために大事になってくるのは、最終的にはコミュニケーションです」</p>

<p>では、コミュニケーションをうまくするにはどうしたらいいのでしょうか。</p>

<p><span style="font-size: 120%;"><strong>「ここの色を変えて」「画面遷移を逆にしといて」</strong></span></p>

<p>要求する側にしたら簡単にできそうに思えますが、その作業の裏側には数えきれないメソッドや作業が潜んでいたりします。なぜそう誤解してしまうのかというと、要求する側は自分の都合のいい状態で頭の中でイメージしてしまうからなのです。</p>

<p>「それを防ぐには、何が問題なのか、何が原因なのか、何がどう見えているのかを理解し、言語化して伝えることで、お互いの合意にもっていかなくてはいけません。しかし、日本人はそうしたマネジメントが根付いていません。どちらかと言えば、曖昧なコミュニケーションを好む傾向があります」</p>

<p>コンピュータの世界は、0と1のみ。「なる早でちゃちゃっと」では通じません。エンジニアがコーディングするとなれば、明確な仕様、要件定義が必要です。それを伝えるためにはわかりやすい言葉に置き換える必要があるのです。</p>

<h2>シリコンバレーは“マインドセット”の聖地</h2>

<p>ここで澤さんは、シリコンバレーに在住する友人の言葉を紹介。</p>

<p><img src="/wp-content/uploads/2017/06/FireShot-03.jpg" alt="" width="640" height="355" class="alignnone size-full wp-image-23753" srcset="/wp-content/uploads/2017/06/FireShot-03.jpg 640w, /wp-content/uploads/2017/06/FireShot-03-300x166.jpg 300w, /wp-content/uploads/2017/06/FireShot-03-207x115.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>「シリコンバレーは地名ではなく、マインドセット。マインドセットは空気を共有するのに必要不可欠」だという友人の言葉に、澤さんはすごく腹落ちしたそうです。</p>

<p>時間と空間を共有できる価値、カッティングエッジとパッション、優秀な頭脳はもちろんですが、マインドセットが共有されている場がシリコンバレーなのだと。</p>

<p>そして、このマインドセットが輸出され、最も息づいているところはインドだといいます。ただ勉強や仕事をして帰ってくるだけではなく、マインドセットを吸収し、帰国して起業する人が増え、インドはシリコンバレー化しているのだそうです。</p>

<p>「インド人は成長力が高くて問題解決能力が抜群であり、GoogleやMicrosoftをはじめとするグローバル企業でもインド人の優れた経営者が数多くいることがそれを証明しています」</p>

<h2>当事者全員が「理解できる」のがマネジメント</h2>

<p>実際にMicrosoftではどのように開発フローが進められているのか、マイクロソフトディべロプメントのトップ・安達理社長にヒアリングした話を紹介してくれました。</p>

<h3>１）カスタマープロミス</h3>

<p>まず最初に行うのは、<strong>カスタマーに対してどんな約束ができるのか、全員で合意</strong>すること。全員というところが大事　合意しないことに対して何かすると必ずエラーになる。</p>

<h3>２）シナリオプランニング</h3>

<p>具体的にどんなシーンでどんな使い方をするのかなどを考えてプランニングする。例えば「最高のエクスペリエンスとエンターテインメント機能を持つコンピュータを提供する」としたら、どんなシーンで使うのかといったことをペルソナを作りながら考えていく。</p>

<h3>３）デリバラブル定義</h3>

<p>実現できるかどうか　デリバリできるかどうかを検討する。</p>

<h3>４）タスク設定</h3>

<p>誰が何を担当するかを決めてタスク設定し、アジャイルで開発していく。</p>

<p>ポイントは、上の人が決めたことに対して言われた通りに開発するのではなく、みんなで合意して作っていくということ。実際の作業はこのように細分化されて開発が進んでいくといいます。</p>

<p><img src="/wp-content/uploads/2017/06/FireShot-04.jpg" alt="" width="640" height="352" class="alignnone size-full wp-image-23758" srcset="/wp-content/uploads/2017/06/FireShot-04.jpg 640w, /wp-content/uploads/2017/06/FireShot-04-300x165.jpg 300w, /wp-content/uploads/2017/06/FireShot-04-207x114.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>それぞれのタスクにはKPIが設定され、責任範囲や実行状況などを判断していきます。このKPI設定とタスク設定がきちんとしていないとプロジェクトはうまくいかないと澤さんは言い切ります。</p>

<p>「タスクは降ってくるものだという意識でいると仕事はできません。自分たちで定義して作っていくもの、権利だと考えるべきです。不得意なことは人に任せるという手もあるが、タスクを自分で定義することが大事。イノベーションは言われたことをやっているだけでは絶対に生まれません。それができていないのなら、提言してみる。それでも変わらないと思うのなら転職をしほうがいいくらい重要な権利なのです」</p>

<p>ちなみに、Microsoftではオーナーシップという言葉がよく使われるそうです。タスク設定した人がオーナーでボスで、責任はその人にある。だからオーナーシップをとるという考え方。案件を作った瞬間にその人は一番偉い立場となり、社内はリソース化します。たとえ社長であってもリソースの一部なので、必要であれば社長を動かすこともできるのだとか。</p>

<p>ただし、全てのボスには説明責任があります。構築までのステップから改変作業まで可視化して説明し、リスク、コスト、スケジュール、リソースをマネジメントする責任や、場合によっては交渉や提案する責任もあります。</p>

<p><img src="/wp-content/uploads/2017/06/FireShot-05.jpg" alt="" width="640" height="353" class="alignnone size-full wp-image-23791" srcset="/wp-content/uploads/2017/06/FireShot-05.jpg 640w, /wp-content/uploads/2017/06/FireShot-05-300x165.jpg 300w, /wp-content/uploads/2017/06/FireShot-05-207x114.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>「当事者全員が理解できることがマネジメント。説明責任を果たすためには、言語化が必要です。技術的に詳しいことは武器ですが、それに説明スキルを持つエンジニアはさらに無敵。論理的かつ簡単に説明する能力を磨くべきだと思います。その技術や製品に対して何も知らない人に説明するといい訓練になります」</p>

<p>自分で案件を生み出しマネジメントするのであれば、時間も人のリソース、働く場所も自由に選べるメリットがあります。自由と責任のバランスは大事なポイントであり、責任を果たせば自由が手に入る。責任を果たせれば、さらにもっと大きな責任を任されるようになり、世の中に貢献する場が増えるでしょう。</p>

<p><img src="/wp-content/uploads/2017/06/DSC01410.jpg" alt="" width="640" height="398" class="alignnone size-full wp-image-23792" srcset="/wp-content/uploads/2017/06/DSC01410.jpg 640w, /wp-content/uploads/2017/06/DSC01410-300x187.jpg 300w, /wp-content/uploads/2017/06/DSC01410-207x129.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 80%;">▲<strong>通路もステージ前も受講者で埋まっていた澤さんのセッション会場</strong></span></p>

<p>最後にシリコンバレーの友人が教えてくれたこととして、以下の3つを挙げました。</p>

<ul>
<li><span style="font-size: 120%;"><strong>クリエイティブであること</strong></span></li>
<li><span style="font-size: 120%;"><strong>リーダーシップを発揮すること</strong></span></li>
<li><span style="font-size: 120%;"><strong>起業家精神をもつこと</strong></span></li>
</ul>

<p>「AIやロボットが発達していったとしても、この3つは機械にはできないこと。そうであってほしい、そうでなくてはいけない。最前線で仕事をしているのに、置き換えられるなんてもったいない、つまらないですよね。皆さんも組織の中でも起業家精神を持ちつつ、リーダーシップを発揮してクリエイティブなことをしたいと思っている人は多いはず。<br>僕も文系の大学でしたが、ITは大きなものを生み出せるし、世の中を変えることができるんじゃないかと思って、IT企業に入ったんです」</p>

<p>ITは、人の幸せを創るために存在しています。そう信じることがマネジメントの神髄であり、ITと触れていれば、仕事のやり方も変わってきます。</p>

<p>「どうやったら人を幸せにできるテクノロジーを生み出せるかを考える、人がどう幸せを感じるのか見てみることは本当に大事なことです。ステキな未来を一緒に創っていくために我々はここにいます。創る権利、パワー、能力、理解など、もし足りてないものがあれば、私たちからもピックアップしてください」</p>

<p>そんなエモーショナルなメッセージでセッションは終了。50分間があっという間でした。澤さんのセッションはMicrosoftの動画チャンネル<a href="https://channel9.msdn.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">channel9</a>で公開されるそうなので、動画で見たいという方はぜひチェックしてみてください。</p>

<p><img src="/wp-content/uploads/2017/06/18581922_10154730969122297_8877811173777889003_n.jpg" alt="" width="640" height="418" class="alignnone size-full wp-image-23793" srcset="/wp-content/uploads/2017/06/18581922_10154730969122297_8877811173777889003_n.jpg 640w, /wp-content/uploads/2017/06/18581922_10154730969122297_8877811173777889003_n-300x196.jpg 300w, /wp-content/uploads/2017/06/18581922_10154730969122297_8877811173777889003_n-207x135.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 80%;">▲<strong>セッション前の澤さん自撮りショットから拝借。参加者の皆さん、嬉しそうですね</strong></span></p>
]]></content:encoded>
		
		<series:name><![CDATA[de:code 2017 特集]]></series:name>
	</item>
		<item>
		<title>ブラウザ戦争は終わった！Webの最先端と未来を、ブラウザエバンジェリストたちが語る</title>
		<link>/shumpei-shiraishi/23666/</link>
		<pubDate>Tue, 06 Jun 2017 01:00:55 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[de:code2017]]></category>
		<category><![CDATA[ブラウザ]]></category>

		<guid isPermaLink="false">/?p=23666</guid>
		<description><![CDATA[連載： de:code 2017 特集 (3) 本記事は、2017/5/23, 24に開催された「de:code 2017」の1セッション、「War is over : ブラウザエバンジェリスト達とWebの未来を語ろう」...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/ms-decode2017/" class="series-449" title="de:code 2017 特集" data-wpel-link="internal">de:code 2017 特集</a> (3)</div><p><style>
b.speaker:after {
  content: ': ';
}
</style>
本記事は、2017/5/23, 24に開催された「<a href="https://www.microsoft.com/ja-jp/events/decode/2017/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">de:code 2017</a>」の1セッション、「War is over : ブラウザエバンジェリスト達とWebの未来を語ろう」を聴講したレポートです。</p>

<p>GoogleやMozillaのエバンジェリストたちがマイクロソフトのセッションで仲良くお話、って光景を見るだけでも楽しいセッションでした<img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f60a.png" alt="😊" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>

<p><img src="/wp-content/uploads/2017/06/IMG_0542-640x427.jpg" alt="" width="640" height="427" class="aligncenter size-large wp-image-23668" srcset="/wp-content/uploads/2017/06/IMG_0542.jpg 640w, /wp-content/uploads/2017/06/IMG_0542-300x200.jpg 300w, /wp-content/uploads/2017/06/IMG_0542-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<div id="attachment_23667" style="width: 650px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2017/06/IMG_0570-640x427.jpg" alt="左からMozilla Japan 技術戦略マネージャ 浅井智也氏、Google デベロッパーアドボケート 北村英志氏、日本マイクロソフト デベロッパーエヴァンジェリズム統括本部 物江修氏" width="640" height="427" class="size-large wp-image-23667" srcset="/wp-content/uploads/2017/06/IMG_0570.jpg 640w, /wp-content/uploads/2017/06/IMG_0570-300x200.jpg 300w, /wp-content/uploads/2017/06/IMG_0570-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><p class="wp-caption-text">左からMozilla Japan 技術戦略マネージャ 浅井智也氏、Google デベロッパーアドボケート 北村英志氏、日本マイクロソフト デベロッパーエヴァンジェリズム統括本部 物江修氏</p></div>

<div id="attachment_23669" style="width: 650px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2017/06/IMG_0552-640x427.jpg" alt="Web Payments, WebVR, Web Assembly, Progressive Web Appsについてエバンジェリストたちが語る" width="640" height="427" class="size-large wp-image-23669" srcset="/wp-content/uploads/2017/06/IMG_0552.jpg 640w, /wp-content/uploads/2017/06/IMG_0552-300x200.jpg 300w, /wp-content/uploads/2017/06/IMG_0552-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><p class="wp-caption-text">Web Payments, WebVR, Web Assembly, Progressive Web Appsについてエバンジェリストたちが語る</p></div>

<h2>Web Payments</h2>

<p><b class="speaker monoe">物江</b> まず、<strong>Web Payments</strong>についてお聞かせ願いたいのですが、こちら北村さんご説明をお願いできますか？</p>

<p><b class="speaker kitamura">北村</b> まず前提として、インターネットを利用する際に私たちがクレジットカードを利用するようになってから、それなりに時間が経過しましたね。そして現在転換期が訪れているといっていいのではないかと思います。これまでのように、フォームにクレジットカードの情報を生で入れて送信するというので、本当にいいのだろうか。</p>

<p>そうした問題を解決すべく提案されているのが、Payment Request APIです。他のサードパーティ製アプリに遷移して戻ってくるなどのUIを通じて、決済に必要な情報を、スムーズにユーザーに対して問い合わせることができます。</p>

<p>（筆者注: <a href="https://developers.google.com/web/updates/2016/07/payment-request?hl=ja" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Payment Request APIの日本語による解説記事</a>）
（筆者注: <a href="https://blogs.msdn.microsoft.com/msedgedev_japan/2016/12/20/simpler-web-payments-introducing-the-payment-request-api/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">よりシンプルな Web の決済方法 : Payment Request API の紹介</a>）
<div id="attachment_23672" style="width: 650px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2017/06/IMG_0555-640x427.jpg" alt="Google デベロッパーアドボケート 北村英志氏" width="640" height="427" class="size-large wp-image-23672" srcset="/wp-content/uploads/2017/06/IMG_0555.jpg 640w, /wp-content/uploads/2017/06/IMG_0555-300x200.jpg 300w, /wp-content/uploads/2017/06/IMG_0555-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><p class="wp-caption-text">Google デベロッパーアドボケート 北村英志氏</p></div></p>

<p><b class="speaker monoe">物江</b> なるほど。このPayment Request APIですが、<strong>Edgeではバージョン15からサポート</strong>していまして、Creators Updateを適用したWindows 10上ではすでに利用可能です。Firefoxでのサポートは行われる予定があるんでしょうか？</p>

<p><b class="speaker asai">浅井</b> はい、時期はまだ言えないのですが、<strong>サポートするのは確定</strong>しています。</p>

<p><b class="speaker kitamura">北村</b> <strong>Chromeは現在Android版のみ対応していて、デスクトップ版は開発中</strong>です。</p>

<p><b class="speaker monoe">物江</b> あと、iOS版のChromeについても教えていただけますか？</p>

<p><b class="speaker kitamura">北村</b> iOS版Chromeは、iOSのWebViewを使っていて、iOSのWebViewはPayment Request APIに対応していません。なので、<strong>そのままだとiOS ChromeではPayment Request APIは使えないのですが、実はこれを無理やり使えるようにしてしまおうという計画がありまして</strong>。</p>

<p>どう実現するかというと、ChromeからWebViewに対して機能を注入してしまうんですね。WebViewで通常使えないJavaScript APIを使えるようにしてしまう。Cordovaとかでは以前から普通に行われていたことです。</p>

<p>これまではiOSのWebViewに対してJavaScriptをインジェクトして、新しいAPIを使えるようにするということはしてきませんでした。なので、iOS版のChromeにとっては大きな方針転換でもあります。</p>

<p><b class="speaker monoe">物江</b> このように、各種のプラットフォームでサポートがすでに始まっていますので、<strong>今年中か、もしくは来年の初めくらいには、一般的に使えるAPIになってそう</strong>ですね。</p>

<p><b class="speaker asai">浅井</b> 個人的には、（Mozillaの前身である）Netscapeが切り開いた商用インターネットの世界が、ようやくここまで来たか…と感慨深いものがあります。</p>

<h2>WebVR</h2>

<p><b class="speaker monoe">物江</b> では次はWebVRについてお聞きしていきましょう。WebVRについては、先日のCreators Updateから、1.1のAPIをサポートしはじめました。また、<a href="http://www.babylonjs.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Babylon.js</a>や<a href="https://aframe.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">A-Frame</a>といったライブラリを使うと、WebVRを簡単に扱うことができると。</p>

<p>浅井さん、A-Frameについて教えていただけますか？</p>

<p><b class="speaker asai">浅井</b> A-Frameは、Web上で簡単にVRを扱えるようにすることを目指すライブラリです。例えば、HTMLタグを一つぽんと置くだけで360度画像を表示できるようにするとか。</p>

<p>Unityだとアセットストアがあって、アセットを購入したりすることができるのですが、<a href="https://aframe.io/aframe-registry/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">それと同じようなエコシステムがコミュニティ主導で進められている</a>のも特徴です。非常に簡単に3Dコンテンツを作れて、売り買いしながら作っていけるエコシステムができていくだろうと期待しています。</p>

<div id="attachment_23673" style="width: 650px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2017/06/IMG_0559-640x427.jpg" alt="Mozilla Japan技術戦略マネージャ 浅井智也氏" width="640" height="427" class="size-large wp-image-23673" srcset="/wp-content/uploads/2017/06/IMG_0559.jpg 640w, /wp-content/uploads/2017/06/IMG_0559-300x200.jpg 300w, /wp-content/uploads/2017/06/IMG_0559-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><p class="wp-caption-text">Mozilla Japan技術戦略マネージャ 浅井智也氏</p></div>

<p><b class="speaker monoe">物江</b> コンテンツで思い出したんですが、意外とWeb上で3Dを扱うような仕事ってまだ少ないらしいんですよね。WebGLがモダンブラウザ全部でサポートされるようになってから結構経つのに、WebGLってどこかゲーム用途のイメージも強いみたいで。</p>

<p>ただ<strong>WebGLって、本来ゲーム以外の用途もたくさんあるはず</strong>なんです。例えば<a href="https://grimoire.gl/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Grimoire.js</a>っていうライブラリがあるんですが、これは様々な3Dコンテンツを、簡単にWeb上で扱えるようにすることを目的としていて、こういう動きが盛り上がると、WebGLってもっと活用されるんじゃないかと思う。</p>

<p><b class="speaker asai">浅井</b> その点VRは、コンテンツを中心とした盛り上がりも活発で、結構未来があるんじゃないかな、と思いますね。</p>

<p><b class="speaker monoe">物江</b> ちなみに、VRではなくてMR (Mixed Reality) でいうと<a href="https://github.com/Microsoft/HoloJS" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HoloJS</a>っていうのもあって、HoloLens用のアプリを作ることもできます…すごく大変なんですけどね(笑)。</p>

<p>ところでChromeも、WebVRには対応済みですよね。何か最近の動きとかを教えていただけますか？</p>

<p><b class="speaker kitamura">北村</b> そうですねー、Daydream上でChromeを立ち上げることができるようにする、というのは聞きましたね（筆者注: VR/AR空間内でChromeを立ち上げられるように、ということだと思われる。参考: <a href="https://techcrunch.com/2017/05/18/chrome-is-coming-to-augmented-reality-and-google-daydream/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Chrome is coming to augmented reality and Google Daydream (TechCrunch)</a>）。</p>

<h2>WebAssembly</h2>

<p><b class="speaker monoe">物江</b> では次は、WebAssemblyのお話を聞かせてください。やはりここは、（WebAssemblyの元になったasm.jsの開発元である） Mozillaの浅井さんにお聞きしようかと。</p>

<p><b class="speaker asai">浅井</b> はい、WebAssemblyの元になったのはasm.jsという技術です。
もともと、JavaScriptは動的な言語なので、パフォーマンスの向上にも限界がある。そこで、JavaScriptのサブセットとしてasm.jsが提案されたんです。
変数の型が厳密に定義されており、さらに実行に先立ってコンパイルが可能なので、相当に速かった。</p>

<p><img src="/wp-content/uploads/2017/06/IMG_0536-640x427.jpg" alt="" width="640" height="427" class="aligncenter size-large wp-image-23674" srcset="/wp-content/uploads/2017/06/IMG_0536.jpg 640w, /wp-content/uploads/2017/06/IMG_0536-300x200.jpg 300w, /wp-content/uploads/2017/06/IMG_0536-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>WebAssemblyは、さらにそれをコンパイル済みのバイナリとして配布できるようにする技術です。そのバイナリフォーマットに関する仕様がWebAssemblyです。<strong>実行速度は相当なもので、現在でもC言語の速度まであと20%というところまで迫っています</strong>。</p>

<p><b class="speaker monoe">物江</b> FirefoxやChromeではすでに対応済みなんですよね。Edgeでも、フラグをONにすると使えるようになります。
個人的にはJavaScriptを置き換えるようなものではなく、高機能な計算が必要なところに使うものだと思っていますが、合ってますか？</p>

<p><b class="speaker asai">浅井</b> はい、そうだと思います。WebAssemblyに出力するのも、基本的にはC/C++やRust言語で書かれたものになりますし。</p>

<p><b class="speaker monoe">物江</b> ちなみに、WebAssemblyへのコンパイルって具体的にはどうやるんですか？</p>

<p><b class="speaker asai">浅井</b> <a href="http://kripken.github.io/emscripten-site/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Emscripten</a>と<a href="https://github.com/WebAssembly/binaryen" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Binaryen</a>というツールを組み合わせて、C/C++のコードをWebAssemblyに変換する…というのが一般的ですね。基本的には、LLVMの中間言語が出力できれば、そこからEmscriptenを使ってasm.jsに変換でき、更にBinaryenでWebAssembly化できます。</p>

<p>（筆者注: <a href="https://github.com/kripken/emscripten/wiki/WebAssembly" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">https://github.com/kripken/emscripten/wiki/WebAssembly</a> も参考のこと）</p>

<h2>Progressive Web Apps</h2>

<p><b class="speaker monoe">物江</b> 昨今のWebの重要キーワード、Progressive Web Appsですが、これは北村さん説明をお願いできますか？</p>

<p><b class="speaker kitamura">北村</b> はい。その前に、Progressive Web Appsって、ご存じの方どれくらいいます？…思ったより浸透してないですね。まだまだだな。</p>

<p><strong>Progressive Web Appsっていうのは、一言で言うとモバイルウェブの新しい形</strong>です。</p>

<ul>
<li>Webサイトがホーム画面から起動できる</li>
<li>プッシュ通知</li>
<li>オフラインで動く</li>
</ul>

<p><img src="/wp-content/uploads/2017/06/IMG_0567-640x427.jpg" alt="" width="640" height="427" class="aligncenter size-large wp-image-23680" srcset="/wp-content/uploads/2017/06/IMG_0567.jpg 640w, /wp-content/uploads/2017/06/IMG_0567-300x200.jpg 300w, /wp-content/uploads/2017/06/IMG_0567-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker kitamura">北村</b> 百聞は一見にしかずで、<a href="http://mobile.twitter.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">twitter.com</a>をAndroid 版 Chromeで開いてみるというのが一番わかりやすいと思います。
これは<strong>Twitter Lite</strong>と呼ばれていて、動作も素早いし、モバイルアプリと使い勝手はほとんど変わりません。</p>

<p><b class="speaker asai">浅井</b> PWAは、アプリに比べてデータ通信量も抑えめになるそうです。例えばTwitter Liteではアプリに比べて70%データが削減できるとか。なので、ブラジル、インド、インドネシアといった、ネットワークインフラの整っていない新興国では、アプリよりもユーザのコンバージョン率が高く、採用も広まっているようです。</p>

<p><b class="speaker monoe">物江</b> Firefoxでの、PWA対応はいかがでしょう？</p>

<p><b class="speaker asai">浅井</b> 現在でもホーム画面へのインストールなど基本機能は対応していますし、今後フルスクリーン起動なども順次実装を進めていくそうです</p>

<p><b class="speaker monoe">物江</b> モバイルといえばネイティブアプリ、という印象はいまだに根強いですが、モバイルサイトも同時に構築できてしまうので、環境が整って利点が正しく理解されさえすれば、一気に広まりそうですよね。<strong>PWA対応していないブラウザでアクセスしたとしても、通常のWebアプリとして使えますし</strong>。</p>

<p>ちなみにEdgeでは、今年の夏頃から開発者向けのビルドでPWAを試せるようになります。<strong>年末ぐらいまでには、メジャーブラウザでは全体的にPWAが使えるようになりそう</strong>ですね。</p>

<p><b class="speaker kitamura">北村</b> ちなみにマイクロソフトさんの検索エンジンの<strong>Bingが、PWAを見つけたらWindows Storeに並べてしまうようになる</strong>というのを最近知って、すごい荒業だけどこれは面白いなと思いました。</p>

<p>PWAって捉えどころがないふわっとした用語ではありますが、実際には個々の技術それぞれにもすごく価値があります。オフラインやプッシュ通知がWebアプリで行えるというのは、<strong>Ajax以来の技術的な革命じゃないかと思います</strong>ね。</p>

<h2>Web Components</h2>

<p><b class="speaker monoe">物江</b> そろそろお時間も迫ってまいりましたので、最後のトピックです。
Web Componentsについて語りたいのですが、北村さん、Web Componentsのご説明をお願いできますか？</p>

<p><b class="speaker kitamura">北村</b> Web Componentsっていうのは、一言で言うと、<strong>自分でHTMLタグを作れるという技術</strong>です。そして、自作したタグ（コンポーネント）を配布できる。</p>

<p>Web Componentsは、最近だとSafariに搭載されたのが大きいですね。iOSを含め、割とどこでも使えるメジャーな技術になりました。</p>

<p>あともう一つ、<strong>AMP (Accellalated Mobile Pages）も実はWeb Componentsを使っています</strong>。AMPに対応しているサイトは、現時点でもかなりの数に上りますので、実際にはWeb Componentsはすごい勢いで広まっていると言っていいんじゃないかと思います。</p>

<p><b class="speaker monoe">物江</b> <a href="https://www.polymer-project.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Polymer</a>というライブラリもあるそうですが、それとWeb Componentsの関係はどのようなものでしょうか？
<div id="attachment_23676" style="width: 650px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2017/06/IMG_0556-640x427.jpg" alt="日本マイクロソフト株式会社 デベロッパーエヴァンジェリズム統括本部 物江修氏" width="640" height="427" class="size-large wp-image-23676" srcset="/wp-content/uploads/2017/06/IMG_0556.jpg 640w, /wp-content/uploads/2017/06/IMG_0556-300x200.jpg 300w, /wp-content/uploads/2017/06/IMG_0556-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><p class="wp-caption-text">日本マイクロソフト株式会社 デベロッパーエヴァンジェリズム統括本部 物江修氏</p></div></p>

<p><b class="speaker kitamura">北村</b> Web Componentsっていうのは、W3Cで標準化が進められている技術なんです。具体的には4つの技術から構成されています。</p>

<p><strong>Custom Element</strong>は、先程申し上げたように独自のタグを作ることのできる技術です。</p>

<p><strong>Shadow DOM</strong>は、DOMのカプセル化を行えるようにする技術。</p>

<p><strong>Template Element</strong>っていうのは、「テンプレートである」という意味合い以外持たないHTML要素です。</p>

<p><strong>HTML Import</strong>というのは、JSやCSSのように、HTMLもインポート可能にするという技術です。</p>

<p>一方で<strong>Polymerというのは、Web Componentsの上に構築されたライブラリ</strong>です。</p>

<p>Web Components標準はそれほど高いレベルのAPIを提供しません。なので、実際にコンポーネントを作ろうとすると、実装の重複が多くなります。その重複を排除して、最小限のコードでコンポーネントを作れるようにするのがPolymerです。</p>

<p><b class="speaker monoe">物江</b> ちなみにEdgeは、Web Componentsについては長いこと意識しているようですが、まだ詳細は未定です。Polymerを使うと、現在のEdgeでもWeb Componentsが動作したりするんでしょうか？</p>

<p><b class="speaker kitamura">北村</b> はい、PolymerはPolyfill（対応していないブラウザ上でAPIのエミュレーションを行うライブラリ）も含んでいますので、動作しますね。<strong>実は、現在のYouTubeサイトはWeb ComponentsベースのHTMLに全て書き換えられている</strong>んです。コードを見てみると面白いと思いますよ。</p>

<p>あと、Polymerはライブラリだけじゃなくてコンポーネントも提供しているんです。 <a href="http://webcomponents.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">http://webcomponents.org/</a> を見てみると、すでにいろんなコンポーネントが利用できるのを確認できると思います。</p>

<h2>まとめ</h2>

<p><img src="/wp-content/uploads/2017/06/IMG_0572-640x427.jpg" alt="" width="640" height="427" class="aligncenter size-large wp-image-23677" srcset="/wp-content/uploads/2017/06/IMG_0572.jpg 640w, /wp-content/uploads/2017/06/IMG_0572-300x200.jpg 300w, /wp-content/uploads/2017/06/IMG_0572-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker monoe">物江</b> では、このディスカッションの締めくくりとして、Webの今後について一言ずついただけますでしょうか？</p>

<p><b class="speaker asai">浅井</b> はい、モバイル時代は長らくネイティブアプリが中心でしたが、ここに来て<strong>Webの力が盛り返してきているのを感じています</strong>。ネイティブアプリと遜色ない機能を提供できるだけではなく、ユーザーにリーチするのも、アプリストアよりもWebのほうがハードルが低い。リンクを送るだけでプロモーションできますしね。そういう点で、PWAには期待しています。</p>

<p><b class="speaker kitamura">北村</b> PWAについては、ぼくも同じく期待しています。とりあえずTwitter Liteを触ってみてほしいですね。</p>

<p>あとWebの今後という点で思いついたのですが、<strong>企業の枠組みを超えた合意形成の方法としては、Webはかなり進んでいるんじゃないかと思います</strong>。ディスカッションの場作りとか、標準化を行う上で蓄積されたノウハウはかなり貴重で、他の場面や業界にも活かされていくんじゃないかな…と考えています。</p>

<p><b class="speaker monoe">物江</b> ではそろそろお時間ですので、本セッションを終わりとしたいと思います。みなさま、本日は大変興味深いお話を、どうもありがとうございました。</p>
]]></content:encoded>
		
		<series:name><![CDATA[de:code 2017 特集]]></series:name>
	</item>
		<item>
		<title>de:code参加者アンケートトップ！Microsoft澤円氏が語った「クラウド心配性な上司を説得するコツ」とは？</title>
		<link>/miyuki-baba/19232/</link>
		<pubDate>Thu, 09 Jun 2016 00:00:15 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft Azure]]></category>
		<category><![CDATA[de:code]]></category>
		<category><![CDATA[クラウド]]></category>

		<guid isPermaLink="false">/?p=19232</guid>
		<description><![CDATA[連載： de:code 2016 特集 (8)5月23・24日の二日間に渡って開催され、大盛況のうちに幕を閉じた日本マイクロソフトの開発者向けカンファレンス「de:code 2016」。その参加者アンケートの総合点数で、...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/ms-decode2016/" class="series-371" title="de:code 2016 特集" data-wpel-link="internal">de:code 2016 特集</a> (8)</div><p>5月23・24日の二日間に渡って開催され、大盛況のうちに幕を閉じた日本マイクロソフトの開発者向けカンファレンス「de:code 2016」。その参加者アンケートの総合点数で、134セッションの中でトップのスコアを獲得したのが、2日目の最終セッションに登壇した澤円氏のセッションだ。</p>

<p>澤氏のセッション、「クラウド心配性な上司を説得するコツを伝授します。本当に信頼できるクラウドの構築/運用とは～マイクロソフト クラウド成長の軌跡～」の概要をレポートする。</p>

<p><img src="/wp-content/uploads/2016/06/da228ee35fa34d2ddd9421483b0d7cf6.jpg" alt="" width="640" height="411" class="alignnone size-full wp-image-19620" srcset="/wp-content/uploads/2016/06/da228ee35fa34d2ddd9421483b0d7cf6.jpg 640w, /wp-content/uploads/2016/06/da228ee35fa34d2ddd9421483b0d7cf6-300x193.jpg 300w, /wp-content/uploads/2016/06/da228ee35fa34d2ddd9421483b0d7cf6-207x133.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 80%;">▲日本マイクロソフト株式会社　マイクロソフトテクノロジーセンター センター長　澤円氏</span></p>

<h2>クラウド心配性な上司を説得するコツを伝授</h2>

<p>プレゼンで重要なのは、伝えたい内容をいかに伝言ゲームのように伝播させていくか。そう常日頃から断言している澤氏。今回伝えたい相手は、クラウド導入に納得してくれない上司である。どう伝えたら説得できるのか、参加者が会社に持ち帰ってそのまま話したくなるような情報とネタが満載のプレゼンスタイルでセッションは行われた。</p>

<p>セッションの構成は大きく「データセンター構築から運用まで」「データセンター構築中」「データセンター運用」の3つのシーンに分けて語られた。</p>

<p><img src="/wp-content/uploads/2016/06/DSC00511.jpg" alt="" width="640" height="381" class="alignnone size-full wp-image-19600" srcset="/wp-content/uploads/2016/06/DSC00511.jpg 640w, /wp-content/uploads/2016/06/DSC00511-300x179.jpg 300w, /wp-content/uploads/2016/06/DSC00511-207x123.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>【上司に提言】海外との通信に専用線は高すぎますよね？</h2>

<p>Microsoftのデータセンター構築から運用まで一連のオペレーションは、Microsoft Cloud Infrastructure and Operations、略してMCIOと呼ばれる。データセンター構築の情報を漏らさないために、会議室の予約は別の部署の名前を使うなど、情報管理は徹底している。</p>

<p>データセンターの場所選定は、さまざまな条件を要する。まずは電源が確保できること。発電所の近くであり、さらには発電所が停電になったことも考えると二カ所に近いほうが望ましい。液体燃料の確保が必要なので、道路の選定もデータセンター設置の条件となる。</p>

<p><img src="/wp-content/uploads/2016/06/DSC00521.jpg" alt="" width="640" height="333" class="alignnone size-full wp-image-19624" srcset="/wp-content/uploads/2016/06/DSC00521.jpg 640w, /wp-content/uploads/2016/06/DSC00521-300x156.jpg 300w, /wp-content/uploads/2016/06/DSC00521-207x108.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>電源ケーブルは二重化するのは当然のこと、アメリカでは米国基地とネットワーク網を共有している。海底ケーブルへも大型投資を行っているという。海底ケーブル最大の敵はサメ。サメがかじっても切れないケーブルを用意しているという小ネタも披露された。</p>

<p>こうしたトピックをもとに、<strong>「自分だけの専用ケーブルを引いてるみたいだから、ネットワークも信用できるみたいですよ。うちの会社で海外との通信に専用線は高すぎますよね？自分の国にデータセンターを持っているし、グローバルにクラウドの話をしてくれるはず」</strong>と上司に提案するヒントを語る澤氏。</p>

<p><img src="/wp-content/uploads/2016/06/DSC00526.jpg" alt="" width="640" height="325" class="alignnone size-full wp-image-19625" srcset="/wp-content/uploads/2016/06/DSC00526.jpg 640w, /wp-content/uploads/2016/06/DSC00526-300x152.jpg 300w, /wp-content/uploads/2016/06/DSC00526-207x105.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>実は、日本にMicrosoftのデータセンターを置くことを決めたのはCEOのサティア・ナデラ氏だという。日本の地下ネットワーク網は世界最強と言われており、マイクロソフト専用線も複数本ある。さらにその徹底されたグローバル標準について、話を進める。</p>

<h2>【上司に提言】ここまでの標準化ってできますか？</h2>

<p>Microsoftは、Open Compute Projectへの参加をしている。これはFacebookやGoogle、Intel、rackspaceなども参加しているプロジェクトで、サーバーの内部設計がすべて公開されている。</p>

<p><img src="/wp-content/uploads/2016/06/DSC00534.jpg" alt="" width="640" height="346" class="alignnone size-full wp-image-19631" srcset="/wp-content/uploads/2016/06/DSC00534.jpg 640w, /wp-content/uploads/2016/06/DSC00534-300x162.jpg 300w, /wp-content/uploads/2016/06/DSC00534-207x112.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>組み立てられたサーバー、ラックは同じ品質・クオリティで世界に出荷され、100カ所以上、40か国以上・22リージョン以上（※現在も増加中）にラックの状態でデータセンターに納品される。徹底的な標準化で大幅なコストダウンを目指し、標準化スタイルを決めたらそれを貫く。データセンターでやることはほぼケーブル接続だけだという。</p>

<p>特徴的なのは、ラックが白であることだ。白にすることで明るくなるので、接続ミスを減らすことができるし、何より光の量が少なくて済む。空調も使わず、空気の流れで調節している。これらはコストカットにもつながる。そして、こうした対応は一切の例外を認めておらず、全世界共通に行われている。</p>

<p><img src="/wp-content/uploads/2016/06/DSC00542.jpg" alt="" width="640" height="347" class="alignnone size-full wp-image-19633" srcset="/wp-content/uploads/2016/06/DSC00542.jpg 640w, /wp-content/uploads/2016/06/DSC00542-300x163.jpg 300w, /wp-content/uploads/2016/06/DSC00542-207x112.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>「そうはいっても」とマジックワードを繰り出す上司がいたら、<strong>「うち、ここまでの標準化ってできますか？」</strong>そう上司に問いかけることを勧める澤氏。ダラダラと妥協を繰り返すことは、コストを増やすだけと指摘した。</p>

<h2>【上司に提言】サーバールームのログ取れてます？</h2>

<p>さらに徹底したデータセンター運用について説明する澤氏。人はミスする、機械は壊れるを大前提として、人の手を介さない「自動化」を徹底すべきだと語る。</p>

<p>白いラックの上には、むき出しのケーブルが設置されている。なぜなら下（地下）だと手元が見えないから。すべての行動は追跡され、不正がないように手元が見えない状態を作らない。すべてがモニタリングの対象になる。</p>

<p><img src="/wp-content/uploads/2016/06/DSC00552.jpg" alt="" width="640" height="375" class="alignnone size-full wp-image-19647" srcset="/wp-content/uploads/2016/06/DSC00552.jpg 640w, /wp-content/uploads/2016/06/DSC00552-300x176.jpg 300w, /wp-content/uploads/2016/06/DSC00552-207x121.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>不正があれば証拠が残るが、逆にやってなかった場合も証明になる。データが守られると同時に社員も守られているという。知っていることで事故が起こることがある。その可能性をMicrosoftは徹底的に排除している。</p>

<p>データセンターで働く人は情報を見る術を持っていない。サーバーの電源や物理層だけチェックしている。鍵の管理は別組織だ。壊れていたらラックごと交換する。</p>

<p><img src="/wp-content/uploads/2016/06/DSC00559.jpg" alt="" width="640" height="344" class="alignnone size-full wp-image-19648" srcset="/wp-content/uploads/2016/06/DSC00559.jpg 640w, /wp-content/uploads/2016/06/DSC00559-300x161.jpg 300w, /wp-content/uploads/2016/06/DSC00559-207x111.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>ハードディスクもデータセンターから生きて出ることはない。役目を終えたハードディスクは4つに分割されて、それぞれ別の国で処理される。時間と手間がかかることで、犯罪者もあきらめる。犯罪の余地を作らないのだ。</p>

<p><img src="/wp-content/uploads/2016/06/DSC00563.jpg" alt="" width="640" height="344" class="alignnone size-full wp-image-19649" srcset="/wp-content/uploads/2016/06/DSC00563.jpg 640w, /wp-content/uploads/2016/06/DSC00563-300x161.jpg 300w, /wp-content/uploads/2016/06/DSC00563-207x111.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>ここでの上司への質問は<strong>「誰が触ったかわからない状態ってこわくないですか？うち、サーバールームの出入りって全部ログ取れてましたっけ？」</strong>。顧客データと社員を守るため、という大義名分に反論できる上司はなかなかいないだろう。</p>

<h2>【上司に提言】「日本の法律」に対応できるそうですよ</h2>

<p>最近Microsoftが変わりだしたのは、CEOのサティア・ナデラ氏によるところが大きいというのはよく聞く話だ。だが、社長のBrad Smith氏が弁護士だということを知る人は少ないのではないだろうか。彼が大切だと考えているのは、セキュリティ・プライバシー・透明性・法令順守。これはMicrosoftが法を順守する会社であるということを意味すると、澤氏は言う。</p>

<p><img src="/wp-content/uploads/2016/06/DSC00572.jpg" alt="" width="640" height="340" class="alignnone size-full wp-image-19650" srcset="/wp-content/uploads/2016/06/DSC00572.jpg 640w, /wp-content/uploads/2016/06/DSC00572-300x159.jpg 300w, /wp-content/uploads/2016/06/DSC00572-207x110.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>さらにCOOのKevin Turner氏によるMicrosoftのコミットメントを披露。上司に<strong>「日本の法律にちゃんと対応できるそうですよ」</strong>と言える要素を紹介した。</p>

<p><img src="/wp-content/uploads/2016/06/DSC00578.jpg" alt="" width="640" height="354" class="alignnone size-full wp-image-19651" srcset="/wp-content/uploads/2016/06/DSC00578.jpg 640w, /wp-content/uploads/2016/06/DSC00578-300x166.jpg 300w, /wp-content/uploads/2016/06/DSC00578-207x114.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>【上司に提言】あの人たちやりすぎです</h2>

<p>最後に澤氏は、海底に設置するデータセンター「Project Natick」を紹介。究極の水冷化とセキュリティを実現する取り組みでありつつも、「あの人たちやりすぎです」と自虐ツッコミで会場の笑いをとった。</p>

<p><img src="/wp-content/uploads/2016/06/DSC00586.jpg" alt="" width="640" height="342" class="alignnone size-full wp-image-19652" srcset="/wp-content/uploads/2016/06/DSC00586.jpg 640w, /wp-content/uploads/2016/06/DSC00586-300x160.jpg 300w, /wp-content/uploads/2016/06/DSC00586-207x111.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>人々を成長させるためのモバイルファースト、クラウドファーストに徹底的にコミットして世の中をよく変える。「未来を一緒に」つくるために、今できることを伝える努力を最大限やっていきたいと宣言し、セッションを終えた。</p>

<p><img src="/wp-content/uploads/2016/06/DSC04121.jpg" alt="" width="640" height="386" class="alignnone size-full wp-image-19594" srcset="/wp-content/uploads/2016/06/DSC04121.jpg 640w, /wp-content/uploads/2016/06/DSC04121-300x181.jpg 300w, /wp-content/uploads/2016/06/DSC04121-207x125.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>澤氏のセッションはMicrosoftの動画チャンネルchannel9で公開されている。澤氏のde:codeでのプレゼンを見たいという方は<a href="https://channel9.msdn.com/Events/de-code/2016/SPL-002" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちら</a>からどうぞ！</p>

<ul>
<li>クラウド心配性な上司を説得するコツを伝授します
～本当に信頼できるクラウドの構築/運用とは？ マイクロソフト クラウド成長の軌跡～【<a href="https://channel9.msdn.com/Events/de-code/2016/SPL-002" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">動画公開中</a>】</li>
</ul>
]]></content:encoded>
		
		<series:name><![CDATA[de:code 2016 特集]]></series:name>
	</item>
		<item>
		<title>エンプラ系Webアプリの講演を聞いて、もやもやしたので対談してみた ～「de:code 2016」セッションレポート</title>
		<link>/albatrosary/19240/</link>
		<pubDate>Fri, 03 Jun 2016 01:00:17 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[SPA]]></category>
		<category><![CDATA[エンタープライズ]]></category>

		<guid isPermaLink="false">/?p=19240</guid>
		<description><![CDATA[連載： de:code 2016 特集 (7)5月24日、25日の二日間にわたり開催されたMicrosoftの技術者向けイベント「de:code 2016」で、日本マイクロソフト赤間信幸氏の「エンプラ系 業務Webアプリ...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/ms-decode2016/" class="series-371" title="de:code 2016 特集" data-wpel-link="internal">de:code 2016 特集</a> (7)</div><p>5月24日、25日の二日間にわたり開催されたMicrosoftの技術者向けイベント「de:code 2016」で、日本マイクロソフト赤間信幸氏の「エンプラ系 業務Webアプリ開発に効く！実践的SPA型モダンWebアプリ開発の選択手法」というセッションを聴講しましたので、そのレポートをお届けします。</p>

<p>ただタイトルにもある通り、筆者的にはちょっともやもやする内容でもあったので、HTML5 Experts.jpコントリビューターの酒巻瑞穂さんと、講演の内容をベースとした軽い対談も行いました（後日、エンタープライズWebアプリのあるべきかたちについて、もっと掘り下げた内容の記事も作る予定です。乞うご期待）。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_0062.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_0062-640x427.png" alt="IMG_0062" width="640" height="427" class="alignnone size-large wp-image-19241" srcset="/wp-content/uploads/2016/05/IMG_0062.png 640w, /wp-content/uploads/2016/05/IMG_0062-300x200.png 300w, /wp-content/uploads/2016/05/IMG_0062-207x138.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h2>セッションレポート</h2>

<h3>SPA(Single Page Application)とは</h3>

<p>今、Single Page Application(以降、SPAと記載する）が業務アプリケーションでも利用できないかということが話題になっています。復習になりますが、SPAとは以下の様な特徴を持つアプリケーションです。</p>

<ul>
<li>単一ページで機能を提供するWebアプリケーション

<ul>
<li>ページをリロードせずにJavaScriptでWebAPIと通信</li>
<li>JavaScript、CSS、HTMLを組み合わせて画面を更新</li>
<li>これにより応答性が高く、使い勝手の良いWebアプリケーションを実現する</li>
</ul></li>
<li>Web上では割とSPAは一般的だが、業務アプリケーションでもSPA型の開発ニーズが高まっている</li>
</ul>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_0057.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_0057-640x427.png" alt="IMG_0057" width="640" height="427" class="alignnone size-large wp-image-19242" srcset="/wp-content/uploads/2016/05/IMG_0057.png 640w, /wp-content/uploads/2016/05/IMG_0057-300x200.png 300w, /wp-content/uploads/2016/05/IMG_0057-207x138.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>従来型のWebアプリケーションはサーバサイドが中心でした。そのほとんどの処理をWebサーバで行い、クライアントは受け取ったHTML、CSSを使ってレンダリングを行い、若干のJavaScriptを動かすというものでした。SPA型のWebアプリケーションでは、サーバはクライアントの指示に応じてデータを返し、UIの更新等はすべてクライアントで行います</p>

<h3>SPA型Webアプリケーション開発の難しさ</h3>

<p>このようなSPA型アプリケーション開発は相当のスキルが必要であり時にとてもむずかしいものになります。特に、SPA型Webアプリケーション開発に関するネット上の情報は、低水準からスクラッチで開発するためのものが多い。OSSなどをフル活用して作りこむ、いわばC++開発のような「職人技」の世界であり、ハードルが高いのが現実です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_0066.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_0066-640x427.png" alt="IMG_0066" width="640" height="427" class="alignnone size-large wp-image-19249" srcset="/wp-content/uploads/2016/05/IMG_0066.png 640w, /wp-content/uploads/2016/05/IMG_0066-300x200.png 300w, /wp-content/uploads/2016/05/IMG_0066-207x138.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>エンタープライズ系業務Web開発の場合、こうした「職人的開発」はあまり向いていないように思います。</p>

<p>ここでエンタープライズ系開発とオープン系開発のギャップを確認してみましょう。</p>

<table>
<thead>
<tr>
  <th>項目</th>
  <th>エンタープライズ系開発</th>
  <th>オープン系開発</th>
</tr>
</thead>
<tbody>
<tr>
  <td>システム種別</td>
  <td>B2B, B2E</td>
  <td>B2C</td>
</tr>
<tr>
  <td>重要ポイント</td>
  <td>レガシー（安定性重視）</td>
  <td>エッジ（先進性重視）</td>
</tr>
<tr>
  <td>実装の特徴</td>
  <td>低難易度×多数の画面</td>
  <td>高難易度×少数の画面</td>
</tr>
<tr>
  <td>開発言語の特性</td>
  <td>C#（生産性重視）</td>
  <td>JavaScript（作り込み重視）</td>
</tr>
<tr>
  <td>更新頻度</td>
  <td>塩漬け主体</td>
  <td>頻繁な機能追加・更新</td>
</tr>
<tr>
  <td>製造方法</td>
  <td>SI受発注中心</td>
  <td>内製中心</td>
</tr>
<tr>
  <td>開発スタイル</td>
  <td>大規模・ウォーターフォール</td>
  <td>少数精鋭・アジャイル</td>
</tr>
</tbody>
</table>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_0065.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_0065-640x427.png" alt="IMG_0065" width="640" height="427" class="alignnone size-large wp-image-19248" srcset="/wp-content/uploads/2016/05/IMG_0065.png 640w, /wp-content/uploads/2016/05/IMG_0065-300x200.png 300w, /wp-content/uploads/2016/05/IMG_0065-207x138.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>このような比較から、.NETのような高水準言語での開発に慣れ親しんだ開発者が、SPA開発に取り組むのはハードルが高いといえます。まとめると次の問題が挙げられます。</p>

<ul>
<li>低水準開発の必要性：HTML, CSS, JavaScriptでの開発はC#, .NETでの開発に比べて低水準</li>
<li>高すぎる開発自由度：「どう作るか」は自分でゼロから決める必要がある</li>
<li>ライブラリの選択の難しさ：膨大なライブラリからどれを選べばよいか分からない</li>
</ul>

<p>そしてSPA型開発では、利用するフロントエンドライブラリによって作り方が大きく変わります。同じ「HTML5」の開発といえど、コードの互換性はほとんどありません。このためライブラリの選択には特に慎重を期す必要があるといえます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_0068.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_0068-640x427.png" alt="IMG_0068" width="640" height="427" class="alignnone size-large wp-image-19250" srcset="/wp-content/uploads/2016/05/IMG_0068.png 640w, /wp-content/uploads/2016/05/IMG_0068-300x200.png 300w, /wp-content/uploads/2016/05/IMG_0068-207x138.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>そこで、自分のプロジェクトに合わせた適切なライブラリの選択が必要になるのですが、実際の現場ではこれが非常に難しい。Microsoftからは、クライアントライブラリは（ほぼ）提供されていませんが、世の中にライブラリは星の数ほどあります。</p>

<h3>ライブラリを選ぶ際に考慮すべき事項</h3>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_0071.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_0071-640x427.png" alt="IMG_0071" width="640" height="427" class="alignnone size-large wp-image-19251" srcset="/wp-content/uploads/2016/05/IMG_0071.png 640w, /wp-content/uploads/2016/05/IMG_0071-300x200.png 300w, /wp-content/uploads/2016/05/IMG_0071-207x138.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h4>言語拡張</h4>

<p>ここで、ライブラリを選択する際の私なりのやり方をご紹介します。ライブラリの選択では、基本言語仕様、DOM操作、通信処理、CSSに分けて考えてみます。そうすると、DOM操作・通信部分はほぼ必須になるので、jQueryを利用すればいい。基本言語仕様とCSSに関しては、スクラッチの作り込み型Webアプリケーションでは非常に重要ですが、業務Webアプリケーション開発の場合はケースバイケースです。より具体的に言うと、CSSではLess、SASS、StylusなどのCSSプリプロセッサーの選択、altJSでは、TypeScript、CoffeeScriptの選択などが挙げられます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_0072.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_0072-640x427.png" alt="IMG_0072" width="640" height="427" class="alignnone size-large wp-image-19252" srcset="/wp-content/uploads/2016/05/IMG_0072.png 640w, /wp-content/uploads/2016/05/IMG_0072-300x200.png 300w, /wp-content/uploads/2016/05/IMG_0072-207x138.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h4>UIライブラリ</h4>

<p>UIライブラリに関しては、低水準UI部品郡と高水準UI部品郡に分けて考えます。低水準UIライブラリには無償のものが多く、高水準UIライブラリは高機能ではあるが、ほとんどの場合有償製品となっています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_0074.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_0074-640x427.png" alt="IMG_0074" width="640" height="427" class="alignnone size-large wp-image-19253" srcset="/wp-content/uploads/2016/05/IMG_0074.png 640w, /wp-content/uploads/2016/05/IMG_0074-300x200.png 300w, /wp-content/uploads/2016/05/IMG_0074-207x138.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h4>設計・実装方法論、フレームワーク</h4>

<p>進化が激しくトレンドも頻繁に変わるため、注意が必要です。フレームワークを利用すれば、ロックインも発生します。特にWebフロントエンドの世界では数年と経たずにトレンドが変化します。このため頻繁に手を入れる見込みがない場合には、むやみにフレームワークに依存させるのは危険だと考えます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_0075.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_0075-640x427.png" alt="IMG_0075" width="640" height="427" class="alignnone size-large wp-image-19254" srcset="/wp-content/uploads/2016/05/IMG_0075.png 640w, /wp-content/uploads/2016/05/IMG_0075-300x200.png 300w, /wp-content/uploads/2016/05/IMG_0075-207x138.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h4>各種ツール、ユーティリティ</h4>

<p>どのような各種ツール、ユーティリティを利用するかというような考えは、初めてSPA型開発に取り組む場合には、後回しにするとよい。より高い生産性を目指す際には欠かせないツール郡ではあるが、ここまで述べてきた、言語拡張、UIライブラリ、設計・実装方法論、フレームワークなど覚えるべき要素、考えるべき要素が山ほどあります。最初はなくてもなんとかなりますので、必要性を感じたところから段階的に導入していくことをお勧めします。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_0076.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_0076-640x427.png" alt="IMG_0076" width="640" height="427" class="alignnone size-large wp-image-19255" srcset="/wp-content/uploads/2016/05/IMG_0076.png 640w, /wp-content/uploads/2016/05/IMG_0076-300x200.png 300w, /wp-content/uploads/2016/05/IMG_0076-207x138.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h3>ライブラリの組み合わせに関する注意</h3>

<p>ライブラリは安易に組み合わせないように注意しましょう。ライブラリには必ず寿命がある上、複雑に依存しあっていることも多い。古いライブラリが他のライブラリのバージョンアップの足かせになることがあります。</p>

<p>長期的な保守が重要になる業務Webアプリケーションでは安易にライブラリを組み合わせるべきではないと考えています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_0079.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_0079-640x427.png" alt="IMG_0079" width="640" height="427" class="alignnone size-large wp-image-19256" srcset="/wp-content/uploads/2016/05/IMG_0079.png 640w, /wp-content/uploads/2016/05/IMG_0079-300x200.png 300w, /wp-content/uploads/2016/05/IMG_0079-207x138.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h4>SPAフレームワークライブラリ</h4>

<p>商用の高水準UI部品ライブラリは高価ですが、多くはオールインワンパッケージ（=SPAフレームワーク）になっていて、ライブラリの組み合わせ方で悩む必要が少なくなります。</p>

<p>このため、業務Webアプリケーション開発におけるクライアントライブラリの選択は、高水準UI部品の要否で大きく方針が変わります。</p>

<p>OSSライブラリの組み合わせ型開発では、利用できる高水準UI部品が少なめなので、メジャーなライブラリを中心に必要最小限の組み合わせを行います。。SPAフレームワークライブラリ依存型開発では、高水準UI部品が数多く利用できるので、シェア、情報量、日本語サポート、ライセンス費用などを元に選択するとよいでしょう。</p>

<h4>サーバ側のページ構築</h4>

<p>個人的には完全なSPA型ではなく、うまくサーバ技術を併用した方がSPA型の業務Webアプリケーションは作りやすい。特に.NET開発者の場合、複雑な業務ロジックはサーバ側でC#を使って記述した方が作りやすいことも多いでしょう。実際のSPA型アプリケーション開発では、サーバ側で組み立てなどにASP.NET MVCを併用するといいのではないでしょうか。UI処理の中心はあくまでもクライアントだが、上手に併用しましょう。</p>

<h2>編集後記: 講演の内容について対談してみました。</h2>

<p>レポートは以上になります。ただ、講演の結論が結局のところ「完全なSPA型じゃないほうがいい」と言っているように思え、少し違和感が残ったのも事実。そこで、同じくセッションを聴講していたコントリビュータの酒巻瑞穂さんと、疑問に感じたところを少し話し合ってみました。私も酒巻さんも、現役でエンタープライズWebに取り組んでいるエンジニアとして、これを機にエンタープライズ×SPAについて整理しておきたいと考えたからです。以下、その対談の内容を編集後記として掲載します。</p>

<h3>SPAはつらい？</h3>

<p><img src="/wp-content/uploads/2016/05/sagawa-1.jpg" alt="" width="40" height="40" class="alignnone size-full wp-image-19278" / style="width:100%;height:auto;max-width:100px;" /><br><strong>佐川</strong>：講演を聞いて、どんな感想を持ちました？</p>

<p><img src="/wp-content/uploads/2016/05/sakamaki.jpg" alt="" width="40" height="40" class="alignnone size-full wp-image-19279" / style="width:100%;height:auto;max-width:100px;" /><br><strong>酒巻</strong>：正直、ちょっと違和感残る内容でしたね。</p>

<p><img src="/wp-content/uploads/2016/05/sagawa-1.jpg" alt="" width="40" height="40" class="alignnone size-full wp-image-19278" / style="width:100%;height:auto;max-width:100px;" /><br><strong>佐川</strong>：結論が結局、本格的なSPAは難しいからやめとこう、と言っているようにも聞こえました。</p>

<p><img src="/wp-content/uploads/2016/05/sakamaki.jpg" alt="" width="40" height="40" class="alignnone size-full wp-image-19279" / style="width:100%;height:auto;max-width:100px;" /><br><strong>酒巻</strong>：私も、メリットが見えないものはがっつりSPAにする必要はない。何もかもSPAにすべきとは思いません。ただ例えば、モバイルの事を考えると、SPAにしていくメリットは大きいですよね。クライアントサイドでのオフライン処理を求められることも多いので、そうなるとSPAで作るほうが自然だったりする。</p>

<p>SPAはセッションをクライアント上で維持できるので、Server Push型のイベントが必要なアプリケーションを作る必要がある場合にも有効ですね。</p>

<p><img src="/wp-content/uploads/2016/05/sagawa-1.jpg" alt="" width="40" height="40" class="alignnone size-full wp-image-19278" / style="width:100%;height:auto;max-width:100px;" /><br><strong>佐川</strong>：SPA開発は職人技という話がありましたけど、ここはどうですか？</p>

<p><img src="/wp-content/uploads/2016/05/sakamaki.jpg" alt="" width="40" height="40" class="alignnone size-full wp-image-19279" / style="width:100%;height:auto;max-width:100px;" /><br><strong>酒巻</strong>：職人技…かどうかはわかりませんが、開発の自由度は確かに高いですよね。アプリケーションの品質が、プログラマ個人の力量に左右される部分はまだ大きいですね。</p>

<p><img src="/wp-content/uploads/2016/05/sagawa-1.jpg" alt="" width="40" height="40" class="alignnone size-full wp-image-19278" / style="width:100%;height:auto;max-width:100px;" /><br><strong>佐川</strong>：フレームワークがそういう問題解決を担えるはずなんですが、そのフレームワークが多すぎるという(笑) 。講演でも「ライブラリ選択が多すぎる」という問題提起をしていらっしゃいましたね。</p>

<p><img src="/wp-content/uploads/2016/05/sakamaki.jpg" alt="" width="40" height="40" class="alignnone size-full wp-image-19279" / style="width:100%;height:auto;max-width:100px;" /><br><strong>酒巻</strong>：確かにそれは同意できます。でも、「開発時の選択肢がない」というのは言い換えると「衰退する技術」のようにも思えるので、個人的にはむしろ今の状況は歓迎しています。業務エンジニアとしては社内ルールなどを作って統制する方がいいんじゃないかと。</p>

<p><img src="/wp-content/uploads/2016/05/sagawa-1.jpg" alt="" width="40" height="40" class="alignnone size-full wp-image-19278" / style="width:100%;height:auto;max-width:100px;" /><br><strong>佐川</strong>：それにライブラリの選択も、Yeomanなどのジェネレータやいろんなスターターキットを使えば、かなりの部分楽できますよね。</p>

<h2>SPAの設計は悩ましい</h2>

<p><img src="/wp-content/uploads/2016/05/sakamaki.jpg" alt="" width="40" height="40" class="alignnone size-full wp-image-19279" / style="width:100%;height:auto;max-width:100px;" /><br><strong>酒巻</strong>：ただ、講演でも取り上げられていましたが、設計の方法論などについては確かに難しいです。ここはまだ結論がないと言うか、個人的にも難しいところですね。というのもWebの進化がまだ当分先を見てるので「今」の最善はあっても来年の最善はもう判らない。</p>

<p><img src="/wp-content/uploads/2016/05/sagawa-1.jpg" alt="" width="40" height="40" class="alignnone size-full wp-image-19278" / style="width:100%;height:auto;max-width:100px;" /><br><strong>佐川</strong>：設計方法論は、採用するフレームワークによっても大きく変わってくるところですしね。ただ、今のトレンドとしてはUIのコンポーネント化というのは間違いない方向性なので、そこからスタイルを決めていける。ただ、設計方法論を語った書物はあまり見られないのも事実で、これはWebの進化が早すぎるためではないかと。</p>

<p>しかしSPA設計の話って、「サーバでやるか、クライアントでやるか」って話になりがちですよね。ただ、MVC的なものをどちらかに寄せなければならないという話ではない。基本的には、UIを更新する処理はクライアントに寄せるというほうが筋が良いと思います。</p>

<p>この話はSPAをどうするかという話ではなく、もう少し広くWebアプリケーションをどうやって作るかの話です。SPAでもMPAでも議論としては同じで、SPAにすべきかそうすべきではないということになる。 そういう意味でも、SPAを採用すべき勘所とか、Webアプリケーション全体の中のSPAの位置付けについて、先ほどの講演でもっと聞きたかった。</p>

<p><img src="/wp-content/uploads/2016/05/sakamaki.jpg" alt="" width="40" height="40" class="alignnone size-full wp-image-19279" / style="width:100%;height:auto;max-width:100px;" /><br><strong>酒巻</strong>：個人的には、ちょっと古い内容でしたね。「DOM操作はjQuery」と言っていたが、個人的にもうあまりやりたくない(笑)。</p>

<p><img src="/wp-content/uploads/2016/05/sagawa-1.jpg" alt="" width="40" height="40" class="alignnone size-full wp-image-19278" / style="width:100%;height:auto;max-width:100px;" /><br><strong>佐川</strong>：そうそう、個人的には4年くらい前の感覚に思えました。その頃とはWebアプリケーション開発のやり方そのものが変わっている。もちろん（Webアプリケーションではなく）Webサイトを作るときにわざわざReact.jsとかAngularを利用しなくてもいい。そういう時はjQueryでもいいと思います。こういうものは当たり前ですが、適材適所で考える必要があって、それこそマネージャやアーキテクトの腕の見せどころなのではないでしょうか。</p>

<h2>最後に</h2>

<p>ここのところ、確かにエンタープライズでSPAの導入が多くなってきました。  一方でまだまだ事例が少ないこと、開発経験のあるエンジニアが少ないため導入しようとしてもなかなかプロジェクトとして進められないという現状もあります。この記事が、エンタープライズWebアプリの開発に少しでも寄与できたなら幸いです。</p>
]]></content:encoded>
		
		<series:name><![CDATA[de:code 2016 特集]]></series:name>
	</item>
		<item>
		<title>もう、アルゴリズム自分で書いてる場合じゃない？機械学習が開発手法を変える─de:code 2016セッションレポート</title>
		<link>/shumpei-shiraishi/19195/</link>
		<pubDate>Fri, 27 May 2016 00:00:54 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[ビッグデータ]]></category>
		<category><![CDATA[人工知能]]></category>
		<category><![CDATA[機械学習]]></category>
		<category><![CDATA[深層学習]]></category>

		<guid isPermaLink="false">/?p=19195</guid>
		<description><![CDATA[連載： de:code 2016 特集 (6)de:code 2016に参加中の、編集長の白石です。 今回は、編集部のメンバーそれぞれが興味あるセッションに参加してセッションレポートを書こう、ということになってまして、ぼ...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/ms-decode2016/" class="series-371" title="de:code 2016 特集" data-wpel-link="internal">de:code 2016 特集</a> (6)</div><p>de:code 2016に参加中の、編集長の白石です。</p>

<p>今回は、編集部のメンバーそれぞれが興味あるセッションに参加してセッションレポートを書こう、ということになってまして、ぼくは「Big Data/機械学習がソフトウェア開発手法を変える! 〜静的アルゴリズム生成から動的アルゴリズム生成への道〜」というセッションを聴講しました。
スピーカーである田丸健三郎さんの語り口が心地よく、機械学習についてはかじったことくらいしかないぼくにとってはレベル感もちょうど良く、知らなかったことも数多く学べてとても満足でした。</p>

<p>以下に、簡単なセッションレポートを掲載します。機械学習については素人の、Webエンジニアによるレポートではありますが、何かのお役に立てば幸いです。
（ちなみに画像に沿えた文章は白石による補足文章であり、スピーカーご本人による発言ではないことをお断りしておきます）。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5044.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5044-640x480.jpg" alt="IMG_5044" width="640" height="480" class="aligncenter size-large wp-image-19196" srcset="/wp-content/uploads/2016/05/IMG_5044.jpg 640w, /wp-content/uploads/2016/05/IMG_5044-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5044-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<div id="attachment_19197" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5045.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5045-640x480.jpg" alt="日本マイクロソフト株式会社 技術統括室 ナショナルテクノロジーオフィサー 田丸健三郎氏" width="640" height="480" class="size-large wp-image-19197" srcset="/wp-content/uploads/2016/05/IMG_5045.jpg 640w, /wp-content/uploads/2016/05/IMG_5045-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5045-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">日本マイクロソフト株式会社 技術統括室 ナショナルテクノロジーオフィサー 田丸健三郎氏</p></div>

<h2>もはやとても身近な技術、機械学習</h2>

<p>今の時代、データソースは拡大の一途をたどっています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5048.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5048-640x480.jpg" alt="IMG_5048" width="640" height="480" class="aligncenter size-large wp-image-19200" srcset="/wp-content/uploads/2016/05/IMG_5048.jpg 640w, /wp-content/uploads/2016/05/IMG_5048-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5048-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>そんな中、機械学習が非常に注目されています。以前は、ビッグデータの分析といえば高い専門性が必要な分野でしたが、機械学習によって安価で高品質な分析が可能になりつつあります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5049.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5049-640x480.jpg" alt="IMG_5049" width="640" height="480" class="aligncenter size-large wp-image-19201" srcset="/wp-content/uploads/2016/05/IMG_5049.jpg 640w, /wp-content/uploads/2016/05/IMG_5049-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5049-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>従来アルゴリズムといえば、従来は職人による新規性、進歩性を競う芸術(?)の世界でした。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5051.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5051-640x480.jpg" alt="IMG_5051" width="640" height="480" class="aligncenter size-large wp-image-19203" srcset="/wp-content/uploads/2016/05/IMG_5051.jpg 640w, /wp-content/uploads/2016/05/IMG_5051-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5051-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>しかしそれでも、従来は機械学習によるデータ分析のアプローチよりは、職人によるアルゴリズム開発のほうが開発コストが低かったのです。かつてはデータ量も限られ、コンピュータリソースは非常に高価だったからです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5053.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5053-640x480.jpg" alt="IMG_5053" width="640" height="480" class="aligncenter size-large wp-image-19205" srcset="/wp-content/uploads/2016/05/IMG_5053.jpg 640w, /wp-content/uploads/2016/05/IMG_5053-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5053-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>しかし今や、<strong>データ+機械学習のアプローチのほうが、アルゴリズムをプログラミングするよりも開発コストが安上がりになりつつあります</strong>。それは、クラウドによってほぼ無限とも言えるコンピュータリソースを手に入れられるようになったからです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5054.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5054-640x480.jpg" alt="IMG_5054" width="640" height="480" class="aligncenter size-large wp-image-19206" srcset="/wp-content/uploads/2016/05/IMG_5054.jpg 640w, /wp-content/uploads/2016/05/IMG_5054-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5054-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>また、開発コストの面だけではありません。機械学習にとっての学習データの爆発的な増加、学習精度の大幅な向上など、機械学習を取り巻く環境も大きく進歩しています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5055.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5055-640x480.jpg" alt="IMG_5055" width="640" height="480" class="aligncenter size-large wp-image-19207" srcset="/wp-content/uploads/2016/05/IMG_5055.jpg 640w, /wp-content/uploads/2016/05/IMG_5055-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5055-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>それにより、従来のようにアルゴリズムを静的にプログラミングするのではなく、データを分析し、アルゴリズムを動的に生成するというアプローチが採用されることが増えているのです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5056.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5056-640x480.jpg" alt="IMG_5056" width="640" height="480" class="aligncenter size-large wp-image-19208" srcset="/wp-content/uploads/2016/05/IMG_5056.jpg 640w, /wp-content/uploads/2016/05/IMG_5056-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5056-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h2>機械学習とMicrosoft</h2>

<p>例えば、Microsoftの製品においても機械学習は既に広く利用されています。意外な製品にも使われていると思われるのではないでしょうか？（白石的には、Kinectが関節の位置を特定するのに機械学習を使っているというのが少し驚きでした。まさかそんなところにも応用できるとは…）。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5057.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5057-640x480.jpg" alt="IMG_5057" width="640" height="480" class="aligncenter size-large wp-image-19209" srcset="/wp-content/uploads/2016/05/IMG_5057.jpg 640w, /wp-content/uploads/2016/05/IMG_5057-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5057-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>そして、ディープラーニングによる画像認識の精度は、人間の認識力すら超えつつあります。実際以下のグラフのように、Microsoftによる2015年の成果では、人間の認識エラー率を下回っているのです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5058.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5058-640x480.jpg" alt="IMG_5058" width="640" height="480" class="aligncenter size-large wp-image-19210" srcset="/wp-content/uploads/2016/05/IMG_5058.jpg 640w, /wp-content/uploads/2016/05/IMG_5058-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5058-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>この進化は、ニューラルネットワークの多層化によってもたらされています。2012年には8層、2014年には19層、そして現在ではなんと152層にまで深く階層化できるようになっています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5060.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5060-640x480.jpg" alt="IMG_5060" width="640" height="480" class="aligncenter size-large wp-image-19212" srcset="/wp-content/uploads/2016/05/IMG_5060.jpg 640w, /wp-content/uploads/2016/05/IMG_5060-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5060-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5061.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5061-640x480.jpg" alt="IMG_5061" width="640" height="480" class="aligncenter size-large wp-image-19213" srcset="/wp-content/uploads/2016/05/IMG_5061.jpg 640w, /wp-content/uploads/2016/05/IMG_5061-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5061-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>実は、画像内のオブジェクトの認識率では、Microsoftは世界トップクラス。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5062.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5062-640x480.jpg" alt="IMG_5062" width="640" height="480" class="aligncenter size-large wp-image-19214" srcset="/wp-content/uploads/2016/05/IMG_5062.jpg 640w, /wp-content/uploads/2016/05/IMG_5062-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5062-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>動画のタグ付けなどにも実用化されています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5063.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5063-640x480.jpg" alt="IMG_5063" width="640" height="480" class="aligncenter size-large wp-image-19215" srcset="/wp-content/uploads/2016/05/IMG_5063.jpg 640w, /wp-content/uploads/2016/05/IMG_5063-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5063-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>以下はMicrosoftにおける機械学習の歴史です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5064.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5064-640x480.jpg" alt="IMG_5064" width="640" height="480" class="aligncenter size-large wp-image-19217" srcset="/wp-content/uploads/2016/05/IMG_5064.jpg 640w, /wp-content/uploads/2016/05/IMG_5064-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5064-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Microsoftが今公開している対話型AIとしては、以下の２つが有名です。Cortanaは生産性の向上を目指して開発されており、女子高生AI「りんな」や、中国で大人気のXiaoIceは、人間の感情に寄り添うことを目指しています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5065.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5065-640x480.jpg" alt="IMG_5065" width="640" height="480" class="aligncenter size-large wp-image-19218" srcset="/wp-content/uploads/2016/05/IMG_5065.jpg 640w, /wp-content/uploads/2016/05/IMG_5065-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5065-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5066.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5066-640x480.jpg" alt="IMG_5066" width="640" height="480" class="aligncenter size-large wp-image-19219" srcset="/wp-content/uploads/2016/05/IMG_5066.jpg 640w, /wp-content/uploads/2016/05/IMG_5066-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5066-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>マイクロソフトのIoT基盤は、以下の様なビジネス上の変革を実際にもたらしています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5069.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5069-640x480.jpg" alt="IMG_5069" width="640" height="480" class="aligncenter size-large wp-image-19222" srcset="/wp-content/uploads/2016/05/IMG_5069.jpg 640w, /wp-content/uploads/2016/05/IMG_5069-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5069-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>また、自動翻訳の分野も、機械学習が応用されている分野です。Microsoftも、<a href="https://www.microsoft.com/en-us/translator" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Translator</a>というサービスを提供しており、現在50言語に対応しています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5070.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5070-640x480.jpg" alt="IMG_5070" width="640" height="480" class="aligncenter size-large wp-image-19223" srcset="/wp-content/uploads/2016/05/IMG_5070.jpg 640w, /wp-content/uploads/2016/05/IMG_5070-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5070-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>次のバージョンであるバージョン4では、翻訳精度が大きく向上する予定だそうです。期待したいですね。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/IMG_5071.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/IMG_5071-640x480.jpg" alt="IMG_5071" width="640" height="480" class="aligncenter size-large wp-image-19224" srcset="/wp-content/uploads/2016/05/IMG_5071.jpg 640w, /wp-content/uploads/2016/05/IMG_5071-300x225.jpg 300w, /wp-content/uploads/2016/05/IMG_5071-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h2>セッションを聞いての感想</h2>

<p>はじめにも書きましたが、ぼくは機械学習の分野についてはほとんど知識がなく、軽くかじったことがあるくらいです。
そんなぼくにとっては、「機械学習による動的なアルゴリズム生成のコストが、プログラマーによる静的なアルゴリズム開発のコストを下回りつつある」というのはとても驚きました。</p>

<p>それが本当だとすると（実際本当なのでしょうが）、開発にあたって考えるべきはまず機械学習、データをどう収集してどう分析するかを最初に設計すべきだということになります。ぼくらプログラマーの仕事が大きく変わるかもしれない…と感じ、焦りと同時にワクワク感を感じたセッションでした。</p>
]]></content:encoded>
		
		<series:name><![CDATA[de:code 2016 特集]]></series:name>
	</item>
		<item>
		<title>進化の早いMicrosoft EdgeとWebプラットフォーム ～「de:code 2016」セッションレポート ～</title>
		<link>/albatrosary/19173/</link>
		<pubDate>Thu, 26 May 2016 06:00:50 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Cordova]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft Edge]]></category>
		<category><![CDATA[de:code]]></category>

		<guid isPermaLink="false">/?p=19173</guid>
		<description><![CDATA[連載： de:code 2016 特集 (5)エキスパートの佐川が、「de:code2016」のセッションレポート、日本マイクロソフトエバンジェリスト・物江修氏の「Developing on the Edge. 〜 We...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/ms-decode2016/" class="series-371" title="de:code 2016 特集" data-wpel-link="internal">de:code 2016 特集</a> (5)</div><p>エキスパートの佐川が、「de:code2016」のセッションレポート、日本マイクロソフトエバンジェリスト・物江修氏の「Developing on the Edge. 〜 WebプラットフォームとCordova 〜」をご紹介します。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC03849.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC03849-640x480.jpg" alt="DSC03849" width="640" height="480" class="alignnone size-large wp-image-19176" srcset="/wp-content/uploads/2016/05/DSC03849.jpg 640w, /wp-content/uploads/2016/05/DSC03849-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC03849-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>今年の夏、MicrosoftはWindows 10の大型アップデート「Windows 10 Anniversary Update」を予定している。このアップデートで「Microsoft Edge」にも数多くのAPIが追加される。このセッションでは新しく追加されるAPIの紹介と、それらを利用したUniversal Windows Platform(以下、UWPと記載する)、Cordovaアプリケーションの開発ポイントを紹介する。</p>

<ul>
<li>Microsoft EdgeとWindows10のWebプラットフォーム</li>
<li>EdgeHTMLの新機能とこれからの方向性</li>
<li>Webプラットフォームを利用したアプリケーション開発</li>
</ul>

<h1>Microsoft EdgeとWindows10のWebプラットフォーム</h1>

<p>初めに、Microsoft EdgeとWindows 10で「Webプラットフォーム」と呼んでいる事柄についてみていく。すでにご存じのとおり、Windows10には、2つのマイクロソフト製のブラウザが含まれている。Windows10から新しく採用された「Microsoft Edge（以降、Edgeと記載する）」と「Internet Explorer11」である。</p>

<p>Webブラウザが2つ入っている理由は、以下のとおり。</p>

<ul>
<li>Edgeは相互運用性を重視し、最新のWebコンテンツをブラウズするため</li>
<li>Internet Explorer 11は過去のバージョンのIE向けに作られたコンテンツを従来どおりに見るため</li>
</ul>

<p>この二つは物理的に完全に別なものとなっていて、レンダリングエンジンもJavaScriptエンジンも異なる。</p>

<p>EdgeのレンダリングエンジンとJavaScriptの組み合わせが、Windows 10用のアプリケーションを開発する際に使用されるWebプラットフォームになるが、現状、Windows 10で動作するアプリケーションのすべてがEdgeのエンジン（以降、EdgeHTMLと記載する）を利用しているわけではない。</p>

<p>どういう意味か。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC03858.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC03858-640x480.jpg" alt="DSC03858" width="640" height="480" class="alignnone size-large wp-image-19175" srcset="/wp-content/uploads/2016/05/DSC03858.jpg 640w, /wp-content/uploads/2016/05/DSC03858-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC03858-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>アプリケーションとの組み合わせを見てみる。Windows 10から採用されたUWPアプリケーションは、EdgeHTMLを使用している。しかし、以前の環境で作られたWindows 8系のいわゆるWindowsストア・アプリケーションやデスクトップ・アプリケーションであるWin32アプリケーションは、以前の Tridentを使用している。</p>

<p>新しいSDKに含まれるWeb ViewコントロールはEdgeを使用するようになっているので、もしどちらも選択が可能である場合はEdgeHTMLを使用する。</p>

<h1>Windows 10 Anniversary Updateまでに搭載されるEdgeの新機能</h1>

<p>ここからは「Windows 10 Anniversary Update」までに搭載されるEdgeの新機能について紹介していく。Edgeのエンジンが、Windows 10でアプリケーションを開発する際に使用するWebプラットフォームの機能になるので、そのままアプリケーションから使用できるようになる。</p>

<p>Edgeの2016年の機能実装を含めた展望については、今年の2月に<a href="https://blogs.windows.com/msedgedev/2016/02/03/2016-platform-priorities/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Edgeの開発者ブログ</a>で公開されており、その記事では優先課題とて5つ存在する。（参考までに、日本語の開発者ブログは<a href="https://blogs.msdn.microsoft.com/msedgedev_japan/2016/04/18/looking-ahead-microsoft-edge-for-developers-in-2016/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちら</a>です）</p>

<ol>
<li>WebテクノロジとWindowsストアによるモダン拡張機能プラットフォームを提供する</li>
<li>アクセシビリティとインクルーシブ デザインにより、Microsoft Edgeを使うすべての人の力になる</li>
<li>Microsoft Edgeの基本であるセキュリティ、パフォーマンス、効率を引き続き向上させる</li>
<li>Webの未来を見据えて開発する</li>
<li>コミュニティのフィードバックや参加を可能にするチャネルを増やす</li>
</ol>

<p>まずは拡張機能。ネイティブ形式のアドオンとは異なるWebテクノロジを活用した、開発者になじみのある拡張機能プラットフォームを作成する。現在のInsider Previe版のEdgeでは同じくプレビュー版のアドオンを使用できるようになっている。</p>

<p>次にアクセシビリティ。この項目では「HTML Accessibility API Mappings」と「Core Accessibility API Mappings」への対応、「ハイコントラストのサポート」や「視覚障碍のある方にとっての読みやすさ」や、「フォーカスおよび選択の操作性の向上」などが表明されていた。</p>

<p>基本機能では、「JavaScript エンジンのベンチマークの向上」「さらなるセキュリティの強化」たとえばFlashを別のプロセスに分離し、不要なコンテンツ処理を保留したり、GPUレンダリングの強化などが表明されている。</p>

<h1>Insider Preview に搭載された新機能</h1>

<p>ここからは「Insider Preview」に搭載された新機能について紹介していく。現在、Insider Previewに実装されていて、実際に試すことができるものが約20個以上、開発中のものを含めると36個くらいあり、しかも、これは現段階のものなので、これからまだ増える可能性がある。</p>

<ul>
<li>Web Speech API (synthesis)</li>
<li>Fetch API</li>
<li>Beacon</li>
<li>Web Notifications</li>
<li>WebRTC</li>
<li>OPUS open audio</li>
<li>VP9 open video playback</li>
<li>WOFF File Format 2.0</li>
<li>FIDO 2.0 Password</li>
<li>Canvas 2D path2D</li>
<li>Ambient Light Events</li>
<li>Color input type</li>
<li>Element</li>
<li>Default parameter (ES2015)</li>
<li>Destructuring (ES2015)</li>
<li>Generators (ES2015)</li>
<li>SIMD (after ES2016)</li>
<li>Exponentiation Operator (ES2016)</li>
<li>Array.prototype.includes (ES2016)</li>
<li>Async Functions (after ES2016)</li>
</ul>

<p>Insiger Previewに新しく搭載された機能をいくつか、デモを交えながら紹介する（この記事ではデモ資料省略）。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC03850.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC03850-640x480.jpg" alt="DSC03850" width="640" height="480" class="alignnone size-large wp-image-19174" srcset="/wp-content/uploads/2016/05/DSC03850.jpg 640w, /wp-content/uploads/2016/05/DSC03850-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC03850-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h3>Web Speech API</h3>

<p>IETF標準の言語タグである「BCP 47」に対応しており、タグの指定によってさまざな言語の指定ができる。音量、音声、速度はもちろん、SSML (Speech Synthesis Markup Language) を使用して音声合成時の修飾的情報を指定したりもできる。</p>

<h3>Fetch API</h3>

<p>「Fetch API」は、Webサーバと通信するためのAPIで、Promise ベースで非同期処理を行える。従来の「XMLHttpRequest」の仕様のさまざまな不足分をなくし、より細かい処理ができるようになっていて、将来的に「XMLHttpRequest」は「Fetch API」に置き換わると言われている。「Fetch API」は「XMLHttpRequest」とは異なり「Service Worker」からも使用できる。参考までに「Service Worker」とは、「Progressive Web Apps」というモバイルWeb向けの新しいコンセプトだ。</p>

<h3>Web Notifications</h3>

<p>「Web Notifications」はユーザーへのデスクトップ通知の設定や表示のために使われるもので、EdgeではWindows 10のアクションセンターと統合される。この通知には、カスタムアイコンやタイトル、メッセージが設定可能だ。Service WorkerとPush APIを組み合わせると、サーバからのPuch通知を受け取って表示したりということが可能になるが、残念ながらこの2つはまだサポートされていない。しかし、ブラウザ上でアプリケーションが稼働状態であれば、WebSocktsやWebRTCの通知を受け取ってデスクトップ通知を表示するといったことが可能だ。</p>

<h2>WOFF2.0フォント</h2>

<p>WOFF2.0フォントは、従来のフォントファイルのサイズを30%以上多く減らす新しいフォーマットだ。日本語を含むアジアフォントではおよそ50%前後節減できると言われている。現在、Webページの60%以上でカスタムWebフォントが使用されていて、平均的にWebページのサイズの5.3%を占めると言われているので、これをサポートすることでページの表示速度の向上が期待できる。</p>

<h3>WebRTC</h3>

<p>WebRTCについて。RTCとは「Real Time Cominucation」の略で、プラグインなしでWebブラウザ間のボイスチャット、ビデオチャット、ファイル共有ができる技術がWebRTCだ。Firefox、Chromeは、Edgeに先行してWebRTC1.0をサポートしているが、EdgeはWebRTCの使い勝手を改善したORTCのみをサポートしてた。このWebRTCとORTCは互換性があるので、互いに通信を行うことができるが、さらなる相互運用性を高めるためにEdgeHTML 15では、WebRTC1.0もサポートすることになった。</p>

<h4>RTCの相互間運用性</h4>

<table>
<thead>
<tr>
  <th>APIサポート</th>
  <th>ORTC</th>
  <th>WebRTC</th>
</tr>
</thead>
<tbody>
<tr>
  <td>EdgeHTML13</td>
  <td>Yes</td>
  <td>No</td>
</tr>
<tr>
  <td>EdgeHTML15</td>
  <td>Yes</td>
  <td>Yes</td>
</tr>
</tbody>
</table>

<table>
<thead>
<tr>
  <th>Codecサポート</th>
  <th>H.264 UC</th>
  <th>H.264</th>
  <th>VP8</th>
</tr>
</thead>
<tbody>
<tr>
  <td>EdgeHTML13</td>
  <td>Yes</td>
  <td>No</td>
  <td>No</td>
</tr>
<tr>
  <td>EdgeHTML15</td>
  <td>Yes</td>
  <td>Yes</td>
  <td>Yes</td>
</tr>
</tbody>
</table>

<h3>その他</h3>

<p>そのほかにもオーディオ用の高い圧縮フォーマットであるOpusや動画圧縮コーデックのVP9、細かい時間の計測に使用される「High Resolution Time」のLebel2や、フォルダのドラッグ・アンド・ドロップ、Webブラウザで生体認証を行うためのFIDO(ファイド)2.0、それからBeacon、アクセシビリティ関連のエレメントなどなど多くの機能がサポートされる。</p>

<h1>ハイブリッド・アプリケーション</h1>

<p>説明した機能は、ハイブリッド・アプリケーション開発用の様々なフレームワークを使用することで、スマートフォンやデスクトップのアプリケーションとして利用することができる。ここからは、Webプラットフォームを利用したアプリの開発について紹介していきます。</p>

<p>ブラウザで動作するWebアプリケーションを、ハイブリッド・アプリケーション化するメリットは3つほどあります。</p>

<ul>
<li>オフライン</li>
<li>アプリストアのエコシステム</li>
<li>プラットフォーム/ハードウェアの機能</li>
</ul>

<p>もう少し待っているとEdgeでもService WokerがサポートされてWebアプリケーションでもオフラインの利用が可能になるので、実際にアプリケーション化するメリットというのはアプリストアのエコシステムを使用するとか、Webブラウザでは使用できないハードウェアの機能を使用するということぐらいに差が縮まる。</p>

<p>このハイブリッド・アプリケーションの形式には、Packageアプリケーションと、Hotedアプリケーションがある。Packageは、オフラインで利用可能。サーバサイドのリソースががならずしも必要でない。Hostedは常に最新のコンテンツで実行でき、開発の一元化が可能だがオフラインでの使用が前提となる。ざっくり言うとコンテンツの配置場所くらいしか違いはない。</p>

<h1>Universal Windows PlatformとCordovaを利用したHostedアプリケーション</h1>

<p>UWPとCordovaで、どのようにHostedアプリケーションを作るか、というのを紹介する。</p>

<h2>UWP</h2>

<p>これがWindow 10に用意されている、アプリから使用可能なOSリソースだ。プッシュ通知や、タイルへの情報表示、予定表、アドレス帳へのアクセス、Cortana連携とWindowsランタイムを使用し、さまざまなハードウェアにもアクセスできる。作成は</p>

<ol>
<li>package.appmanifestの[アプリケーション]タブで[スタート]を指定</li>
<li>[コンテンツURI]タブでWinRTへのアクセスを設定</li>
<li>使用しないファイルを削除</li>
</ol>

<h2>Cordova</h2>

<p>Tools for Apache Cordovaが提供する機能は</p>

<ul>
<li>ターゲット</li>
<li>ビルド</li>
<li>デバッグ</li>
<li>エミュレータ</li>
<li>コード補完</li>
</ul>

<p>がありiOSアプリケーションに対するビルドにはMacが必要ではあるが、ほとんどの環境(Android系/iOS系/Windows系)で実行可能だ。CordovaにおけるHostedアプリケーションの作成は以下の３つで行っていく。</p>

<ol>
<li>config.xmlの編集</li>
<li>www¥scripts¥index.jsの編集</li>
<li>index.htmlの編集</li>
</ol>

<p>尚、Apache Cordovaを使用したホスト型Webアプリケーションの作成については<a href="https://blogs.msdn.microsoft.com/visualstudio_jpn/2016/05/19/apache-cordova/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちら</a>の資料を見るとよい</p>

<h2>Visual Studioで提供されている検証環境</h2>

<ul>
<li>Ripple</li>
<li>Android</li>
<li>Monaca Debugger(iOS/Android)</li>
<li>Windows Phone</li>
</ul>

<p>その他、Mac OS用、リモートエージェント、Mac in Cloud(Mac OSのホスティング)などがある。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC03862.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC03862-640x480.jpg" alt="DSC03862" width="640" height="480" class="alignnone size-large wp-image-19177" srcset="/wp-content/uploads/2016/05/DSC03862.jpg 640w, /wp-content/uploads/2016/05/DSC03862-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC03862-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>最後に、Webプラットフォームについてということと、この夏に向けていろいろなAPIが出てくる。そして、Webではできないことができるようになると物江氏は締めくくり、Microsoft Edgeのすぐそこにある未来について熱く語ってくれた。今最も熱いブラウザは「Microsoft Edge」ではないだろうか。</p>
]]></content:encoded>
		
		<series:name><![CDATA[de:code 2016 特集]]></series:name>
	</item>
	</channel>
</rss>
