<?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>佐川 夫美雄 &#8211; HTML5Experts.jp</title>
	<atom:link href="/albatrosary/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>ビジネスで普通に利用される Mixed Reality の全貌！ ー de:code 2017 基調講演レポート（後半）</title>
		<link>/albatrosary/23365/</link>
		<pubDate>Tue, 23 May 2017 08:58:20 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[de:code2017]]></category>

		<guid isPermaLink="false">/?p=23365</guid>
		<description><![CDATA[連載： de:code 2017 特集 (2)今回の記事は後編です。前編はこちら ディープラーニングや機械学習というとちょっと手が出しづらいところがあり避けていた方もいると思いますが、この基調講演ではそういった迷い(?)...]]></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> (2)</div><p><strong>今回の記事は後編です。前編は<a href="https://html5experts.jp/shumpei-shiraishi/23392/" data-wpel-link="internal">こちら</a></strong></p>

<p>ディープラーニングや機械学習というとちょっと手が出しづらいところがあり避けていた方もいると思いますが、この基調講演ではそういった迷い(?)を払拭するような解説とデモが行なわれました。</p>

<p>そしてもう一つ、オーグメント・リアリティやバーチャル・リアリティ、ホログラム、良い意味でも悪い意味でも「遊び」での利用しかないと思う人が殆どだと思います（私は今日までそのくらいのものだと思ってました）。いやいやどうして、数年後のビジネススタイルを定義する内容の解説とデモが行なわれました。</p>

<p>基調講演後半はエキスパートの佐川がお届けします。</p>

<h1>ディープラーニングが行える「SQL Server」</h1>

<p>患者のCTスキャンからガンである可能性をディープラーニングを使って解析している。この解析は SQL Server で実行されている。</p>

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

<p>SQL Server では ディープラーニング・ツール(TensorFlowやCNTK)を SQL として使えるようにしてる。これはストアド・プロシージャで実装され、このストアド・プロシージャの中でAIのエンジンを呼んでる。</p>

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

<h1>新しいクラウドデータベース「Cosmos DB」とは何者か！？</h1>

<p>データを分散保存し、分散された各リージョンのデータが一貫性を保って利用できるように設計されている。</p>

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

<p>Cosmos DB の特徴のひとつは何と言っても世界中に分散させてアクセスできることのようだ。そして分散されたデータについてはRDBMSと同等の一貫性を定義でき5段階から選択できるようになっている</p>

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

<p>コードを書く上でも Python や R 、 C# と言った言語でも書くことができもちろん Node.js を使っても書くことができる。</p>

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

<p>AIを活用したドローンとデープラーニングを用いた「Cosmos DB」の実例。</p>

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

<h1>Mixed Reality(複合現実)で実現するビジネス</h1>

<p>Augmented Reality(オーグメント・リアリティ)、Virtual Reality(バーチャル・リアリティ)、Hologram(ホログラム)を合わせたものが Mixed Reality(複合現実) であり、今回の de:code2017 のメインと私は思っている。</p>

<p>Mixed Reality のキーマン Alex Kipman がもっと感銘を受けたのが日本だという。彼によると、日本は最も Mixed Reality(複合現実) が進んでいて、コミュニティ活動や HoloLens ハッカソンが世界でも秀でているそうです。</p>

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

<p>オーグメントリアリティ、バーチャル・リアリティ、ホログラムは別々に用いる技術ではなく同時に使うものであると主張する。</p>

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

<p>実際に建設業ではホロレンズを使って模型(設計図)を作り、最後にはこれらすべての情報をホロレンズに入れて渡すことができる。</p>

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

<p>これまでとは変わったスタイルの仕事になると言ってます。ワクワク感が満載で、アニメ好きでは無くてもテンションが上がりそうだ。</p>

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

<p>コミュニケーションツールとして、</p>

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

<p>Bot とのコミュニケーションも、</p>

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

<p>遠距離にいる人ともアバターとして存在することもできるし、</p>

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

<p>Mixed Reality(複合現実)を使うとすべてのものが変わる。２年から３年先には、バーチャルもリアルも境目がなくなりは物理的にそこに居なくてもいい。ブラウザ(Microsoft Edge)でWebVRを動かしEgdeから椅子を（バーチャルに）引き出すと言ったことも可能になる。</p>

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

<p><strong>今回の記事は後編です。前編は<a href="https://html5experts.jp/shumpei-shiraishi/23392/" data-wpel-link="internal">こちら</a></strong></p>
]]></content:encoded>
		
		<series:name><![CDATA[de:code 2017 特集]]></series:name>
	</item>
		<item>
		<title>キミはNativeScriptを知っているか？Angular2でネイティブモバイルアプリが書けるぞ！</title>
		<link>/albatrosary/20691/</link>
		<pubDate>Fri, 09 Sep 2016 02:42:17 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Angular2]]></category>
		<category><![CDATA[NativeScript]]></category>

		<guid isPermaLink="false">/?p=20691</guid>
		<description><![CDATA[連載： Web技術でアプリ開発2016 (4)Web技術でアプリ開発2016特集・第4弾は、JavaScript（およびTypeScript）によるクロスプラットフォーム開発が可能ながらネイティブと同様の実行速度を得られ...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/web-based-apps-2016/" class="series-391" title="Web技術でアプリ開発2016" data-wpel-link="internal">Web技術でアプリ開発2016</a> (4)</div><p>Web技術でアプリ開発2016特集・第4弾は、JavaScript（およびTypeScript）によるクロスプラットフォーム開発が可能ながらネイティブと同様の実行速度を得られる、<a href="http://www.telerik.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Telerik</a>社の<a href="https://www.nativescript.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">NativeScript</a>を取り上げたいと思います。</p>

<p>NativeScriptは、Angular2とも組み合わせて使うことができる、現在注目のフレームワークです。本記事では、XMLによるUI定義を行う従来の開発手法だけではなく、Angular2（ただし、RC4という少し古いバージョン）と組み合わせてモバイルアプリを開発する方法まで網羅してご紹介します。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/NativeScript_logo.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/NativeScript_logo.png" alt="NativeScript_logo" width="300" height="300" class="alignnone size-full wp-image-20730" srcset="/wp-content/uploads/2016/09/NativeScript_logo.png 300w, /wp-content/uploads/2016/09/NativeScript_logo-150x150.png 150w, /wp-content/uploads/2016/09/NativeScript_logo-207x207.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<h1>NativeScriptの概要</h1>

<p><a href="https://www.nativescript.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">NativeScript 2.0</a>は、JavaScriptとCSSを使用し、ネイティブのiOSとAndroidのアプリを構築するためのフレームワークです。ネイティブで実行されるパフォーマンスとUXを提供し、その結果、ネイティブプラットフォームのレンダリングエンジンを使ってUIを構築します。WebViewsでのUIレンダリングはしていません。</p>

<p>NativeScriptには<a href="https://www.npmjs.com/package/tns-core-modules" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">tns-core-modules</a>というコアモジュールがあり、上記に述べたJavaScriptからネイティブへの変換を行っています。NativeScriptのgithubリポジトリを見ると「0.9.0」のリリースが「5 Mar 2015」なので、約1年とちょっとの歳月が経過していることになります。現時点での最新バージョンは「2.2.1」です。</p>

<p>NativeScriptでAngular2を利用する場合には、まず、Angular2のテンプレート（@Component.template）に、NativeScriptで提供しているディレクティブを記述します。そして、上記で説明したtns-core-modulesと<a href="https://www.npmjs.com/package/nativescript-angular" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">nativescript-angular</a>を利用してNativeScriptがビルドを行い、iOSやAndroidのネイティブコードを生成します。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/4bd44303086f2a767d223e68d2da08ae.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/4bd44303086f2a767d223e68d2da08ae-300x129.png" alt="nativescript-angular" width="300" height="129" class="alignnone size-medium wp-image-20694" srcset="/wp-content/uploads/2016/09/4bd44303086f2a767d223e68d2da08ae-300x129.png 300w, /wp-content/uploads/2016/09/4bd44303086f2a767d223e68d2da08ae.png 640w, /wp-content/uploads/2016/09/4bd44303086f2a767d223e68d2da08ae-207x89.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>「NativeScript with Angular2」の最初の「v0.3.0」がリリースされたのが今年8月初旬で、最新は「v0.3.1」です。</p>

<p>この記事では、macOS上での開発を前提に解説をしています。</p>

<h1>インストール</h1>

<p>インストール手順は<a href="http://docs.nativescript.org/start/quick-setup" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">quick-setup</a>にも書かれている通り、あまり複雑なところはありません。しかし、もしAndroid SDKをはじめて利用する場合には少し戸惑うと思います（私もNativeScriptのあまりやさしいとはいえないエラーメッセージにちょっと苦しみました）ので、順を追って説明します。</p>

<ul>
<li>ステップ1: Rubyのインストール</li>
<li>ステップ2: Node.jsのインストール</li>
<li>ステップ3: NativeScript CLIのインストール</li>
<li>ステップ4: iOSとAndroid開発に必要なもののインストール</li>
</ul>

<h2>ステップ1: Rubyのインストール</h2>

<p>NativeScriptをビルドするとき、Rubyを利用します。Rubyのバージョンは2.2以降が必要ですが、macOSにデフォルトでインストールされているRubyは古いため、<code>Homebrew</code>を使って最新バージョンをインストールします。最新のRubyが入っている方は読み飛ばして下さい。</p>

<h3>Homebrewのインストール</h3>

<p><a href="http://brew.sh/index_ja.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Homebrew</a>はRubyを使いインストールし、インストール後環境変数を定義します。</p>

<p></p><pre class="crayon-plain-tag">$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew update
$ echo 'export PATH=/usr/local/bin:$PATH' &gt;&gt; .bash_profile
$ source .bash_profile</pre><p></p>

<h3>rbenvとruby-buildのインストール</h3>

<p>brewを使って<a href="https://github.com/rbenv/rbenv" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">rbenv</a>と<a href="https://github.com/rbenv/ruby-build" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ruby-build</a>をインストールします。rbenvを使ってRubyのバージョン管理を行います。ruby-buildはrbenvのプラグインで、異なるバージョンのRubyをコンパイルし、インストールするためのものです。</p>

<p></p><pre class="crayon-plain-tag">$ brew install rbenv ruby-build
$ echo 'eval "$(rbenv init -)"' &gt;&gt; ~/.bash_profile
$ source ~/.bash_profile
$ rbenv --version
$ rbenv install -l
$ rbenv install 2.2.3
$ rbrnv version
$ rbenv global 2.2.3
$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin15]
$</pre><p></p>

<h2>ステップ2: Node.jsのインストール</h2>

<p><code>Node.js</code>はv4.0.0以降を利用する必要があります。<code>rbenv</code>と同様にバージョン管理システムをインストールします。<code>Node.js</code>のバージョン管理システムには<a href="https://github.com/hokaccha/nodebrew" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">nodebrew</a>, <a href="https://github.com/marcelklehr/nodist" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">nodist</a>, <a href="https://github.com/creationix/nvm" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">nvm</a>, <a href="https://github.com/coreybutler/nvm-windows" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">nvm-windows</a>などいくつかありますが、筆者は<code>nodebrew</code>を好んで利用しています。</p>

<h3>nodebrew のインストール</h3>

<p>curlを使ってインストールを行います。インストールが完了するとパスを追加するようにメッセージが表示されますので、.bash_profile に登録してください。</p>

<p></p><pre class="crayon-plain-tag">$ curl -L git.io/nodebrew | perl - setup
$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' &gt;&gt; .bash_profile
$ source .bash_profile</pre><p></p>

<h3>Node.jsのインストール</h3>

<p>続いて、Node.jsをインストールします。<code>nodebrew ls-remote</code>コマンドを使ってバージョンを確認し、<code>nodebrew install-binary</code>コマンドを使ってNode.jsのインストールを行います。利用するバージョンを動かす場合には<code>nodebrew use</code>コマンドを実行します。</p>

<p>今回、Node.jsのバージョンとしては<code>v5.12.0</code>を利用しました。</p>

<p></p><pre class="crayon-plain-tag">$ nodebrew ls-remote
$ nodebrew install-binary v5.12.0
$ nodebrew use v5.12.0
$ node -v
v5.12.0
$</pre><p></p>

<h2>ステップ3: NativeScript CLIのインストール</h2>

<p>いよいよNativeScriptのインストールです。<code>npm</code>コマンドを使って<code>nativescript</code>をグローバルインストールします。<code>nativescript</code>はスカッフォールディング（コード雛形の自動生成）を提供するモジュールで、<code>tns</code>コマンドによって実行されます。</p>

<p><code>tns</code>コマンドを実行して、インストールが正しく行われているか確認しましょう。参考までに<code>tns</code>コマンドで出力される内容は<code>tns --help</code>と同じ内容です。<code>tns</code>コマンドでは主に</p>

<ul>
<li>テンプレートからプロジェクトの生成</li>
<li>プロジェクトへの生成プラットフォーム(iOS, Android)の追加</li>
<li>JavaScriptからネイティブへのビルド</li>
<li>エミュレータの実行</li>
</ul>

<p>を行います</p>

<p></p><pre class="crayon-plain-tag">$ npm install nativescript -g
$ tns
# NativeScript
┌─────────┬─────────────────────────────────────────────────────────────────────┐
│ Usage   │ Synopsis                                                            │
│ General │ $ tns  [Command Parameters] [--command ]                            │
│ Alias   │ $ nativescript  [Command Parameters] [--command ]                   │
└─────────┴─────────────────────────────────────────────────────────────────────┘

・・・

$</pre><p></p>

<h2>ステップ4: iOSとAndroid開発に必要なもののインストール</h2>

<h3>JDKのインストール</h3>

<p>JDKはバージョンが8以降のものをインストールしてください。インストールが完了したら、<code>.bash_profile</code>に設定を登録してください。</p>

<p></p><pre class="crayon-plain-tag">$ echo 'export JAVA_HOME=$(/usr/libexec/java_home)' &gt;&gt; .bash_profile
$ source .bash_profile</pre><p></p>

<h3>Android開発環境のインストール</h3>

<p>Android SDKをHomebrewからインストールし、変数<code>ANDROID_HOME</code>を定義します.</p>

<p></p><pre class="crayon-plain-tag">$ brew install android-sdk
$ echo 'export ANDROID_HOME=/usr/local/Cellar/android-sdk/24.4' &gt;&gt; .bash_profile
$ echo 'export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools' &gt;&gt; .bash_profile
$ source .bash_profile</pre><p></p>

<h4>Androidエミュレータのインストール</h4>

<p>android-sdkのインストールが終わったら、実際に利用するエミュレータを定義します。<code>android-sdk</code>がインストールされているディレクトリへ移動し、<code>andorid avd</code>を実行することで設定を行います。<code>android-sdk</code>以下のディレクトリ構成は次の通りです。</p>

<p></p><pre class="crayon-plain-tag">$ cd /usr/local/Cellar/android-sdk/24.4
$ tree -L 1
.
├── INSTALL_RECEIPT.json
├── README
├── add-ons -&gt; ../../../var/lib/android-sdk/add-ons
├── bin
├── build-tools
├── etc
├── extras -&gt; ../../../var/lib/android-sdk/extras
├── platform-tools
├── platforms -&gt; ../../../var/lib/android-sdk/platforms
├── samples -&gt; ../../../var/lib/android-sdk/samples
├── sources -&gt; ../../../var/lib/android-sdk/sources
├── system-images -&gt; ../../../var/lib/android-sdk/system-images
├── temp -&gt; ../../../var/lib/android-sdk/temp
└── tools</pre><p></p>

<p>Androidエミュレータを高速化するためのハードウェア支援環境「Intel Hardware Accelerated Execution Manager (Intel® HAXM) 」を事前にインストールします。次のスクリプトを実行してください。</p>

<p></p><pre class="crayon-plain-tag">$ cd /usr/local/Cellar/android-sdk/24.4/extras/intel/Hardware_Accelerated_Execution_Manager
$ sudo ./silent_install.sh</pre><p></p>

<p>完了したら、<code>android avd</code>を起動し、事前にエミュレータ定義を登録します。</p>

<p></p><pre class="crayon-plain-tag">$ cd /usr/local/Cellar/android-sdk/24.4/tools
$ ./android avd</pre><p></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/08745f58e1623aad624c9c147ce67bdf.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/08745f58e1623aad624c9c147ce67bdf-300x226.png" alt="android avd" width="300" height="226" class="alignnone size-medium wp-image-20697" srcset="/wp-content/uploads/2016/09/08745f58e1623aad624c9c147ce67bdf-300x226.png 300w, /wp-content/uploads/2016/09/08745f58e1623aad624c9c147ce67bdf.png 640w, /wp-content/uploads/2016/09/08745f58e1623aad624c9c147ce67bdf-207x156.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>この設定を忘れると<a href="https://github.com/NativeScript/android-runtime/issues/533" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">「Cannot read property &#8216;targetNum&#8217; of undefined」というエラーが出ます</a>。</p>

<p>参考までに、今回利用しているエミュレータは次のように定義しています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/92e741b3229f54ad2ccec77a5d994344.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/92e741b3229f54ad2ccec77a5d994344-300x250.png" alt="スクリーンショット 2016-09-06 14.11.30" width="300" height="250" class="alignnone size-medium wp-image-20698" srcset="/wp-content/uploads/2016/09/92e741b3229f54ad2ccec77a5d994344-300x250.png 300w, /wp-content/uploads/2016/09/92e741b3229f54ad2ccec77a5d994344.png 640w, /wp-content/uploads/2016/09/92e741b3229f54ad2ccec77a5d994344-207x173.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>よくあるトラブルとしては、Dockerを起動しているようなら終了させておくのが無難です。Dockerが利用しているポートとエミュレータが利用するポートがぶつかり、実行できないことがあります。</p>

<h3>iOS開発環境のインストール</h3>

<p>macOSを利用されていれば、iOSのエミュレータを利用するのは容易だと思います。</p>

<h4>Command Line Tools for Xcode</h4>

<p></p><pre class="crayon-plain-tag">$ sudo gem install xcodeproj
$ sudo gem install cocoapods
$ brew install xcproj</pre><p></p>

<p>だいぶ長くなりましたが、これで開発環境の設定は完了です。尚、tnsコマンドには<code>tns doctor</code>というコマンドがあります。環境設定などうまくできているかのチェックができますので、一通り終わった後に実行し、漏れがないかを確認します。</p>

<p></p><pre class="crayon-plain-tag">$ tns doctor
Verifying CocoaPods. This may take more than a minute, please be patient.
  ◡ Installing iOS runtime.tns-ios@2.2.1 ../../../../../../var/folders/ts/n268b_qx2j7g3ykzkqlj3jt00000gn/T/nativescript-check-cocoapods11686-1391-akcqo6/node_modules/tns-ios
  ◝ Verifying CocoaPods. This may take some time, please be patient..
Your components are up-to-date.

No issues were detected.
$</pre><p></p>

<h1>NativeScriptで作るHello World</h1>

<p>ここではNativeScriptを使ってHello World的なアプリケーションを作成します。手順は</p>

<ol>
<li>プロジェクトの作成</li>
<li>プラットフォームのインストール</li>
<li>エミュレータの実行</li>
</ol>

<p>です。NativeScriptでのアプリケーション作成には<code>tns</code>コマンドを使います。</p>

<p>今、プロジェクトを<code>MyFirstNativeScriptApp</code>としますので、iOSとAndroidアプリケションの両方を作成する場合にはiOSとAndroidのプラットフォーム用ライブラリをインストールしエミュレートを起動します。</p>

<p></p><pre class="crayon-plain-tag">$ cd ~
$ tns create MyFirstNativeScriptApp
$ cd MyFirstNativeScriptApp
$ tns platform add android
$ tns platform add ios
$ tns run android --emulator
$ tns run ios --emulator</pre><p></p>

<p>Androidエミュレータでの実行結果</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/MyFirstNativeScriptApp-Android.gif" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/MyFirstNativeScriptApp-Android.gif" alt="MyFirstNativeScriptApp-Android" width="200" height="300" class="alignnone size-medium wp-image-20720" /></a></p>

<p>iOSエミュレータでの実行結果</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/MyFirstNativeScriptApp-iOS.gif" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/MyFirstNativeScriptApp-iOS.gif" alt="MyFirstNativeScriptApp-iOS" width="200" height="300" class="alignnone size-medium wp-image-20721" /></a></p>

<p><code>tns create MyFirstNativeScriptApp</code>で作成されたファイルを確認します。</p>

<p></p><pre class="crayon-plain-tag">$ tree -L 2
.
├── app
│   ├── App_Resources
│   ├── app.css
│   ├── app.js
│   ├── main-page.js
│   ├── main-page.xml
│   ├── main-view-model.js
│   ├── package.json
│   └── references.d.ts
├── node_modules
│   ├── babel-traverse
│   ├── babel-types
│   ├── babylon
│   ├── lazy
│   ├── tns-core-modules
│   └── tns-core-modules-widgets
├── package.json
└── platforms
    ├── android
    └── ios</pre><p></p>

<p>このアプリケーションで特に重要なファイルがありますので、簡単に説明します。</p>

<ul>
<li>app.js</li>
<li>main-page.xml</li>
<li>main-page.js</li>
<li>main-view-model.js</li>
</ul>

<p><code>app.js</code>はアプリケーションが一番最初にロードするエントリーポイントで、このファイルからアプリケーション<code>main-page.js</code>の呼び出しを行っています。</p>

<p></p><pre class="crayon-plain-tag">// app.js
var application = require("application");
application.start({ moduleName: "main-page" });</pre><p></p>

<p></p><pre class="crayon-plain-tag">// main-page.js
var createViewModel = require("./main-view-model").createViewModel;

function onNavigatingTo(args) {
  var page = args.object;
  page.bindingContext = createViewModel();
}
exports.onNavigatingTo = onNavigatingTo;</pre><p></p>

<p><code>main-page.xml</code>は画面をXMLで定義し、関連する処理を<code>main-view-model.js</code>に定義してます。</p>

<p></p><pre class="crayon-plain-tag">&lt;!-- main-page.xml --&gt;
&lt;Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="onNavigatingTo"&gt;
  &lt;StackLayout&gt;
    &lt;Label text="Tap the button" class="title"/&gt;
    &lt;Button text="TAP" tap="{{ onTap }}" /&gt;
    &lt;Label text="{{ message }}" class="message" textWrap="true"/&gt;
  &lt;/StackLayout&gt;
&lt;/Page&gt;</pre><p></p>

<p></p><pre class="crayon-plain-tag">// main-view-model.js
var Observable = require(&quot;data/observable&quot;).Observable;

function getMessage(counter) {
  if (counter &lt;= 0) {
    return &quot;Hoorraaay! You unlocked the NativeScript clicker achievement!&quot;;
  } else {
    return counter + &quot; taps left&quot;;
  }
}

function createViewModel() {
  var viewModel = new Observable();
  viewModel.counter = 42;
  viewModel.message = getMessage(viewModel.counter);

  viewModel.onTap = function() {
    this.counter--;
    this.set(&quot;message&quot;, getMessage(this.counter));
  }

  return viewModel;
}

exports.createViewModel = createViewModel;</pre><p></p>

<h2>テンプレートを使って簡単なアプリケーションを作成する</h2>

<p>NativeScriptには、テンプレートを使ってプロジェクトを生成する機能があります。</p>

<p></p><pre class="crayon-plain-tag">$ tns create [Project Name] --template [Template Name]</pre><p></p>

<p>繰り返しになりますが、テンプレートを作成した後「プラットフォームのインストール」「エミュレータの実行」を行うとエミュレートで実行確認ができます。</p>

<p>このテンプレートはnpmに登録されています。が、まだあまり多くのテンプレートは定義されていないようです。その中から開発時に利用できそうなものを幾つかピックアップしました。具体的なコードは各テンプレートを使ってコードを生成し確認していただけると幸いです。</p>

<h3>タブを使ったアプリケーション</h3>

<p></p><pre class="crayon-plain-tag">$ tns create MyNextGreatApp --template tns-template-tab-navigation</pre><p></p>

<p>タブ切り替えのテンプレート部分は<code>TabView</code>タグを使い、各タブで表示する内容は<code>TabViewItem</code>で定義しています。</p>

<p></p><pre class="crayon-plain-tag">&lt;!-- main-page.xml --&gt;
&lt;Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="pageLoaded"&gt;
  &lt;TabView&gt;
    &lt;TabView.items&gt;
      &lt;TabViewItem title="First"&gt;
        &lt;TabViewItem.view&gt;
          &lt;StackLayout class="tab-content"&gt;
            &lt;Label text="First View" class="title"/&gt;
            &lt;Label text="This is the content of the first tab." textWrap="true"/&gt;
          &lt;/StackLayout&gt;
        &lt;/TabViewItem.view&gt;
      &lt;/TabViewItem&gt;
      &lt;TabViewItem title="Second"&gt;
        &lt;TabViewItem.view&gt;
          &lt;StackLayout class="tab-content"&gt;
            &lt;Label text="Second View" class="title"/&gt;
            &lt;Label text="This is the content of the second tab." textWrap="true"/&gt;
          &lt;/StackLayout&gt;
        &lt;/TabViewItem.view&gt;
      &lt;/TabViewItem&gt;
    &lt;/TabView.items&gt;
  &lt;/TabView&gt;
&lt;/Page&gt;</pre><p></p>

<p>Androidエミュレータでの実行結果</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/MyNextGreatApp-Android.gif" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/MyNextGreatApp-Android.gif" alt="MyNextGreatApp-Android" width="200" height="300" class="alignnone size-medium wp-image-20722" /></a></p>

<p>iOSエミュレータでの実行結果</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/MyNextGreatApp-iOS.gif" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/MyNextGreatApp-iOS.gif" alt="MyNextGreatApp-iOS" width="200" height="300" class="alignnone size-medium wp-image-20723" /></a></p>

<h3>一覧と詳細を表示するアプリケーション</h3>

<p></p><pre class="crayon-plain-tag">$ tns create MyMasterDetailApp --template tns-template-master-detail</pre><p></p>

<p>一覧と明細は<code>GridLayout</code>を使って表示する場所を定義し、一覧部分を表示するテンプレートは<code>ListView</code>を使っています。</p>

<p></p><pre class="crayon-plain-tag">&lt;!-- main-page.xml --&gt;
&lt;Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="pageLoaded"&gt;
  &lt;GridLayout rows="auto, *"&gt;
    &lt;Label text="Items Page" class="title" /&gt;

    &lt;ListView items="{{ items }}" itemTap="listViewItemTap" row="1"&gt;
      &lt;ListView.itemTemplate&gt;
        &lt;Label text="{{ title }}" class="listItem" /&gt;
      &lt;/ListView.itemTemplate&gt;
    &lt;/ListView&gt;
  &lt;/GridLayout&gt;
&lt;/Page&gt;</pre><p></p>

<p>明細部分は<code>details-page.xml</code>でレイアウトを定義していて、具体的な内容の表示には<code>details-view.xml</code>を使っています。</p>

<p></p><pre class="crayon-plain-tag">&lt;!-- details-page.xml --&gt;
&lt;Page xmlns="http://schemas.nativescript.org/tns.xsd"
      xmlns:app="."
      navigatedTo="pageNavigatedTo"&gt;
  &lt;app:details-view /&gt;
&lt;/Page&gt;</pre><p></p>

<p></p><pre class="crayon-plain-tag">&lt;!-- details-view.xml --&gt;
&lt;StackLayout  xmlns="http://schemas.nativescript.org/tns.xsd"&gt;
  &lt;Label text="{{ title }}" class="detail-title"/&gt;
  &lt;Label text="{{ info }}" class="info" textWrap="true"/&gt;
&lt;/StackLayout&gt;</pre><p></p>

<p>Androidエミュレータでの実行結果</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/MyMasterDetailApp-Android.gif" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/MyMasterDetailApp-Android.gif" alt="MyMasterDetailApp-Android" width="200" height="300" class="alignnone size-medium wp-image-20716" /></a></p>

<p>iOSエミュレータでの実行結果</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/MyMasterDetailApp-iOS.gif" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/MyMasterDetailApp-iOS.gif" alt="MyMasterDetailApp-iOS" width="200" height="300" class="alignnone size-medium wp-image-20717" /></a></p>

<h3>サイドメニュー付きアプリケーション</h3>

<p></p><pre class="crayon-plain-tag">$ tns create MyDrawerApp --template nativescript-template-drawer</pre><p></p>

<p>サイドメニュー付きアプリケーションを作成する場合には、サイドメニュー<code>drawer-content.xml</code>を定義し、メニューをクリックしたときの画面をそれぞれ定義しています。</p>

<p></p><pre class="crayon-plain-tag">&lt;!-- drawer-content.xml --&gt;
&lt;grid-layout class="drawer-content"&gt;
  &lt;stack-layout&gt;
    &lt;label text="Home" tap="navigate" class="{{ selectedPage == 'home' ? 'selected' : '' }}" /&gt;
    &lt;label text="About" tap="navigate" class="{{ selectedPage == 'about' ? 'selected' : '' }}" /&gt;
    &lt;label text="Settings" tap="navigate" class="{{ selectedPage == 'settings' ? 'selected' : '' }}" /&gt;
  &lt;/stack-layout&gt;
&lt;/grid-layout&gt;</pre><p></p>

<p>Androidエミュレータでの実行結果</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/MyDrawerApp-Android.gif" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/MyDrawerApp-Android.gif" alt="MyDrawerApp-Android" width="200" height="300" class="alignnone size-medium wp-image-20724" /></a></p>

<p>iOSエミュレータでの実行結果</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/MyDrawerApp-iOS.gif" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/MyDrawerApp-iOS.gif" alt="MyDrawerApp-iOS" width="200" height="300" class="alignnone size-medium wp-image-20725" /></a></p>

<h1>NativeScriptとAngular2を組み合わせる</h1>

<p>ここからが本記事の一番のポイント、「Angular2を使ったNativeScriptアプリケーション」に入ります。準備が長くて申し訳ありません！</p>

<p><a href="https://www.npmjs.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">npm</a>にはいくつかのAngular2を利用したNativeScriptのテンプレートがありますが、今回は<a href="http://docs.nativescript.org/angular/tutorial/ng-chapter-1#11-install-nativescript-and-configure-your-environment" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">NativeScriptのチュートリアル</a>を参考に、githubリポジトリーからテンプレートをcloneしたものを利用します。</p>

<h2>NativeScript with Angular2で作るHello World</h2>

<p>まずはリポジトリ<code>https://github.com/NativeScript/sample-Groceries</code>をcloneします。clone後、<code>angular-start</code>をcheckoutすると、NativeScript with Angular2で開発するための最も基本的な構成を得ることができます。</p>

<p></p><pre class="crayon-plain-tag">$ git clone https://github.com/NativeScript/sample-Groceries.git
$ cd sample-Groceries
$ git checkout angular-start
$ tree -L 2
├── app
│   ├── App_Resources
│   ├── app.component.ts
│   ├── app.css
│   ├── app.routes.ts
│   ├── main.ts
│   ├── package.json
│   ├── pages
│   ├── platform.android.css
│   ├── platform.ios.css
│   ├── shared
│   └── utils
├── package.json
├── platforms
│   └── ios
├── references.d.ts
└── tsconfig.json
$ tns platform add ios
$ tns platform add android
$ tns run ios --emulator
$ tns run android --emulator</pre><p></p>

<p>Androidエミュレータでの実行結果</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/bd526adedcc1d8bc115334228f13f924.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/bd526adedcc1d8bc115334228f13f924-186x300.png" alt="HelloWorld-Android" width="186" height="300" class="alignnone size-medium wp-image-20732" srcset="/wp-content/uploads/2016/09/bd526adedcc1d8bc115334228f13f924-186x300.png 186w, /wp-content/uploads/2016/09/bd526adedcc1d8bc115334228f13f924.png 397w, /wp-content/uploads/2016/09/bd526adedcc1d8bc115334228f13f924-128x207.png 128w" sizes="(max-width: 186px) 100vw, 186px" /></a></p>

<p>iOSエミュレータでの実行結果</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/9c8a45b0a1b5bb63648952bde5c36faa.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/9c8a45b0a1b5bb63648952bde5c36faa-200x300.png" alt="Helloworld-iOS" width="200" height="300" class="alignnone size-medium wp-image-20733" srcset="/wp-content/uploads/2016/09/9c8a45b0a1b5bb63648952bde5c36faa-200x300.png 200w, /wp-content/uploads/2016/09/9c8a45b0a1b5bb63648952bde5c36faa.png 427w, /wp-content/uploads/2016/09/9c8a45b0a1b5bb63648952bde5c36faa-138x207.png 138w" sizes="(max-width: 200px) 100vw, 200px" /></a></p>

<p>NativeScriptではBootstrapに特別なメソッド<code>nativeScriptBootstrap</code>を利用します。具体的にエントリーポイント<code>main.ts</code>は次のように記述されます。</p>

<p></p><pre class="crayon-plain-tag">// main.ts
import {nativeScriptBootstrap} from "nativescript-angular/application";
import {AppComponent} from "./app.component";

nativeScriptBootstrap(AppComponent);</pre><p></p>

<p>Angular2では、NativeScriptのXMLを<code>@Component.template</code>にディレクティブとして定義します。ただ<code>@Component.template</code>ではXMLをそのまま利用できないので、少し書き換える必要があります。具体的には&lt;foo /&gt;を&lt;foo&gt;&lt;/foo&gt;に書き換えるといった作業です。</p>

<p>具体的にこのサンプルの場合、XML定義では</p>

<p></p><pre class="crayon-plain-tag">&lt;Label text='hello world' /&gt;</pre><p></p>

<p>ですが、Angular2ではコンポーネントとして定義します。</p>

<p></p><pre class="crayon-plain-tag">// app.component.ts
import {Component} from "@angular/core";

@Component({
  selector: "my-app",
  template: "&lt;Label text='hello world'&gt;&lt;/Label&gt;"
})
export class AppComponent {}</pre><p></p>

<p><code>Label</code>はHTMLタグではなくNativeScriptで定義されたディレクティブです。NativeScriptでは幾つかのUIコンポーネントを定義していますので一覧にまとめます。</p>

<h2>UIコンポーネントのマッピング</h2>

<p>NativeScriptのUIコンポーネントは、iOSやAndroidのウィジェットにマッピングさせています。ビルドするとNativeScript with Angular2で定義したコンポーネントがマッピングされたiOSやAndroidのウィジェット変換されます。具体的な利用方法に関しては、<a href="http://docs.nativescript.org/angular/ui/components" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Native Script UI Components</a>を見ていただきたいと思います。</p>

<table>
<thead>
<tr>
  <th>NativeScript with Angular2</th>
  <th>Android</th>
  <th>iOS</th>
</tr>
</thead>
<tbody>
<tr>
  <td>Button</td>
  <td>android.widget.Button</td>
  <td>UIButton</td>
</tr>
<tr>
  <td>Label</td>
  <td>android.widget.TextView</td>
  <td>UILabel</td>
</tr>
<tr>
  <td>TextField</td>
  <td>android.widget.EditText</td>
  <td>UITextField</td>
</tr>
<tr>
  <td>TextView</td>
  <td>android.widget.EditText</td>
  <td>UITextView</td>
</tr>
<tr>
  <td>SearchBar</td>
  <td>android.widget.SearchView</td>
  <td>UISearchBar</td>
</tr>
<tr>
  <td>Switch</td>
  <td>android.widget.Switch</td>
  <td>UISwitch</td>
</tr>
<tr>
  <td>Slider</td>
  <td>android.widget.SeekBar</td>
  <td>UISlider</td>
</tr>
<tr>
  <td>Progress</td>
  <td>android.widget.ProgressBar</td>
  <td>UIProgressView</td>
</tr>
<tr>
  <td>ActivityIndicator</td>
  <td>android.widget.ProgressBar</td>
  <td>UIActivityIndicatorView</td>
</tr>
<tr>
  <td>Image</td>
  <td>android.widget.ImageView</td>
  <td>UIImageView</td>
</tr>
<tr>
  <td>ListView</td>
  <td>android.widget.ListView</td>
  <td>UITableView</td>
</tr>
<tr>
  <td>HtmlView</td>
  <td>android.widget.TextView</td>
  <td>UILabel</td>
</tr>
<tr>
  <td>WebView</td>
  <td>android.webkit.WebView</td>
  <td>UIWebView</td>
</tr>
<tr>
  <td>TabView</td>
  <td>android.support.v4.view.ViewPager</td>
  <td>UITabBarController</td>
</tr>
<tr>
  <td>SegmentedBar</td>
  <td>android.widget.TabHost</td>
  <td>UISegmentedControl</td>
</tr>
<tr>
  <td>DatePicker</td>
  <td>android.widget.DatePicker</td>
  <td>UIDatePicker</td>
</tr>
<tr>
  <td>TimePicker</td>
  <td>android.widget.TimePicker</td>
  <td>UIDatePicker</td>
</tr>
<tr>
  <td>ListPicker</td>
  <td>android.widget.NumberPicker</td>
  <td>UIPickerView</td>
</tr>
</tbody>
</table>

<h2>NativeScript + Angular2でHello World</h2>

<p>はじめに作成した「NativeScriptで作るHello World」のAngular2版のテンプレートがあります。アプリケーションの動きはまったく同じですがAngular2で書かれています。</p>

<p></p><pre class="crayon-plain-tag">$ tns create MyNgNativeScriptApp --template tns-template-hello-world-ng 
$ cd MyNgNativeScriptApp
$ tns platform add android
$ tns platform add ios
$ tns run android --emulator
$ tns run ios --emulator</pre><p></p>

<p>テンプレート部分を見比べると、XMLで書かれていたテンプレートコードがAngular2スタイルで記載されていることが理解でき、結果見通しのよいコードになっています。</p>

<p></p><pre class="crayon-plain-tag">&lt;!-- app.component.html --&gt;
&lt;StackLayout&gt;
  &lt;Label text="Tap the button" class="title"&gt;&lt;/Label&gt;
  &lt;Button text="TAP" (tap)="onTap()"&gt;&lt;/Button&gt;
  &lt;Label [text]="message" class="message" textWrap="true"&gt;&lt;/Label&gt;
&lt;/StackLayout&gt;</pre><p></p>

<p></p><pre class="crayon-plain-tag">// app.component.ts
import {Component} from "@angular/core";

@Component({
  selector: "my-app",
  templateUrl: "app.component.html",
})
export class AppComponent {
  public counter: number = 16;

  public get message(): string {
    if (this.counter &gt; 0) {
      return this.counter + " taps left";
    } else {
      return "Hoorraaay! \nYou are ready to start building!";
    }
  }
    
  public onTap() {
    this.counter--;
  }
}</pre><p></p>

<h2>Todosアプリケーション</h2>

<p>NativeScriptのサイトには、より多く機能が実装されたチュートリアル<a href="http://docs.nativescript.org/angular/tutorial/ng-chapter-0" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Building Apps with NativeScript and Angular 2</a>を提供しています。完成したアプリケーションは先ほどと同じリポジトリ<code>https://github.com/NativeScript/sample-Groceries</code>にありますので、是非見て下さい。</p>

<p></p><pre class="crayon-plain-tag">$ git clone https://github.com/NativeScript/sample-Groceries.git NgTodosNative
$ cd NgTodosNative
$ tns platform add ios
$ tns platform add android
$ tns run ios --emulator
$ tns run android --emulator</pre><p></p>

<p>Androidエミュレータでの実行結果</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/sample-Groceries-Android.gif" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/sample-Groceries-Android.gif" alt="sample-Groceries-Android" width="200" height="300" class="alignnone size-medium wp-image-20727" /></a></p>

<p>iOSエミュレータでの実行結果</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/09/sample-Groceries-iOS.gif" data-wpel-link="internal"><img src="/wp-content/uploads/2016/09/sample-Groceries-iOS.gif" alt="sample-Groceries-iOS" width="200" height="300" class="alignnone size-medium wp-image-20728" /></a></p>

<p>サンプルコードを読むと、NativeScriptで利用するnativeScriptBootstrapの使い方やNativeScript用のルーティング設定が記載されていたりとAngular2の特徴を活かした実装になっています。</p>

<p>今回は、環境設定からはじまり、NativeScriptを使ったもの、NativeScript wit Angular2へと進め、Hello World的なアプリケーションを動かすところまでをテンプレートを使いながら簡単に説明させていただきました。</p>

<h1>最後に</h1>

<p>NativeScriptの事例がないかと探してみましたが<a href="https://www.nativescript.org/showcases" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">NativeScript Showcases</a>にいくつかありました。このアプリケーションがAngular2をベースにしたものかはわかりませんが、NativeScriptを使ったものです。</p>

<p>NativeScriptのXMLで定義したUIコンポーネントが、コンパイル時にiOS、Androidのウィジェットにそれぞれマッピングされネイティブアプリにコンパイルされます（ちょっと古いですがXSLTを思い出しました）。Angular2の@Component.templateを利用することでNativeScriptがUIコンポーネントの定義を解釈し、ネイティブコードの生成を行っています。</p>

<p>ただし、NativeScript with Angular2用に作成したコンポーネントとNativeScriptを使わない通常のAngular2のコンポーネントとの相互再利用性は低いです。ですが、慣れたAngular2の構造を利用しTypeScript(もしくはJavaScript)で書けるというのは非常に興味が湧くところです。</p>

<p><strong>編集部よりお詫び</strong><br />
<small><strong>
2016/9/9 18:30 編集部が付けた以前のタイトルは、一部の方を不快にさせる可能性があるとの判断のもと、記事タイトルを変更いたしました。
執筆者の佐川さん、及び以前のタイトルを不快に感じた多くの方々に、深くお詫び申し上げます。
</strong></small></p>
]]></content:encoded>
		
		<series:name><![CDATA[Web技術でアプリ開発2016]]></series:name>
	</item>
		<item>
		<title>React及びその周辺技術、事例から見るReact最新情報！──HTML5とか勉強会イベントレポート</title>
		<link>/albatrosary/19288/</link>
		<pubDate>Mon, 13 Jun 2016 06:07:16 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Flux]]></category>
		<category><![CDATA[React.js]]></category>
		<category><![CDATA[Redux]]></category>
		<category><![CDATA[Relay]]></category>

		<guid isPermaLink="false">/?p=19288</guid>
		<description><![CDATA[5月31日、イベント＆コミュニティスペース dots.にて「第65回HTML5とか勉強会──React最新情報」が開催されました。React及びその周辺技術、事例からReactの最新情報をキャッチアップします。 Reac...]]></description>
				<content:encoded><![CDATA[<p>5月31日、イベント＆コミュニティスペース dots.にて「第65回HTML5とか勉強会──React最新情報」が開催されました。React及びその周辺技術、事例からReactの最新情報をキャッチアップします。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0120.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0120.jpg" alt="IMG_0120" width="600" height="400" class="alignnone size-full wp-image-19291" srcset="/wp-content/uploads/2016/06/IMG_0120.jpg 600w, /wp-content/uploads/2016/06/IMG_0120-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0120-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<h2>React現状確認</h2>

<p>＠koba04氏は「React現状確認」というタイトルで、現在、Reactの取り巻く状況を様々まとめて語りました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0141.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0141.jpg" alt="IMG_0141" width="600" height="400" class="alignnone size-full wp-image-19290" srcset="/wp-content/uploads/2016/06/IMG_0141.jpg 600w, /wp-content/uploads/2016/06/IMG_0141-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0141-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>皆さんご存知の通り、React.jsはFacebookが開発しているJavaScriptライブラリです。まず、Reactはどのようなアプリで利用されているかということからお話します。具体的な例として、まず挙げられるのが<a href="https://ja-jp.facebook.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Facebook</a>です。ここではバリバリに利用されていますし、<a href="https://www.instagram.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Instagram</a>では、アプリケーション全体がすべてReact.jsで作られていますので、<a href="https://facebook.github.io/react/blog/2015/09/02/new-react-developer-tools.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Reactのdevtool</a>を使って中身を見てみるとなかなか面白いかもしれません。</p>

<p><a href="https://www.netflix.com/jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Netflix</a>ではヘビーに利用されていて、テレビのレンダリング部分でも使われています。Twitter(mobile)も、React+Redux+React Routerの構成で利用されています。<a href="https://www.uber.com/ja/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">uber</a>では最近サイトをリニューアルし、そこでは先の構成にサーバサイドレンダリングなども利用しています。</p>

<p>どのような人がReact.jsを利用しているかというと、パフォーマンスが速いから使っているという人はあまりいない。それよりも宣言的なコンポーネント、ピュアなコンポーネントを定義するためといったことや、メンテナブルなUIを作るために使っている人が多いです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0150.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0150.jpg" alt="IMG_0150" width="600" height="400" class="alignnone size-full wp-image-19299" srcset="/wp-content/uploads/2016/06/IMG_0150.jpg 600w, /wp-content/uploads/2016/06/IMG_0150-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0150-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>その他、新しく実装された機能、現状議論されている多くの機能についてコメント。盛りだくさんなので具体的な内容については省略します。詳細な話については、当日の資料をご参照ください。</p>

<ul>
<li>Stateless Function Component</li>
<li>ES2015 Classes &amp; ES2015 Classes Components</li>
<li>React.createClass</li>
<li>React.PureComponent</li>
<li>A pitfall of shouldComponentUpdate</li>
<li>react-addons-perf</li>
<li>why-did-you-update</li>
<li>unstable_batchedUpdates</li>
<li>ReactElement</li>
</ul>

<p>最後に、ミーティングが毎週行われていて、ミーティングノートが１週間ごとに出しています。今後のReact.jsはライブラリとしてもっと小さくしていくことや、レンダラー部分についてどう改善していくかなど議論しています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0146.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0146.jpg" alt="IMG_0146" width="600" height="400" class="alignnone size-full wp-image-19300" srcset="/wp-content/uploads/2016/06/IMG_0146.jpg 600w, /wp-content/uploads/2016/06/IMG_0146-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0146-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p><a href="https://speakerdeck.com/koba04/the-state-of-react-dot-js-2016" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">the-state-of-react-dot-js-2016</a></p>

<h2>なぜReduxを使うのか</h2>

<p>＠kuy氏から、最近人気上昇中の<a href="https://github.com/reactjs/redux" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Redux</a>について、Reduxとはどういったものかを語りました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0174.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0174.jpg" alt="IMG_0174" width="600" height="400" class="alignnone size-full wp-image-19293" srcset="/wp-content/uploads/2016/06/IMG_0174.jpg 600w, /wp-content/uploads/2016/06/IMG_0174-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0174-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>Reduxが最近注目されている理由は、事例が多くなってきているのと、コミュニティが活発になってきているということが挙げられます。特に開発するための周辺ライブラリが充実し、機運が高まり、Reduxが注目され始めています。</p>

<p>反面、Twitter等でよく見かける投稿は、Reduxがつらい、Redux難しい、Reduxの良さがわからないという意見もあり、結果としてRedux大丈夫なのかと思わせてしまうようなことも起きています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0159.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0159.jpg" alt="IMG_0159" width="600" height="400" class="alignnone size-full wp-image-19305" srcset="/wp-content/uploads/2016/06/IMG_0159.jpg 600w, /wp-content/uploads/2016/06/IMG_0159-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0159-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>そこで、なぜReduxを使うのかということを整理してみます。特に、作者の<a href="https://twitter.com/dan_abramov" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Dan Abramov</a>さんいわく、「ライブラリの使い方に時間を費やすよりも背景にあるアイデアを学んで、他所に活用していこう」ということを訴えています。</p>

<h3>Fluxは何を解決したのか</h3>

<p>Fluxの考え方はご存知の方も多いとは思いますが、順番としてはまず、ViewからActionが投げられます。Dispatherはこの投げられたActionをStoreに投げるルーティングの役割をしています。StoreはActionを受け取ってStateを変更します。このStateの変更をViewが受け取って、Viewはその情報に従ってレンダリングを行うという流れです。</p>

<p>Fluxで解決したかったことは、基本的にはReact単体で構築したときに困ることを解決したかった、具体的には、バケツリレーという問題がありました。バケツリレーというのはコンポーネント階層が深くなったとき、例えば深い階層のコンポーネントへイベントを伝搬するときに、途中のコンポーネントには無関係にも関わらず、通過していくという問題がありました。</p>

<p>Stateをコンポーネントで持っている場合、他のコンポーネントへそのStateを渡したい場合、このコンポーネントの上位の親コンポーネントを作ねばならないという問題があった。何かするときに必ず親コンポーネントを作らないといけない。</p>

<h3>Reduxの何がいいのか</h3>

<p>FluxにはDispatcherが存在していましたが、ReduxではDispatcherがStoreの中に組み込まれていました。FluxでもStoreがあるが、ReduxではそのStoreを役割ごとに名前を変え、利便性を向上させたところがポイントです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_01681.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_01681.jpg" alt="IMG_0168" width="600" height="400" class="alignnone size-full wp-image-19306" srcset="/wp-content/uploads/2016/06/IMG_01681.jpg 600w, /wp-content/uploads/2016/06/IMG_01681-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_01681-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>では、より具体的にReduxのどこがいいのかというと、1つの大きなStateツリーを複数のReducerで構築しています。そして、状態管理だけに特化したところです。反面、それ以外は開発者に丸投げということになりますが、よく言えば開発者の状況に応じて開発できるということを意味します。</p>

<p>そして、状態管理に特化したということがあるので、Reduxを素の状態で利用するのはお勧めできないし、無理してReact, Action, Creator, Reducerで実装すると後で大変な思いをするということです。専用のMiddlewareを入れるといいとのことです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0172.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0172.jpg" alt="IMG_0172" width="600" height="400" class="alignnone size-full wp-image-19302" srcset="/wp-content/uploads/2016/06/IMG_0172.jpg 600w, /wp-content/uploads/2016/06/IMG_0172-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0172-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>※当日の資料は以下にアップされていますので、こちらも参照してください。</p>

<p><a href="https://speakerdeck.com/kuy/nazereduxwoshi-ufalseka" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">nazereduxwoshi-ufalseka</a></p>

<h2>Relay</h2>

<p>＠hokaccha氏による<a href="https://facebook.github.io/relay/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Relay</a>のお話です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0190.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0190.jpg" alt="IMG_0190" width="600" height="400" class="alignnone size-full wp-image-19294" srcset="/wp-content/uploads/2016/06/IMG_0190.jpg 600w, /wp-content/uploads/2016/06/IMG_0190-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0190-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>RelayはクライアントにReactを利用し、サーバにGraphQLを使ったものです。仕様としてまとめたものがGraphQL Relayで実装としては、react-relayとgraphgl-relayがあります。Relayをひと言で言えば、フルスタックなフレームワークです。Angularがよくフルスタックといわれますが、Angularはクライアントだけなので、Relayはサーバまでやっていますので、本当のフルスタックということになると思います。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0188.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0188.jpg" alt="IMG_0188" width="600" height="400" class="alignnone size-full wp-image-19307" srcset="/wp-content/uploads/2016/06/IMG_0188.jpg 600w, /wp-content/uploads/2016/06/IMG_0188-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0188-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>GraphQLとは、Facebookが開発したクエリ言語で、クライアント/サーバ間でデータのやり取りに利用されます。レイヤーとしてはREST/RPCと同じ位置付けになります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0204.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0204.jpg" alt="IMG_0204" width="600" height="400" class="alignnone size-full wp-image-19310" srcset="/wp-content/uploads/2016/06/IMG_0204.jpg 600w, /wp-content/uploads/2016/06/IMG_0204-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0204-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>RESTと違って、リクエストに対するレスポンスのフィールドが1:1対応しているところです。そうすると、必要なフィールドだけを選択可能となり、ネスとしたデータを一発で抽出できることや、型定義が存在するなどメリットがあります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0207.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0207.jpg" alt="IMG_0207" width="600" height="400" class="alignnone size-full wp-image-19308" srcset="/wp-content/uploads/2016/06/IMG_0207.jpg 600w, /wp-content/uploads/2016/06/IMG_0207-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0207-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>Relayの特徴は、そのサイトにも書いてある通り3つあります。</p>

<ul>
<li>DECLARATIVE</li>
<li>COLOCATION</li>
<li>MUTATIONS</li>
</ul>

<p>しかし、Relayは敷居が高いと思います。例えば、GraphQLを覚えて、ちょっとしたアプリを作るにもGraphQLのサーバが必要になりいろいろと大変になる。そしてやっている人もあまりいないので、資料を探すとちょっと大変な思いをします。Relayの期待として、真のフルスタックなフレームワークになり、次世代のRailsになれる可能性があるかもしれないかもしれないです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0222.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0222.jpg" alt="IMG_0222" width="600" height="400" class="alignnone size-full wp-image-19309" srcset="/wp-content/uploads/2016/06/IMG_0222.jpg 600w, /wp-content/uploads/2016/06/IMG_0222-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0222-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>※当日の資料は以下にアップされていますので、こちらも参照してください。</p>

<p><a href="https://speakerdeck.com/hokaccha/relay-1" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">relay-1</a></p>

<h2>How to style React components</h2>

<p>＠Quramy氏からは、コンポーネント内にあるCSSの話がありました。同氏はメインサービスとしてはAngularを使っているが、社内系ツールではReactを使っています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0229.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0229.jpg" alt="IMG_0229" width="600" height="400" class="alignnone size-full wp-image-19295" srcset="/wp-content/uploads/2016/06/IMG_0229.jpg 600w, /wp-content/uploads/2016/06/IMG_0229-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0229-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>UI Componentと呼ばれるものの特徴は、見た目と振る舞いがまとめて提供されていて、適度にカプセル化されているものです。そうなると再利用性が高くなり、保守しやすくなるところに期待があります。このコンポーネントは多くのJSフレームワークでサポートされています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0238.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0238.jpg" alt="IMG_0238" width="600" height="400" class="alignnone size-full wp-image-19311" srcset="/wp-content/uploads/2016/06/IMG_0238.jpg 600w, /wp-content/uploads/2016/06/IMG_0238-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0238-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>Style定義は、とても壊れやすいです。コンポーネントの外部から、CSSを破壊することが簡単にできるからです。つまり、React.Componentを使っただけでは、CSSが適切にカプセル化されているわけではないのです。この問題は、CSSセレクタがGlobalであることが最大の問題だと言えます。この問題解決のために、</p>

<ul>
<li>CSS命名規約</li>
<li>Web Component(Shadow DOM)</li>
<li>CSS in JS</li>
<li>CSS Modules</li>
</ul>

<p>ということが挙げられます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0244.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0244.jpg" alt="IMG_0244" width="600" height="400" class="alignnone size-full wp-image-19312" srcset="/wp-content/uploads/2016/06/IMG_0244.jpg 600w, /wp-content/uploads/2016/06/IMG_0244-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0244-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<h3>CSS in JS</h3>

<p>CSS in JSは、Christopher Chedeauが2014年に発表しました。ReactはJSXでテンプレートをJavaScriptに取り込むことに成功したので、CSSもJavaScriptに取り込めばいいのではということから始まりました。CSS class名を利用しないでinline-styleを利用することで、Styleをコンポーネントに閉じ込めることが可能になり、問題の発生がなくなります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0252.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0252.jpg" alt="IMG_0252" width="600" height="400" class="alignnone size-full wp-image-19314" srcset="/wp-content/uploads/2016/06/IMG_0252.jpg 600w, /wp-content/uploads/2016/06/IMG_0252-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0252-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>こうした考えは、他にもいくつかメリットがあります。デメリットとしては、擬似要素セレクタや擬似クラスセレクタなど、インラインスタイルで定義できないようなものは利用できません。</p>

<h3>CSS Modules</h3>

<p>Glen Maddernが2015年に定評しました。CSS in JSはJavaScriptでStyleを生成したのに対し、CSS ModulesはCSSをJavaScriptから利用するというアプローチを取っています。CSSでできることは、CSSでやろうと言ったところです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0257.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0257.jpg" alt="IMG_0257" width="600" height="400" class="alignnone size-full wp-image-19313" srcset="/wp-content/uploads/2016/06/IMG_0257.jpg 600w, /wp-content/uploads/2016/06/IMG_0257-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0257-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>CSSで定義された名前を論理名として扱い、JavaScriptでimportし、その定義を読み込みます。JavaScriptが実行されるときに内部的に付与した名前に書き換え、容易に破壊できないようにしています。</p>

<p>※当日の資料は以下にアップされていますので、こちらも参照してください。</p>

<p><a href="https://quramy.github.io/react-css-note/#/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">react-css-note</a></p>

<h2>Atomic Design powered by React @AbemaTV</h2>

<p>五藤佑典氏による＠AbemaTVの事例紹介です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0280.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0280.jpg" alt="IMG_0280" width="600" height="400" class="alignnone size-full wp-image-19296" srcset="/wp-content/uploads/2016/06/IMG_0280.jpg 600w, /wp-content/uploads/2016/06/IMG_0280-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0280-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>＠AbemaTVはサイバーエージントとテレビ朝日が共同で展開していて、多様なコンテンツがあります。AbemaTVでは、開発の初めスマホアプリで開発は進んでいましたが、Web版はなく仕様が決まっていませんでした。しかし、リリース日は決まっているという状態でした。</p>

<p>このような状況では、作っていくうちに画面変更が多々入るのがわかっていたので、わかるところから作るという方針でせめて行きました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0273.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0273.jpg" alt="IMG_0273" width="600" height="400" class="alignnone size-full wp-image-19315" srcset="/wp-content/uploads/2016/06/IMG_0273.jpg 600w, /wp-content/uploads/2016/06/IMG_0273-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0273-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>画面仕様の変更に強いコンポーネントの粒度を、チームで明確化したいという欲求が出てきました。ATOMIC DESIGNを参考にしました。ATOMIC DESIGNとは、UIコンポーネントの要素を化学の原子論的な要素に見立て、小さいシンプルなコンポーネントを組み合わせより大きなコンポーネントを構成するデザインシステムのことです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0282.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0282.jpg" alt="IMG_0282" width="600" height="400" class="alignnone size-full wp-image-19316" srcset="/wp-content/uploads/2016/06/IMG_0282.jpg 600w, /wp-content/uploads/2016/06/IMG_0282-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0282-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>ATOMIC DESIGNの考え方を適用しグローバルナビ、リモコン、スライダー、アイコンなどを作っていきました。こうして作ったAbemaTVの細かな画面変更に関し粒度がある程度細かったため、変更は割とスムーズにできたというところがこのシステムを採用した良い結果だったと考えています。チーム開発において個人の感覚に依存しない形で行えたことは、プロジェクトがうまくいった要素であります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0286.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0286.jpg" alt="IMG_0286" width="600" height="400" class="alignnone size-full wp-image-19317" srcset="/wp-content/uploads/2016/06/IMG_0286.jpg 600w, /wp-content/uploads/2016/06/IMG_0286-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0286-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>@AbemaTVはReact+Flux+Atomic Designですが、ViewでReactとAtomic Designを利用し、StoreでImmutable.js、DespatcherでRxJSを使っています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0287.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0287.jpg" alt="IMG_0287" width="600" height="400" class="alignnone size-full wp-image-19318" srcset="/wp-content/uploads/2016/06/IMG_0287.jpg 600w, /wp-content/uploads/2016/06/IMG_0287-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0287-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>当日の資料は以下にアップされていますので、こちらも参照してください。</p>

<p><a href="http://www.slideshare.net/ygoto3q/atomic-desigin-powered-by-react-abematv" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">atomic-desigin-powered-by-react-abematv</a></p>

<h2>最後に</h2>

<p>このレポートではイベントが盛りだくさんだったため、内容の細かなところまでは記載できませんでした。各登壇者の資料もアップされていますので、合わせて見ていただけると幸いです。また、<a href="https://www.youtube.com/watch?v=C8bMahvTkHA" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">html5j配信班による動画</a>もありますので、参照してください。</p>

<p>本イベントとは関係ありませんが、2016年のHTML5カンファレンスが9月3日（土）東京電気大学に決まりました！乞うご期待！！</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0118.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0118.jpg" alt="IMG_0118" width="600" height="400" class="alignnone size-full wp-image-19297" srcset="/wp-content/uploads/2016/06/IMG_0118.jpg 600w, /wp-content/uploads/2016/06/IMG_0118-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0118-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
]]></content:encoded>
			</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>進化の早い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>
		<item>
		<title>モダンWeb：たった今と、ほんの少し未来のはなし～「de:code 2016」セッションレポート～</title>
		<link>/albatrosary/19092/</link>
		<pubDate>Wed, 25 May 2016 07:48:45 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Progressive Web Apps]]></category>
		<category><![CDATA[SPA]]></category>
		<category><![CDATA[Web Components]]></category>
		<category><![CDATA[de:code]]></category>

		<guid isPermaLink="false">/?p=19092</guid>
		<description><![CDATA[連載： de:code 2016 特集 (3)この記事は、「de:code2016」のセッションレポート、日本マイクロソフトエバンジェリスト物江修氏による「モダン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> (3)</div><p>この記事は、「<a href="https://www.microsoft.com/ja-jp/events/decode/2016/default.aspx" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">de:code2016</a>」のセッションレポート、日本マイクロソフトエバンジェリスト物江修氏による「モダンWeb:たった今と、ほんの少し未来のはなし」です。講演内容を再現していますが、ニュアンス等伝えきれない場合があるかもしれません。ご了承ください。</p>

<h1>モダンWebとは</h1>

<p>昨今、様々なところで「モダンWeb」という言葉を聞くが、その定義は曖昧で意味するところの範囲が広範囲に及んでいるためではないかと考える。多くの場合、「モダンWeb」という文脈で語られている内容は次の４つの事柄で語られている。</p>

<ul>
<li>モダンなWebシステム</li>
<li>モダンな開発手法</li>
<li>モダンな標準機能</li>
<li>モダンなアプリケーション</li>
</ul>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC03848.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC03848-640x480.jpg" alt="DSC03848" width="640" height="480" class="alignnone size-large wp-image-19104" srcset="/wp-content/uploads/2016/05/DSC03848.jpg 640w, /wp-content/uploads/2016/05/DSC03848-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC03848-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>単にモダンWebアプリケーションと言った場合にはこれらいろいろな意味に捉えることが多いが、このように四つに分けることができる。このセッションでは、アプリケーションを開発するのに必要な「モダンなWeb標準の機能」、「モダンなWebアプリケーション」に関して触れる。</p>

<h1>なぜ「モダンWeb」が話題になっているのか</h1>

<p>第一に挙げられることは「時代の要求」。具体的には以下の3つが挙げられる。</p>

<ul>
<li>Web技術の進化</li>
<li>コンテンツのリッチ化</li>
<li>クライアントの多様化</li>
</ul>

<p>Web技術で作るリッチなUIは昔から存在していたが、以前はFlashなどのプラグインを利用したいわゆるRIA(Rich Internet Applications)のほうが優勢だった。その後、Ajaxでデータを取得し、そのデータを使って部分的なUIの更新が可能になり、jQuery UIなどのUIライブラリによる開発生産性の向上、そしてHTML5の登場によって、プラグインで行っていたことがWebの標準技術だけで作ることが可能になった。これがWeb技術の進化である。</p>

<p>そしてスマートフォンから始まったFlashの衰退が進み、今までFlashで行っていたような要求をWebコンテンツ側にやってくるようになり、コンテンツのリッチ化が始まった。</p>

<p>スマートフォンを始め、PCブラウザー以外の様々なものがインターネットに繋がり、クライアントが多様化した。</p>

<p>この「クライアントの多様化」はサーバーサイドの形態にも影響を与え、その影響が、Webブラウザー上で動くアプリケーションにも影響を与えたという状況になっている。具体的にどういうことなのか。</p>

<p>黎明期のWebアプリケーションは、リクエストされたページを単純にレスポンスするというもの。ちなみに一番最初のWebサーバーはティム・バーナーズ・リーが作った「CERN Httpd」で、1991年にニュースグループで公開されたが、翌年に作られた「NCSA Httpd」ではCGIがサポートされ、動的ページが作れるようになった。ご存知の通り、このサーバーサイドで処理をして、処理結果をページで返すWebアプリケーションは広く使われている。</p>

<p>さらに、新しいクライアントとして携帯電話が現れる。NTT Docomoから始まった携帯電話は、それまでWebのクライアントというと、PCブラウザかゲーム機くらいで、いずれも机に座って使うようなものだった。</p>

<p>しかし、携帯電話は持ち歩き、行動に必要な情報を得るためのツールとして機能するモビリティという考え方が生まれた。</p>

<p>今までとは利用用途が異なる、サーバーではデバイスに応じた専用のコンテンツを作る必要があるなどコンテンツを作っていくには困難な状況だった。</p>

<p>やがて、スマートフォンに代表されるスマートデバイスが現れます。これらは、PCブラウザー用のコンテンツを同じ様に処理することができたので、わざわざ専用のコンテンツを用意しなくても済む。問題は、画面サイズに応じて表示を切り替える必要があり、同時期に出てきたHTML5関連技術であるCSS3を使ったレスポンシブWebデザインで、こうした技術を吸収することができた。</p>

<p>さらにスマートフォンは、サーバーサイドの処理にさらに大きな変化をもたらした。</p>

<p>Webアプリケーションの登場です。サーバにリクエストを投げるが、必要とするのはページではなくデータでした。この影響を受け、Webサーバーに必要な技術は、データを返す「API」が重要になった。</p>

<p>現在では、クライアントデバイスの性能とWebブラウザーの機能も数段上がり、処理性能ではネイティブで作られたアプリケーションと同等なことができるようになった。</p>

<h1>SPA(Single-page Application)</h1>

<p>単一ページによるWebアプリケーションであるSPAの特徴は、以下が挙げられる。</p>

<ul>
<li>画面遷移はDOM操作</li>
<li>ページのリフレッシュは不要</li>
<li>リッチなエクスペリエンス</li>
</ul>

<p>SPAにするメリットもいくつかある。例えば、サーバーサイドを「サービス化」することによって、多様化していくクライアントにも対応できるようになる。つまり、サービスをどこにでも提供できポータビリティを上げることができる。</p>

<p>現在のようにクライアント技術の進化が劇的に早い（言い換えると、陳腐化する速度も早い）状況下でもSPAは有効だ。クライアントとサーバーのロジックを物理的に別けることで保守性を上げることができるから。さらに分業においては、サーバーサイドを開発する人間、クライアントサイドを開発する人間で、やるべきことに集中できるということが挙げられる。</p>

<h1>プログラミングスタイルの変化</h1>

<p>SPAの登場によつてプログラミングのスタイルも少なからず変化している。Ajaxなどの非同期処理を行う場合、処理の単位はサーバーサイドの動作と必ずしも一致せず、処理の順番やタイミングもまちまちになる。それらを適切にハンドリングして画面に描画する必要がある。</p>

<p>さらに、ユーザーアクションの開始が、いわゆるPull型（サーバにリクエストするという意味で）だったが、WebRTCやWebSocketsの登場にによって、突発的に開始されるPush型（サーバからクライアントに通知する）可能性もある。</p>

<p>非同期処理の完了であるが JavaScriptではイベント通知で行われる。また、今まではサーバーロジックで行われていた処理をクライアントで行うケースも出てくるので、1つの完結する処理を行う場合、複数回サーバーとやり取りする必要がある。よく「コールバック地獄」ということに陥る。</p>

<p>不規則に発生するイベントを適切にルーティングしつつ、状態を把握し、かつ処理全体を制御する仕組みが必要で、こういった制御を行うために、JavaScriptのライブラリやフレームワークが様々な機能を実装し提供している。</p>

<p>そして、最新のモダンブラウザーがサポートしつつあるECMA Script2015や2016にも、こうした機能が標準で用意されようとしている。つまりイベントのフロー制御方法は</p>

<ul>
<li>Promise(ES2015)</li>
<li>async/await(ES2016)</li>
<li>Generator/yield(ES2015)</li>
</ul>

<p>Promiseは非同期処理を抽象化したオブジェクトでPromiseパターンで非同期処理を行う。async/awaitは、Promise とGeneratorの糖衣構文で、そのGenerator/yieldは、反復子 (イテレータ )の生成元で、実行環境を維持したま中断・再開が可能となる。</p>

<p>SPAでは画面のレンダリングも従来のサーバーサイドの処理をメインしたものとは異なる。</p>

<p>SPA以前のサーバーサイドでページが生成されるタイプのWebアプリケーションでは、画面データの成形もサーバーサイドで行われていましたが、SPAではその部分をクライアントサイドで行うことになる。</p>

<p>素直に書くなら、エレメント一つひとつのインスタンスを取得して、各々データをセットする所謂「Glue code」を書く（&#8221;グルー&#8221;とは糊のこと）ことになる。だが、これだとエレメント変更に関わるUI仕様があるたびにコードまで修正する必要がありメンテナンスが大変だし、いちいちデータを入れるためだけのコードを書くということ自体が非効率。</p>

<h2>データバインディング</h2>

<p>そこで出てきたのがUIへのデータバインドです。
マークアップにUIとデータの関係を記述しておくと、JavaScriptフレームワークがよしなにデータをセットしてくれるという仕組みです。
こうすることで、データと画面、いわゆる ModelとViewの関係を1:1に紐づけ、構造的には明確に分け部品化することが可能になった。</p>

<p>&#8220;バインド&#8221;とあるように、ModelとViewの関係を保持します。つまり、モデルもしくはビューに変更が発生した場合、その変更が一方向、あるいは双方向に反映されます。Modelの変更のみかViewに反映されるのが1Wayバインドで、双方向に変更が伝わるのが2Wayバインドです。</p>

<p>まとめるとモダンなWebアプリケーションとは</p>

<ul>
<li>SPA</li>
<li>リアクティブな動作</li>
<li>M-V-Whatever</li>
</ul>

<h1>少し先のWebアプリケーションの技術的コンセプト</h1>

<p>ここからは、ここ数年提唱されているWebアプリケーションの技術的コンセプトについて紹介します。</p>

<ul>
<li>Web Components</li>
<li>Progressive Web Apps</li>
<li>WebAssembly</li>
</ul>

<h2>Web Components</h2>

<p>まずは「Web Components」です。これはWebをコンポーネント化する仕組みで、2013年のGoogle I/Oで紹介された。実は、Webをコンポーネント化するという仕組みは、これが最初ではなく、マイクロソフトも1998年にHTMLコンポーネントというものを提案したし、Mozillaも2001年にXBLと2007年にXBL2というのを提案した。</p>

<p>このコンポーネント化のメリット、目的について</p>

<p>Webのアプリケーションは、他のソフトウェア・アプリケーションと同様に複雑になり、今ではリリース製品の開発に大勢が協力して取り組むことは珍しくなくなった。少しでも効率化を図るには、関係者やシステム間の重複が最小限になるように開発作業を分割する正しい方法を見つけることが重要になる。そのための方法としてコンポーネント化がある。複雑なシステムでも、機能を分割していけば、単純化することができる。全体をある程度の機能単位に分割する、つまりはコンポーネント化だ。</p>

<p>Web Componentsの目標は、HTML、CSS、JavaScriptの関連グループを分離し、単一ページのコンテキスト “内” で共通関数を実行することで、複雑さを軽減することだ。</p>

<p>この Web Components は、複数の API を組み合わせるか、それ単独を使用して実現する。
しかし、すべての Web ブラウザーがその API をサポートしているわけではないので、Polyfill 用のライブラリーが用意されています。</p>

<p>そしてこちらがWeb Componentsを構成する要素です。</p>

<ul>
<li>HTML Templates</li>
<li>Shadow DOM</li>
<li>Custom Elements</li>
<li>HTML Imports</li>
</ul>

<p>現在のサポートの状況はこのようになっています。</p>

<table>
<thead>
<tr>
  <th>Web Components</th>
  <th>Edge 13</th>
  <th>Chrome 50</th>
  <th>Firefox 45</th>
  <th>Safari 9.1</th>
</tr>
</thead>
<tbody>
<tr>
  <td>HTML Templates</td>
  <td>○</td>
  <td>○</td>
  <td>○</td>
  <td>×</td>
</tr>
<tr>
  <td>Shadow DOM</td>
  <td>× Medium</td>
  <td>○</td>
  <td>△※</td>
  <td>×</td>
</tr>
<tr>
  <td>Custom Elements</td>
  <td>× High</td>
  <td>○</td>
  <td>△※</td>
  <td>×</td>
</tr>
<tr>
  <td>HTML Imports</td>
  <td>× Low</td>
  <td>○</td>
  <td>△※</td>
  <td>×</td>
</tr>
</tbody>
</table>

<p>※ 既定では動作しない</p>

<h2>Progressive Web Apps</h2>

<p>これはモバイル Web アプリ向けのコンセプトで、具体的には、高性能のモバイルWebブラウザー向けにネイティブアプリケーションのようなUXを提供しようというも。去年の「Chrome Dev Summit」のキーノートで発表され話題になったものだ。今年の４月に行われた「Google Developers Summit Tokyo 2016」でも2日のテーマになっていたくらい力を入れている。</p>

<p>Progressive Web Appsに求められる体験をまとめると次の様なもの</p>

<ul>
<li>ネイティブアプリケーションのようなUX

<ul>
<li>オフラインサポート: Service Worker</li>
<li>プッシュ通知: Web Notifications/Push API</li>
<li>ホームスクリーンにアイコンの追加: Web App Manifest</li>
<li>バックグラウンド: Service Worker</li>
<li>高速でなめらかなインターフェース: CSS3 Animation</li>
</ul></li>
</ul>

<p>Service Workerは、JavaScriptで実装されているローカルのプロキシ、あるいはApplication Cacheの改良版として利用できる。
いままで Web ブラウザーからサーバーにコンテンツをリクエストする場合、サーバーになげてそれを返していたのが、その間にカスタマイズ可能な Service Worker というのが入って
バックグラウンドで動いているので、タブを閉じてもブラウザを終了しても動作しているので、プッシュ通知もうけとれるとこと。httpsでしか動作しない。</p>

<p>Progressive Web Appsを実現する技術のサポート状況は</p>

<table>
<thead>
<tr>
  <th>Edge</th>
  <th>Chrome</th>
  <th>Firefox</th>
  <th>Safari</th>
</tr>
</thead>
<tbody>
<tr>
  <td>Internal build</td>
  <td>Canary 51.0.2677.0</td>
  <td>Nightly</td>
  <td>&#8211;</td>
</tr>
</tbody>
</table>

<h3>WebAssenbly</h3>

<p>WebAssenblyは、コンパイル済みのバイナリをWebブラウザ上で直接動作させる仕組で、Microsoft、Google、Mozilla、Webkitプロジェクトのメンバーで共同開発されていて足並みが揃っている。</p>

<p>JavaScriptよりもポータブルでロード時間や実行に対するパフォーマンスに優れたアプリケーションを作ることが可能だ。asm.jsの次のステップとしている。</p>

<p>2016/3/14〜16の間にMicrosoft、Google、Mozillaの3社が3Dゲーム<a href="http://webassembly.github.io/demo/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Angry bot</a>での検証結果を各ブログで公開している。</p>

<p>WebAssemblyの実装状況は</p>

<table>
<thead>
<tr>
  <th>WebAssembly</th>
  <th>Edge 13</th>
  <th>Chrome 50</th>
  <th>Firefox 45</th>
  <th>Safari 9.1</th>
</tr>
</thead>
<tbody>
<tr>
  <td>Service Workers</td>
  <td>× High</td>
  <td>○</td>
  <td>○</td>
  <td>×</td>
</tr>
<tr>
  <td>Fatch API</td>
  <td>△ Preview</td>
  <td>○</td>
  <td>○</td>
  <td>×</td>
</tr>
<tr>
  <td>Web Notifications</td>
  <td>△ Preview</td>
  <td>○</td>
  <td>○</td>
  <td>×</td>
</tr>
<tr>
  <td>Push API</td>
  <td>× High</td>
  <td>○</td>
  <td>○</td>
  <td>×</td>
</tr>
<tr>
  <td>Web Application Manifest</td>
  <td>検討中</td>
  <td>○</td>
  <td>○</td>
  <td>×</td>
</tr>
</tbody>
</table>

<h2>ハイブリッドアプリケーションとしての利用</h2>

<p>Webアプリケーションが苦手とするところは</p>

<ul>
<li>ストアのエコシステムを利用しない</li>
<li>Webブラウザからはどうしてもアクセスできないハードウェアリソース</li>
</ul>

<p>そしてこれらの Web アプリケーションのは、ハイブリットアプリとしてパッケージすることにより、ターゲットとなるプラットフォームのリソースや、ブラウザーからはアクセスできないハードウェアの機能を使用できるようになる。
また、アプリストアのエコシステムを利用することができる。</p>

<h2>Webフロントエンドの開発リソース</h2>

<p>インタラクティブなコンテンツを作ることができるようになったので、開発は非常に大変なものになった。</p>

<ul>
<li>JavaScript

<ul>
<li>ライブラリ</li>
<li>フレームワーク</li>
<li>エンジンテンプレート</li>
<li>altJS</li>
</ul></li>
<li>CSS

<ul>
<li>フレームワーク</li>
<li>プリプロセッサー</li>
</ul></li>
<li>HTML

<ul>
<li>軽量マークアップ</li>
</ul></li>
<li>パッケージマネージャ</li>
<li>タスクランナー</li>
<li>モジュール管理</li>
</ul>

<p>Richになったことで多くのライブラリが提供された結果「Chaos」になったのか？と思いがち。そして、ライブラリ/フレームワークの選定として考える必要がある。</p>

<ul>
<li>ブラウザサポート</li>
<li>ベンダーサポート</li>
<li>情報

<ul>
<li>ドキュメント</li>
<li>書籍類</li>
</ul></li>
<li>学習コスト</li>
<li>開発生産性</li>
<li>機能範囲</li>
<li>ロックイン</li>
<li>運用コスト</li>
</ul>

<p>特にこの中のロックインですが、ロックインは決して悪いものではなく、優秀なベンダーと一緒になってやっていくこと、コミュニティの力を借りることでむしろ良い状況も作れる。運用コストに関しては、便利なんだけどお金がかかるというものについては考えもの。</p>

<h2>標準技術は不変</h2>

<p>結局、Webブラウザで動作するのは、HTML、CSS、JavaScriptであり、ブラウザがサポートしていない機能は動かない。技術はあくまでも「手段」でり、そうした技術に対する勉強は大事だが、手段であって目的ではない。目的は、ユーザに対して良いプロダクトを提供すること。たとえば、YouTubeはFlashで作られていたが、HTML5に変わったことに気づいた人はいない、そういうものが良い。</p>

<p>そして、WebはApplicationのプラットフォームになる。どんどん低レベルなAPIを実装することになる。結果、デスクトップと同じ様なアプリケーションを作っていける。こうした変貌は「変化」ではなく「拡張」である。</p>
]]></content:encoded>
		
		<series:name><![CDATA[de:code 2016 特集]]></series:name>
	</item>
		<item>
		<title>止まらないMicrosoftの変革：デベロッパーと共に 〜 de:code基調講演レポート 〜</title>
		<link>/albatrosary/19014/</link>
		<pubDate>Tue, 24 May 2016 05:10:37 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[de:code]]></category>

		<guid isPermaLink="false">/?p=19014</guid>
		<description><![CDATA[連載： de:code 2016 特集 (2)編集長の白石さんに続き、エキスパートの佐川がde:codeをレポート。 「すべての人の可能性を拡げるモバイルファースト、クラウドファーストの世界」をテーマに行われたde:co...]]></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> (2)</div><p>編集長の白石さんに続き、エキスパートの佐川がde:codeをレポート。</p>

<p>「すべての人の可能性を拡げるモバイルファースト、クラウドファーストの世界」をテーマに行われたde:code基調講演は、静なる改革者 米国本社CEOのサティア ナデラ(Satya Nadella)氏の素晴らしい基調講演の後、スティーブングッゲンハイマー(Steven Guggenheimer)氏が具体的な事例とともに紹介した。
<a href="https://www.microsoft.com/ja-jp/events/decode/2016/default.aspx" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">de:code</a>は5/24-25の2日プリンスパークタワー東京で開催された。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/decode2016.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/decode2016-640x214.png" alt="decode2016" width="640" height="214" class="alignnone size-large wp-image-19032" srcset="/wp-content/uploads/2016/05/decode2016.png 640w, /wp-content/uploads/2016/05/decode2016-300x100.png 300w, /wp-content/uploads/2016/05/decode2016-207x69.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>de:code2016では、IT技術者の多くが、昨年から始まったMicrosoftの変革を疑わなくなり、更に変貌するMicrosoftのすべてをキャッチアップできる。ただ残念なことにコンテンツが多すぎて全てを見て回ることができない！分身の術が欲しくなるほど興味深いセッションが目白押しです。それをMicrosoftも理解しているのか「<a href="http://aka.ms/decode2016_arukikata" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">de:code 2016の歩き方</a>」もあり、すべてのIT技術者が戸惑うことなく適したコンテンツを見られるよう工夫がされています。</p>

<h1>Microsoftが示すオープンイノベーション</h1>

<p>初めに サティア ナデラ氏 が開発者やインフラ エンジニアの創造力を最大限に活かす方法について、世界に大きな影響力を与える日本国内の事例を交えて、そのソリューションの紹介がありました。米国本社VP(Vice President)スティーブングッゲンハイマー(Steven Guggenheimer)をはじめ、日本マイクロソフトの統括本部長 伊藤かつら氏、最高技術責任者の榊原彰氏が登壇し、オープンソース コミュニティやパートナーエコシステム、そして経済成長の機会を確実にとらえる最新のプラットフォーム イノベーションが紹介され、日本市場でこれらがどのようにビジネスやエンジニアの変革をMicrosoftとして手助けできるのかを、豊富なデモを交えて解説してくれた。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC03720.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC03720-640x480.jpg" alt="DSC03720" width="640" height="480" class="alignnone size-large wp-image-19034" srcset="/wp-content/uploads/2016/05/DSC03720.jpg 640w, /wp-content/uploads/2016/05/DSC03720-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC03720-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h2>デベロッパーは何ができるのか</h2>

<p>Microsoftがデベロッパーに対して、どういった活動をしているのかを説明してくれた。</p>

<ol>
<li>Microsoftはコミュニティとデベロッパーとどういうことをしているか</li>
<li>Microsoftは何を作って、どういう需要に対応しているのか</li>
<li>テクノロジーを使って個人として何ができるのか</li>
</ol>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC03725.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC03725-640x480.jpg" alt="DSC03725" width="640" height="480" class="alignnone size-large wp-image-19053" srcset="/wp-content/uploads/2016/05/DSC03725.jpg 640w, /wp-content/uploads/2016/05/DSC03725-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC03725-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Microsoftは、何年も前から、モバイルファーストについて取り組んできているという話があった。そして、古い時代からデベロッパーとはビジネスを進めてきたか、今後、Microsoftはどう進めていくのか、その答えがオープンプラットフォームにあるようだ。
何を作って、どういう需要があるのかを常に考え、デベロッパーのために様々な環境を作ってきたというMicrosoftの姿勢がここにある。</p>

<h3>プラットフォームカンパニーとしてのMicrosoft</h3>

<p>今とこれからのMicrosoftは次のようなポジショニングを行っている。つまり、Microsoftはプラットフォームカンパニーとなった。がしかし、パーソナルコンピューティングとしてWindows10というのもまだ推し進めていく。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC03728.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC03728-640x480.jpg" alt="DSC03728" width="640" height="480" class="alignnone size-large wp-image-19052" srcset="/wp-content/uploads/2016/05/DSC03728.jpg 640w, /wp-content/uploads/2016/05/DSC03728-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC03728-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>ここ３年間の進化として、IoT、タブレット、テレビ、ホロレンズなどバラバラで提供してきた技術が今集約され、そしてWindows10では、一気に全てを集約し、その集約できるものがWindows10であるというように考えていて、今では、すべてのデバイスを横展開できるようになったそうだ。しかし当然難しいところもあり、それぞれのデバイスに対するカスタマイズは必要ではあると言う。だがだが！中心部分はひとつのコードで動いていて、これは本当に素晴らしいことで、Windows PCを使って開発すれば、.NetやC#によりどんなプラットフォームでも動くようになるということを意味し、Microsoft上でEcosystemを構築しているように思える。</p>

<h2>Windows10の新しい3つの機能デモ</h2>

<p>ペン、ペンタブレットとして利用したWindows10はインクワークスペースを持っている。このインクワークスペースはペンで使える機能が充実している。例えば、付箋、スケッチパット、新しくインク用に作られた、定規もあり様々な機能が充実している。そして、これら機能は、デベロッパーが作ったアプリケーションにインクの機能を追加することができる。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00175.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00175-640x480.jpg" alt="DSC00175" width="640" height="480" class="alignnone size-large wp-image-19039" srcset="/wp-content/uploads/2016/05/DSC00175.jpg 640w, /wp-content/uploads/2016/05/DSC00175-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00175-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Windows10ではbashコマンドが利用できる。UbuntuのバイナリをインストールしているのでLinux系のコマンドがほとんど利用可能となりvimやemacsを当然利用することができる。XWindwの機能も動くし、apt-getのコマンドなど我々が通常MACで利用しているコマンドが何のわだかまりもなく動くのは素晴らしいことだ。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00180.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00180-640x480.jpg" alt="DSC00180" width="640" height="480" class="alignnone size-large wp-image-19040" srcset="/wp-content/uploads/2016/05/DSC00180.jpg 640w, /wp-content/uploads/2016/05/DSC00180-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00180-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>ディスクトップアプリケーションをパッケージングしウィンドウズストアにアップすることができる。今回デモでは秀丸をパッケージングしローカルPCにインストールをした。これによりセキュアな形でインストール、実行できる。</p>

<h2>UWPのアプリケーションを紹介</h2>

<p>具体的には、ブリジストンが作っているタイヤの検査アプリケーションのデモを行っていた。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00199.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00199-640x480.jpg" alt="DSC00199" width="640" height="480" class="alignnone size-large wp-image-19037" srcset="/wp-content/uploads/2016/05/DSC00199.jpg 640w, /wp-content/uploads/2016/05/DSC00199-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00199-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Xamarinを使って作られたアプリケーションで、日々複雑な仕事を様々なデバイスを使って業務を行っている。特徴は</p>

<ul>
<li>音声により画面を切り替える</li>
<li>音声により測定（検査）をこなう</li>
<li>項目への入力も音声</li>
</ul>

<p>XamarinによりiOA、Androidも作成可能になる。MACでは通常XCodeが必要になるが、Windowsではエミュレーションがあるので実行確認でき、Mac Bookではできないタッチ確認ができるのも特徴のひとつ</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00207.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00207-640x480.jpg" alt="DSC00207" width="640" height="480" class="alignnone size-large wp-image-19038" srcset="/wp-content/uploads/2016/05/DSC00207.jpg 640w, /wp-content/uploads/2016/05/DSC00207-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00207-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Officeというのは仕事の最前線にポジショニングされていたが、様々な接続をOfficeがサポートしています。OfficeがAzureのデータを出力することで、またはそれ以外のもののインターフェースになりOfficeがフロントエンドとしての役割を担う。アプリケーションと一緒に、スカイプを使うことも可能です。言い換えると、Officeはビジネルの共通な言語になった。</p>

<h2>Wordクラウドによるビジュアリゼーション</h2>

<p>文字を値で表現するWordクラウドによるビジュアリゼーションに関するデモンストレーションが行われた。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00233.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00233-640x480.jpg" alt="DSC00233" width="640" height="480" class="alignnone size-large wp-image-19042" srcset="/wp-content/uploads/2016/05/DSC00233.jpg 640w, /wp-content/uploads/2016/05/DSC00233-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00233-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>まず、Webエンジニアには馴染みのあるYEOMANを使ってジェネレートを利用してテンプレートを作成した。テンプレートにあるmanifestファイルを作成しホスティングするURLを定義する。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00230.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00230-640x480.jpg" alt="DSC00230" width="640" height="480" class="alignnone size-large wp-image-19041" srcset="/wp-content/uploads/2016/05/DSC00230.jpg 640w, /wp-content/uploads/2016/05/DSC00230-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00230-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>重要なパッケージは</p>

<ul>
<li>microsoft.office.js</li>
<li>d3.js</li>
</ul>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00247.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00247-640x480.jpg" alt="DSC00247" width="640" height="480" class="alignnone size-large wp-image-19056" srcset="/wp-content/uploads/2016/05/DSC00247.jpg 640w, /wp-content/uploads/2016/05/DSC00247-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00247-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>ローカル上で作成したものがクラウド上のExcelに登録されビジュアリゼーションとして表現することが可能となる。ここで利用されているようなアドインはストアの中で多く展開されグラフや図などもストアに存在する。</p>

<h2>DMM.makeのデモ</h2>

<p>クラウド上にあるメールやデータを集めることができる</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00250.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00250-640x480.jpg" alt="DSC00250" width="640" height="480" class="alignnone size-large wp-image-19043" srcset="/wp-content/uploads/2016/05/DSC00250.jpg 640w, /wp-content/uploads/2016/05/DSC00250-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00250-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h2>ロボット（ペッパー）のセールス・デモ</h2>

<p>ペッパーを通し年齢、性別などを判断し的確な製品をセールスすることが可能となる。つまり、ロボットを利用し、マシンラーニングをベースにして、誰がどういう人なのかを判断することが可能となる。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00257.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00257-640x480.jpg" alt="DSC00257" width="640" height="480" class="alignnone size-large wp-image-19044" srcset="/wp-content/uploads/2016/05/DSC00257.jpg 640w, /wp-content/uploads/2016/05/DSC00257-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00257-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h2>クラウド</h2>

<p>事業のライフサイクルはそれぞれ異なるがMicrosoftは&#8217;Platform as a Service&#8217;としてクラウド事業をしている。様々なところでAzureが提供できるが、まだクラウドかしていないものがある。Microsoft Cloudの特徴は</p>

<ol>
<li>ハイパースケール</li>
<li>ハイブリット</li>
<li>エンタープライズカスタマー</li>
</ol>

<p>ハイパースケールとは、世界全体で使え世界中にある。キャパシティもAmazone,Googleを合わせてもより大きい。つまりアウトソースにかかるコストが安いことを意味している。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00259.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00259-640x480.jpg" alt="DSC00259" width="640" height="480" class="alignnone size-large wp-image-19045" srcset="/wp-content/uploads/2016/05/DSC00259.jpg 640w, /wp-content/uploads/2016/05/DSC00259-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00259-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00263.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00263-640x480.jpg" alt="DSC00263" width="640" height="480" class="alignnone size-large wp-image-19046" srcset="/wp-content/uploads/2016/05/DSC00263.jpg 640w, /wp-content/uploads/2016/05/DSC00263-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00263-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>10年以上クラウドサービスを作っているMicrosoftのハイブリットの意味するところは、クラウドに置くもの、ファイアオールに置くものをビジネスの利用局面で考える必要がありAzureスタックを柔軟に利用できることがあげられる。
Microsoftは、サポート、サービス、エバンジェリストを通じて、エンタープライズカスタマーをクラウドの利用をサポートしていく。多くの利用者がAzureに移行して行っている。</p>

<h2>キャプションボットAPIのデモ: 機械学習、人工知能</h2>

<p>機械学習、人口知能を通じて、より人間味のあるアプリケーションを作ることができる。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00272.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00272-640x480.jpg" alt="DSC00272" width="640" height="480" class="alignnone size-large wp-image-19049" srcset="/wp-content/uploads/2016/05/DSC00272.jpg 640w, /wp-content/uploads/2016/05/DSC00272-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00272-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>キャプションボットAPIを使ったデモが３つ行われた。写真は、プロ野球選手でピッチャーのものを利用しキャプションボットでどういう回答があるか。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00273.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00273-640x480.jpg" alt="DSC00273" width="640" height="480" class="alignnone size-large wp-image-19047" srcset="/wp-content/uploads/2016/05/DSC00273.jpg 640w, /wp-content/uploads/2016/05/DSC00273-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00273-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>人間が見れば、野球選手、投球中であることがわかるが、キャプションボットでもこれを正しく判断することができる。もっと複雑な写真のデモ。これも完璧な回答が得られた。写真の構図は、丘の上でバイオリンを弾く女性、牛も二匹いた。</p>

<p>さて、次のデモ。ホテルに行くと鍵をなくしたらどうなるか、マネージャが鍵を盗んだらどうなるかということを想定して欲しい。この時に生体情報を使って管理したらどうなるかというデモンストレーションを行った。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00279.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00279-640x480.jpg" alt="DSC00279" width="640" height="480" class="alignnone size-large wp-image-19048" srcset="/wp-content/uploads/2016/05/DSC00279.jpg 640w, /wp-content/uploads/2016/05/DSC00279-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00279-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>シナリオは次の通りで制度の高い認証が出来ていた。</p>

<ol>
<li>Windows10を利用する</li>
<li>Face APIを使って承認済みのものを使う</li>
<li>ドアの前に立つ</li>
<li>承認されてない人はドアを開けることができない</li>
<li>承認済みであればドアの鍵が開く</li>
</ol>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/05/DSC00276.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/05/DSC00276-640x480.jpg" alt="DSC00276" width="640" height="480" class="alignnone size-large wp-image-19050" srcset="/wp-content/uploads/2016/05/DSC00276.jpg 640w, /wp-content/uploads/2016/05/DSC00276-300x225.jpg 300w, /wp-content/uploads/2016/05/DSC00276-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h1>Microsoftのオープンマインド</h1>

<p>この基調講演を通じて感じたのは、Microsoftは今まで我々が知っているMicrosoftでは無くまるで別会社のような存在になったということかも知れない。昨年のde:codeでもこの「変わった」感は半端なかったが、いまはWindows上でbashが動き、VSCodeのようにオープン化し新しいデバイスへのチャレンジがまだまだ確信的に進んでいくのだろう。</p>
]]></content:encoded>
		
		<series:name><![CDATA[de:code 2016 特集]]></series:name>
	</item>
		<item>
		<title>【速攻レビュー】よりモバイルフレンドリーになった「Twitter Bootstrap v4」</title>
		<link>/albatrosary/16824/</link>
		<pubDate>Wed, 02 Sep 2015 02:00:54 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Sass]]></category>

		<guid isPermaLink="false">/?p=16824</guid>
		<description><![CDATA[Twitter Bootstrapバージョン4アルファ版が8月19日に公開されました。既にご存知の通りTwitter BootstrapはレスポンシブでモバイルファーストなCSSフレームワークです。さっとレスポンシブなサ...]]></description>
				<content:encoded><![CDATA[<p><a href="http://v4-alpha.getbootstrap.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Twitter Bootstrapバージョン4アルファ版</a>が8月19日に公開されました。既にご存知の通りTwitter BootstrapはレスポンシブでモバイルファーストなCSSフレームワークです。さっとレスポンシブなサイトを構築するのに多くの方が利用しているのではないかと思います。この記事ではTwitter Bootstrapバージョン4の変更点について、筆者が「これは！」と思ったところをピックアップしてまとめます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/79686793859202b9371ec01cdd197c6e.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/79686793859202b9371ec01cdd197c6e-640x372.png" alt="Twitter Bootstrap v4 Site" width="640" height="372" class="alignnone size-large wp-image-16825" srcset="/wp-content/uploads/2015/08/79686793859202b9371ec01cdd197c6e.png 640w, /wp-content/uploads/2015/08/79686793859202b9371ec01cdd197c6e-300x174.png 300w, /wp-content/uploads/2015/08/79686793859202b9371ec01cdd197c6e-207x120.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>バージョン4の変更内容はGitHub上の<a href="https://github.com/twbs/bootstrap/pull/17021" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">issue</a>で確認することができます。この中で筆者が注目している事項は</p>

<ul>
<li>LESSからSASSへの変更</li>
<li>アイコン（グラフィックアイコン）の削除</li>
<li>IE8のサポート終了とjQuery1系からjQuery2系へ</li>
<li>pxからemへの変更</li>
<li>グリッドシステムに、さらに大きなブレイクポイントを追加</li>
<li>ボタンのカラー指定にClass属性「default」がなくなり「secondary」を指定するようになった</li>
<li>Class属性「display-*」でフォントサイズを指定可能に</li>
<li>ECMAScript2015(babel)の採用</li>
<li>Angularのui.bootstrapはどうなる？</li>
</ul>

<p>現段階ではバージョン4はアルファ版ではありますが、先取りして早速レビューします。</p>

<h2>LESSからSASS</h2>

<p>Twitter Bootstrapはバージョン3ではLESSを用いて開発を行っていましたが、<a href="https://github.com/twbs/bootstrap-sass" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">SASS版Bootstrap</a>もあり、LESS版/SASS版の両方メンテナンスが行われていました。バージョン4からはSASSを採用することになりました。</p>

<p>開発者にとってこれは大きな変更です。例えば、<a href="http://bower.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">bower</a>を使ってTwitter Bootstrapを利用する場合、LESS版では</p>

<p><code>$ bower install bootstrap</code></p>

<p>SASS版を利用する場合は</p>

<p><code>$ bower install bootstrap-sass-official</code></p>

<p>と、LESS版を利用するかSASS版を利用するかで呼び出すパッケージが分かれ、しかもgruntタスクやgulpタスク等のコンフィグレーションを記載する際に、それぞれの異なる記載を行っていました。こうしたことが一本化されたことは、冗長的な記述をスッキリさせてくれます。</p>

<p>YEOMANジェネレータに<a href="https://github.com/yeoman/generator-webapp" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">generator-webapp</a>というWeb開発のベーシックなジェネレータがありますが、CSS版/SASS版の切り替えのために、いたるところの分岐が書かれています。</p>

<p>ちなみに、bowerを使ったアルファ版のインストールは、明示的にバージョンを指定する必要があります。バージョンを指定しない場合は3系がダウンロードされます。</p>

<p><code>$ bower install bootstrap#4.0.0-alpha</code></p>

<h2>アイコン（グラフィックアイコン）の削除</h2>

<p>Twitter Bootstrapと言えば、豊富な人気のあった<a href="http://getbootstrap.com/components/#glyphicons-glyphs" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Glyphicons</a>ですが、バージョン4では削除されています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/b5c2950df2785ae0cd4f8e7cabf6e83d.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/b5c2950df2785ae0cd4f8e7cabf6e83d-640x463.png" alt="Glyphicons" width="640" height="463" class="alignnone size-large wp-image-16841" srcset="/wp-content/uploads/2015/08/b5c2950df2785ae0cd4f8e7cabf6e83d.png 640w, /wp-content/uploads/2015/08/b5c2950df2785ae0cd4f8e7cabf6e83d-300x217.png 300w, /wp-content/uploads/2015/08/b5c2950df2785ae0cd4f8e7cabf6e83d-207x150.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>現段階では極わずかにGlyphiconsが残されているだけになっていて、入力時の警告等を表示させているだけになっています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/dbe6928786ed5ad5d354e7096134d3a71.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/dbe6928786ed5ad5d354e7096134d3a71-640x480.png" alt="form-icon" width="640" height="480" class="alignnone size-large wp-image-16827" srcset="/wp-content/uploads/2015/08/dbe6928786ed5ad5d354e7096134d3a71.png 640w, /wp-content/uploads/2015/08/dbe6928786ed5ad5d354e7096134d3a71-300x225.png 300w, /wp-content/uploads/2015/08/dbe6928786ed5ad5d354e7096134d3a71-207x155.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><code></p>

<div class="form-group has-success">
  <label class="control-label" for="inputSuccess1">Input with success</label>
</div>

<div class="form-group has-warning">
  <label class="control-label" for="inputWarning1">Input with warning</label>
</div>

<div class="form-group has-error">
  <label class="control-label" for="inputError1">Input with error</label>
</div>

<p></code></p>

<p>削除されたグラフィックアイコンですが、現状ではTwitter Bootstrapの管理外で定義されているような記述もありません。もしグラフィックアイコンを利用したい場合は、別途どこかからお気に入りグラフィックアイコンを利用する必要があります。</p>

<h2>IE8のサポート終了とjQuery1系からjQuery2系へ</h2>

<p>Internet Explorer8とiOS6へのサポートが終了します。Twitter BootstrapがjQueryのバージョンを1系から2系への利用変更に伴いInternet Explorer8のサポートも打ち切られました。IE8を利用する必要がある場合にはバージョン3を利用します。</p>

<p>さようならIE8…</p>

<h2>pxからemへの変更</h2>

<p>フォントサイズ等の指定が<code>px</code>から<code>em</code>(およびCSS3で導入された<code>rem</code>)に変更されました。<code>px</code>はピクセル単位の指定で、環境によって変化しない絶対単位です。<code>em</code>は文字の高さを基準にした単位で<code>1em</code>は1文字を表します。特に<code>rem</code>はCSS3で新しく定義された<code>root em</code>でroot要素（html要素）のフォントサイズを継承します。</p>

<p><code>px</code>の場合、ブラウザのフォントサイズを変更しても文字の大きさが変わりませんが、<code>em</code>ではフォントサイズの大きさに合わせ表示されるフォントサイズも変わります。chromeの場合は「chrome://settings/」でフォントサイズを変更した場合に違いが確認できます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/095f235c11c239866cb784e0ea46022b.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/095f235c11c239866cb784e0ea46022b-640x192.png" alt="chrome-settings" width="640" height="192" class="alignnone size-large wp-image-16829" srcset="/wp-content/uploads/2015/08/095f235c11c239866cb784e0ea46022b.png 640w, /wp-content/uploads/2015/08/095f235c11c239866cb784e0ea46022b-300x90.png 300w, /wp-content/uploads/2015/08/095f235c11c239866cb784e0ea46022b-207x62.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>乱暴な言い方ですが、ユーザの好みのフォントサイズに対応するというのはある意味よりレスポンシブになったと言えるのではと思います。<code>px</code>が良いのか<code>em</code>が良いのか議論としては様々だとは思いますが、Twitter Bootstrapでは<code>em</code>を利用します。</p>

<h2>グリッドシステムに、さらに大きなブレイクポイントを追加</h2>

<p><a href="https://html5experts.jp/shumpei-shiraishi/1538/" data-wpel-link="internal">Bootstrap3超速レビュー！刷新されたグリッドシステムを理解しよう！</a>でも記述されているグリッドシステムですが、4つ定義されていたブレークポイントがバージョン4ではブレークポイントが5つになり「Extra large」が追加されました。</p>

<p>具体的に、バージョン3では</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/98765df1dd03b7a0590d98a4b1e5caea.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/98765df1dd03b7a0590d98a4b1e5caea-640x299.png" alt="Grid v3" width="640" height="299" class="alignnone size-large wp-image-16830" srcset="/wp-content/uploads/2015/08/98765df1dd03b7a0590d98a4b1e5caea.png 640w, /wp-content/uploads/2015/08/98765df1dd03b7a0590d98a4b1e5caea-300x140.png 300w, /wp-content/uploads/2015/08/98765df1dd03b7a0590d98a4b1e5caea-207x97.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>バージョン4では</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/157e413c151d7fac9b20d016b4a8e104.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/157e413c151d7fac9b20d016b4a8e104-640x377.png" alt="Grid v4" width="640" height="377" class="alignnone size-large wp-image-16831" srcset="/wp-content/uploads/2015/08/157e413c151d7fac9b20d016b4a8e104.png 640w, /wp-content/uploads/2015/08/157e413c151d7fac9b20d016b4a8e104-300x177.png 300w, /wp-content/uploads/2015/08/157e413c151d7fac9b20d016b4a8e104-207x122.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>ブレークポイントにより大きなExtra largeが定義されましたが、実際には小さい画面に対するブレークポイントが追加されています。</p>

<p>比較するとわかりますが</p>

<table>
<thead>
<tr>
  <th>サイズ</th>
  <th>バージョン3</th>
  <th>バージョン4</th>
</tr>
</thead>
<tbody>
<tr>
  <td>&lt;34em</td>
  <td>&#8211;</td>
  <td>Extra small &lt;34em</td>
</tr>
<tr>
  <td>≥34em(544px)</td>
  <td>Extra small devices Phones &lt;768px</td>
  <td>Small ≥34em</td>
</tr>
<tr>
  <td>≥48em(768px)</td>
  <td>Small devices Tablets ≥768px</td>
  <td>Medium ≥48em</td>
</tr>
<tr>
  <td>≥62em(922px)</td>
  <td>Medium devices Desktops ≥992px</td>
  <td>Large ≥62em</td>
</tr>
<tr>
  <td>≥75em(1200px)</td>
  <td>Large devices Desktops ≥1200px</td>
  <td>Extra large ≥75em</td>
</tr>
</tbody>
</table>

<p>※ 1emを16pxとした場合</p>

<p><code>visible-*(-block)</code>というクラス属性ですが、バージョン４では実装されていません。これは特定のサイズのときに表示させるのもで、例えば</p>

<p><code>
<span class="visible-sm-block">✔ Visible on small</span>
</code></p>

<p>としたときに「smサイズ」で表示されます。<code>.visible-*(-block)</code>が削除され変わりに<code>.hidden-*-up</code> or <code>.hidden-*-down</code> を利用する方向です。</p>

<h2>ボタンのカラー指定にClass属性「default」がなくなり「secondary」を指定するようになった</h2>

<p><code>btn-*</code>では、<code>default</code>がなくなり<code>secondary</code>が新たに追加されました。<code>default</code>と同様の色を指定する場合は<code>secondary</code>を指定する必要があります。btn-primaryのバックグラウンドカラーも若干明るめに定義されています。</p>

<p>バージョン3では</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/6dcd69e278bea198b5794240e3cb0f6d.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/6dcd69e278bea198b5794240e3cb0f6d-640x85.png" alt="スクリーンショット 2015-08-26 14.23.38" width="640" height="85" class="alignnone size-large wp-image-16834" srcset="/wp-content/uploads/2015/08/6dcd69e278bea198b5794240e3cb0f6d.png 640w, /wp-content/uploads/2015/08/6dcd69e278bea198b5794240e3cb0f6d-300x40.png 300w, /wp-content/uploads/2015/08/6dcd69e278bea198b5794240e3cb0f6d-207x27.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>バージョン4では</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/22d933c35c469e05131a490b6b0c0f58.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/22d933c35c469e05131a490b6b0c0f58-640x93.png" alt="buttons v3" width="640" height="93" class="alignnone size-large wp-image-16833" srcset="/wp-content/uploads/2015/08/22d933c35c469e05131a490b6b0c0f58.png 640w, /wp-content/uploads/2015/08/22d933c35c469e05131a490b6b0c0f58-300x44.png 300w, /wp-content/uploads/2015/08/22d933c35c469e05131a490b6b0c0f58-207x30.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>現在バージョン3とバージョン4で定義されている値を比較すると次の通りです：</p>

<table>
<thead>
<tr>
  <th>クラス属性</th>
  <th>v3</th>
  <th>v4</th>
</tr>
</thead>
<tbody>
<tr>
  <td>btn-default-bg</td>
  <td>#fff</td>
  <td>&#8211;</td>
</tr>
<tr>
  <td>btn-primary-bg</td>
  <td>darken(#428bca, 6.5%); // #337ab7</td>
  <td>#0275d8</td>
</tr>
<tr>
  <td>btn-secondary-bg</td>
  <td>&#8211;</td>
  <td>#fff</td>
</tr>
<tr>
  <td>btn-success-bg</td>
  <td>#5cb85c;</td>
  <td>#5cb85c</td>
</tr>
<tr>
  <td>btn-info-bg</td>
  <td>#5bc0de;</td>
  <td>#5bc0de</td>
</tr>
<tr>
  <td>btn-warning-bg</td>
  <td>#f0ad4e;</td>
  <td>#f0ad4e</td>
</tr>
<tr>
  <td>btn-danger-bg</td>
  <td>#d9534f;</td>
  <td>#d9534f</td>
</tr>
</tbody>
</table>

<p>こうしたカラーリングですが、ラベルやアラートに関しては今のところ変更がありません、ボタンのみ変更されています。</p>

<h2>Class属性「display-*」でフォントサイズを指定可能に</h2>

<p>小さい部分ですが、フォントサイズを指定するクラス属性に<code>display-*</code>が追加されました。コメントには次のような記載があります:</p>

<p>&gt; 見出し要素(h1,h2,…h6)はページのコンテンツのボディで最適に動作するように設計されています。より目立つような見出しが必要な場合は、より大きいスタイルを使用することを検討してください。</p>

<p>具体的には</p>

<table>
<thead>
<tr>
  <th>display-*</th>
  <th>フォントサイズ</th>
</tr>
</thead>
<tbody>
<tr>
  <td>display-1</td>
  <td>3.5rem</td>
</tr>
<tr>
  <td>display-2</td>
  <td>4.5rem</td>
</tr>
<tr>
  <td>display-3</td>
  <td>5.5rem</td>
</tr>
<tr>
  <td>display-4</td>
  <td>6rem</td>
</tr>
</tbody>
</table>

<p>として定義されています。しかし、CSSの<code>font-weight</code>の定義が<code>h1</code>では<code>500</code>であるのに対し、<code>display-*</code>では<code>300</code>ですので若干ほっそりとした表示になります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/f649fc61464b206a51073e74a1661248.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/f649fc61464b206a51073e74a1661248-640x480.png" alt="display-*" width="640" height="480" class="alignnone size-large wp-image-16836" srcset="/wp-content/uploads/2015/08/f649fc61464b206a51073e74a1661248.png 640w, /wp-content/uploads/2015/08/f649fc61464b206a51073e74a1661248-300x225.png 300w, /wp-content/uploads/2015/08/f649fc61464b206a51073e74a1661248-207x155.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><code></p>

<h1 class="display-4">Display 4</h1>

<h1 class="display-3">Display 3</h1>

<h1 class="display-2">Display 2</h1>

<h1 class="display-1">Display 1</h1>

<h1>Display</h1>

<p></code></p>

<h2>ECMAScript2015(Babel)の採用</h2>

<p>Twitter BootstrapのJavaScript開発には<a href="https://babeljs.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Babel</a>が採用されています。Babelは、<a href="https://html5experts.jp/vvakame/16241/" data-wpel-link="internal">TypeScriptを使ってECMAScript 2015時代のJavaScriptを先取りしよう！</a>での記載もあるように、今年6月に公式に次のECMAScriptとして仕様が公開されたECMAScript2015(今まではECMAScript6と呼ばれていました)の文法で記載することが出来ます。参考までに、ECMAScriptは<a href="http://www.ecma-international.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ECMA International</a>が策定した仕様で、この仕様に基いて実装されたものがJavaScriptです。</p>

<p>ECMAScript2015の特徴をいくつか上げると次の通りです。詳しくは<a href="https://babeljs.io/docs/learn-es2015/#ecmascript-6-features" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちら</a>を参照ください。</p>

<ul>
<li>Arrows</li>
<li>Classes</li>
<li>Let + Const</li>
<li>Iterators + For..Of</li>
<li>Generators</li>
<li>Modules and Module Loaders</li>
<li>Map + Set + WeakMap + WeakSet</li>
<li>Proxies</li>
<li>Promises</li>
</ul>

<h2>Angularのui.bootstrapはどうなる？</h2>

<p>AngularにはBootstrap Componentsをベースにした<a href="http://angular-ui.github.io/bootstrap/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ui.bootstrap</a>があります。Angularを使って日頃開発を行っている方には、ui.bootstrapの動向も気になるところではないかと思います。というのも私は、ui.bootstrapのディレクティブ実装が非常に良いと思っているので、積極的に利用しています。</p>

<p>ui.bootstrapの対応に関しては現在<a href="https://github.com/angular-ui/bootstrap/issues/4234" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">issue</a>で話が上がっています。ui.bootstrapはAngular2の対応もありますので、Twitter Bootstrapバージョン4の対応は難しい状況のようです。</p>

<h2>まとめ</h2>

<p>バージョン3からレスポンシブWebデザインを前提として作られたTwitter Bootstrapですが、バージョン4では現在のモバイル環境に合わせより強力に洗練されたCSSフレームワークです。</p>

<p>今回のレビューはまだアルファ版のため一部機能が実装されていない部分もありますが正式リリースが楽しみです。</p>
]]></content:encoded>
			</item>
		<item>
		<title>開催決定！HTML5カンファレンス2015 in 鹿児島─カンファレンスの歩き方</title>
		<link>/albatrosary/15522/</link>
		<pubDate>Mon, 22 Jun 2015 00:00:18 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[HTML5カンファレンス]]></category>
		<category><![CDATA[html5j]]></category>

		<guid isPermaLink="false">/?p=15522</guid>
		<description><![CDATA[連載： イベントレポート (36)７月4日（土）九州では3回目2年ぶり鹿児島では初となるHTML5カンファレンスが「国立大学法人鹿児島大学 郡元キャンパス共通教育棟2号館1F」で開催されます。IoTをはじめどこにでもある...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/eventarchives/" class="series-159" title="イベントレポート" data-wpel-link="internal">イベントレポート</a> (36)</div><p>７月4日（土）九州では3回目2年ぶり鹿児島では初となるHTML5カンファレンスが「国立大学法人鹿児島大学 郡元キャンパス共通教育棟2号館1F」で開催されます。IoTをはじめどこにでもある当たり前の技術になり、徐々に浸透してきているHTML5ですが、実際にプロダクトとして利用するにはこれからという状況でもあります。また、「Extensible Web」という考え方や「WebAssembly」からもわかるように、まだまだ発展し続けている技術でもあります。そんな魅力的なHTML5に触れられ、聞け、近づけることができるカンファレンスです。</p>

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

<h1>見どころ</h1>

<p>HTML5というキーワードがだいぶ静かになりましたが、冷静に考えるとHTML5についてどのくらい知見がありますか？意外と知らないことが多いのではないかと思います、しかもまだ発展している。Microsoftの本気モードもMAXになりその動向がきになるところですし、Firefox OSがテレビに搭載されたり、Firefox OS採用の開発ボードOpen Web Boardが存在したりと。Google I/OでもPolymer 1.0が発表されるなどまだまだ目が話せない状況です。そういった15セッションの中からあえて4つセッションを上げろと難題を出されたら、次のものを涙ながらに注目のセッションとして選びたいと思います。</p>

<h3>注目のセッション：</h3>

<p><strong>Windows 10 に搭載される Web ブラウザーについて</strong><br />
 &#8211; 日本マイクロソフト株式会社 物江修 氏</p>

<p><strong>“There’s an element for that!!” Now, get ready for Polymer 1.0!!!</strong><br />
 &#8211; NTTコミュニケーションズ 小松健作 氏</p>

<p><strong>Web Audio API、 Web MIDI API を使ったWebサウンドプログラミング</strong><br />
 &#8211; ヤマハ株式会社 河合良哉 氏</p>

<p><strong>Firefox エコシステム ー Mozilla が創る Web of Things 時代の技術とプラットフォーム</strong><br />
 &#8211; Mozilla Japan 浅井智也 氏</p>

<p>セッション以外にも展示ルームがあり実体験としてHTML5に触れることもできます。体感できるHTML5をお楽しみください。詳しいご案内はHTML5カンファレンス鹿児島の特設サイトがありますので、そちらをご参考にしていただきたいと思います。</p>

<p><a href="http://kagoshima.html5j.org/html5conference.2015/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">http://kagoshima.html5j.org/html5conference.2015/</a></p>

<h1>歩き方</h1>

<p>HTML5カンファレンス鹿児島ですがオープニング/クローズを含む全17セッションから成り立っています。デザイナーからWebエンジニア、エンタープライズ技術者まで幅広くターゲットにしたイベントですので聞くものを選ぶのも難しいところです。そんな皆様に筆者が当日の聴講すべきセミナーをプランニングしてみました。</p>

<h3>トップエンジニア向け</h3>

<p>トップエンジニアであるあなた。そうです、やはり最先端技術に触れておくべきところだと思います。html5j代表でもある吉川徹氏の「いまさら聞けないHTML5概要」でまずはHTML5に脳みそを浸し、Microsoft Edge、Polymer、Web MIDI、Forfox OSとエッジな話に舌鼓されてはいかがでしょうか？</p>

<ol>
<li>ルームA: いまさら聞けないHTML5概要</li>
<li>ルームB: Windows 10 に搭載される Web ブラウザーについて</li>
<li>ルームA: “There’s an element for that!!” Now, get ready for Polymer 1.0!!!</li>
<li>ルームB: Web Audio API、 Web MIDI API を使ったWebサウンドプログラミング</li>
<li>ルームA: Firefox エコシステム ー Mozilla が創る Web of Things 時代の技術とプラットフォーム</li>
</ol>

<h3>エンタープライズ向け</h3>

<p>エンタープライズに所属しているみなさんは実用的なシステムを作る上でこれから何をすべきかを考える必要があります。WoTやCordova、Polymerなどは技術として知っておくべきところだと考えます。外してはならないのがMicrosoft Edge。そうです、エンタープライズには欠かせないMicrosoft社のブラウザーのお話です。好き嫌い関係なく必須項目のひとつです。</p>

<ol>
<li>ルームB: はじめてのWeb of Things</li>
<li>ルームB: Windows 10 に搭載される Web ブラウザーについて</li>
<li>ルームA: “There’s an element for that!!” Now, get ready for Polymer 1.0!!!</li>
<li>ルームA: Cordova開発者が知っておきたいレンダリングエンジンの話</li>
<li>ルームA: Firefox エコシステム ー Mozilla が創る Web of Things 時代の技術とプラットフォーム</li>
</ol>

<h3>デザイナー向け</h3>

<p>デザイナーはHTML5の基本事項を再確認し、その後、トップデザイナー秋葉秀樹氏の「ぼっけもんデザイナーへの道」を聞くべきです。セッション案内でもありますが、「『ぼっけもん』とはチャレンジ精神に溢れ、勇気のある人の意味を持つ鹿児島弁です」ということですので、デザイナーとしての考え方を身につられるチャンスだと思います。その後WebRTCの実例や、今後デザイナーとしても必要になるだろう「音」に対するWebの取り組み、デザイン技術のイロハを聞かれてはどうかと思います。</p>

<ol>
<li>ルームA: いまさら聞けないHTML5概要</li>
<li>ルームA: ぼっけもんデザイナーへの道</li>
<li>ルームC: Webと電話を繋げよう！Twilioを使った簡単アプリの作り方 &amp; オンラインコミュニケーションを支えるHTML5</li>
<li>ルームB: Web Audio API、 Web MIDI API を使ったWebサウンドプログラミング</li>
<li>ルームB: 入門HTML5/CSS3</li>
</ol>

<h3>初心者向け</h3>

<p>あまりHTML5はよくわからないという初心者には、HTML5の全容を確認し、HTML5の実例を聞くというのがおすすめです。きっとHTML5の魅力に触れることができるのではないかと考えます。</p>

<ol>
<li>ルームA: いまさら聞けないHTML5概要</li>
<li>ルームC: 協働現場でのHTML5</li>
<li>ルームB: はじめてのWebRTC/ORTC</li>
<li>ルームC: ファブ時代のHTML5。IoTとWoT、あとロボット。</li>
<li>ルームC: Bootstrap超入門 &amp; フロントエンドエンジニア1年生が語る『画面設計とCSS設計のポイント』</li>
</ol>

<p>とは言っても、なかなか選ぶのが難しいのではないでしょうか。この原稿を書きつつ、これだけのセッションが並ぶと迷うのも当たり前ではないかと思っています。是非HTML5カンファレンス鹿児島のサイトを見ていただき、十分迷ってもらえたら幸いです。</p>

<h1>開催日時・場所</h1>

<ul>
<li>開催日時：2015年7月4日（土）</li>
<li>開催場所：国立大学法人鹿児島大学 郡元キャンパス共通教育棟2号館1F</li>
<li>事前登録は<a href="https://html5j-kagoshima.doorkeeper.jp/events/26028" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちら</a>からどうぞ！</li>
<li>入場料：無料</li>
</ul>

<p>本イベントは懇親会も用意されていて、参加費無料です。講師陣とコミュニケーションを取るチャンスでもありますのでご参加ください（噂ですが美味しい焼酎が無料で提供されるかもしれません）。それでは当日鹿児島でお会いしましょう！</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/06/24b23ef4b98b98f7ff9283f624b1a5e4.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/06/24b23ef4b98b98f7ff9283f624b1a5e4-640x492.png" alt="スクリーンショット 2015-06-19 14.47.22" width="640" height="492" class="alignnone size-large wp-image-15543" srcset="/wp-content/uploads/2015/06/24b23ef4b98b98f7ff9283f624b1a5e4.png 640w, /wp-content/uploads/2015/06/24b23ef4b98b98f7ff9283f624b1a5e4-300x231.png 300w, /wp-content/uploads/2015/06/24b23ef4b98b98f7ff9283f624b1a5e4-207x159.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
]]></content:encoded>
		
		<series:name><![CDATA[イベントレポート]]></series:name>
	</item>
		<item>
		<title>「NewRouter」という名前を付けてしまってゴメンナサイ…Angular開発者が生で答えるQ&#038;Aセッション─ng-japan 2015</title>
		<link>/albatrosary/14233/</link>
		<pubDate>Fri, 10 Apr 2015 03:00:31 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[AngularJS]]></category>

		<guid isPermaLink="false">/?p=14233</guid>
		<description><![CDATA[連載： ng-japan 2015 特集 (6)この記事は、Angularをテーマとした日本初のカンファレンス 「ng-japan」のイベントレポート（第6回目）です。ng-japan特集最後は懇親会でのQ&#38;Aの...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/ngjapa2015/" class="series-258" title="ng-japan 2015 特集" data-wpel-link="internal">ng-japan 2015 特集</a> (6)</div><p>この記事は、Angularをテーマとした日本初のカンファレンス 「<a href="http://ngjapan.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ng-japan</a>」のイベントレポート（第6回目）です。ng-japan特集最後は懇親会でのQ&amp;Aの模様をレポートします。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/04/16880968991_bb477b9a39_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/04/16880968991_bb477b9a39_z.jpg" alt="16880968991_bb477b9a39_z" width="640" height="427" class="aligncenter size-full wp-image-14234" srcset="/wp-content/uploads/2015/04/16880968991_bb477b9a39_z.jpg 640w, /wp-content/uploads/2015/04/16880968991_bb477b9a39_z-300x200.jpg 300w, /wp-content/uploads/2015/04/16880968991_bb477b9a39_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h1>AngularカンファレンスQ&amp;A</h1>

<h3>Q1. Angular 2を開発するに当たって、React.jsのアーキテクチャや考え方から影響を受けていますか？</h3>

<p>一定の影響はありました。よく聞かれる質問としては「Virtual DOMについて」ですが、我々はこのVirtual DOMがパフォーマンスを上げるために必ずしも必要となるものではないと考えています。それよりも「unidirectional data flow」という考え方のほうが役に立つのではないかと考えています。</p>

<p>プレゼンテーションの中でも「Immutable Infrastructure」については触れましたが、これについてはReactのチームともディスカッションを始めているところ。この分野についてはReactチームとAngularチームのコラボで行っていけるのではないかと考えています。</p>

<h3>Q2. GoogleのプロダクトでAngularはどのぐらい利用されていますか？</h3>

<p>Googleプロダクトの約2,000のアプリケーションで、Angularを使っています。特にGoogleが提供するクラウドでは、ほとんどのUIがAngularで書かれています。AngularチームというのはGoogle内でもいろいろな組織が存在していますが、その中に広告のグループであるAdsのチームがあり、ここでもAngularが使われています。その他にもGoogle内部だけで使われるような、内部プロセス用のアプリケーションについてもAngularが利用されています。</p>

<p>すべてのアプリケーションがAngular 2に移行するとは考えていませんが、Angular 2を使った方が簡単ものもありAngular 2を使う価値があるものについては移行をします。</p>

<h3>Q3. Angular 1系のサポートはいつまで行っていきますか？</h3>

<p>一時期Angular 1のサポートはいつまでで、Angular 2はいつからといった区切りを設定する予定でした。例えば、Angular 1のサポートを2016年末で終わりますと言って、Angular 2が2016年末に出てきたら、まったく移行の期間がなくなります。プレゼンテーションでも様々なお話をしたようないろいろなシグナルを見て今開発をしている人は、自分の位置がどのあたりにいて、今後どうなるのかを把握する必要があります。そして移行期間が作れるように、段階的に終了していくというのが正しい方向ではないかと考えています。</p>

<p>そして、GoogleだけがAngularに投資を行っている企業ではなく、Googleの外にもコアなチームメンバーがいて、彼らは彼らでAngularの開発にあたっています。なので我々としてもサポートをしっかりしていくということが重要でありオープンソースにとっても重要だと考えています。とは言うもののAngular 2を魅力的なものにし、しかもマイグレーションし易いものにし、誰もがAngular 2に移行した利用したいといった素晴らしいものに創りあげたいと考えています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/04/16261977763_ed8d764c2b_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/04/16261977763_ed8d764c2b_z.jpg" alt="16261977763_ed8d764c2b_z" width="640" height="427" class="aligncenter size-full wp-image-14236" srcset="/wp-content/uploads/2015/04/16261977763_ed8d764c2b_z.jpg 640w, /wp-content/uploads/2015/04/16261977763_ed8d764c2b_z-300x200.jpg 300w, /wp-content/uploads/2015/04/16261977763_ed8d764c2b_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h3>Q4. Angular 2の新しい機能に対してServiceとかFilterとか変な名前を付けてないか確認したい</h3>

<p>まだ名前の付け方が得意じゃないけど、なるべく混乱のないような名前をつけていきます。でも、もう既に新しいRouterに対して、「NewRouter」という名前を付けてしまってゴメンナサイ。</p>

<h3>Q5. Angularで検討されている機能で「Component Helper」というのがあるようですが、Angular1.4でリリースされる予定はありますか？</h3>

<p>他のコンポーネントとの兼ね合い、Angular 2の機能の一部をAngular1.4に入れていることもあり、もしかするとAngular1.5でリリースされるかもしれません。十分な時間をかけて検討していきたいと考えています。</p>

<p>このAPIというのはベストプラクティスとなっていくものです。「Component Helper」の仕様を一旦決めてしまうと後になって開発者が変えていくことは大変な労力が必要になるため、じっくり考える時間を設ける。「Component Helper」はAngular1.5に入れることを検討しています。</p>

<h3>Q6. New RouterでControllerを指定するようになっていますが、Component Directiveのようなものを指定するようにはならないでしょうか？</h3>

<p>我々がしようとしていることは、まさにそういったComponentを指定するということです。しかし、まだAngular 1系ではComponentを使うことはできない。いまはどうすれば、Angular 1とAngular 2とで整合性が保たれるか、Componentを導入できるかを検討しています。</p>

<h3>Q7. Angular 2でEvent Emitterの仕組みは導入されますか？</h3>

<p>Event Emitterの機能は、Angular 2ではありません。しかし、それに変わる別のやり方が提供されます。Angular 2では各パーツ間のコミュニケーションのやり方が変わっていきます。</p>

<p>その変わりに使えるものが2種類あります。</p>

<ul>
<li>DOM Event</li>
<li>サードパティ・ライブラリ</li>
</ul>

<p>この変更に対してどこにアドバンテージがあるのかというと、いろいろなケースを考えると今のAngularイベントを使っていった場合、さまざまなところでタイポが発生し、イベントの名前が間違ってしまうことがあります。するとイベント名が有効でなく一体何が起こったのが開発者がわからないという状況になりますので、問題を解決するために「Event Injection」を入れました。そうすることでダイレクトにイベントが伝わるようになります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/04/16674642047_3cb1b85970_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/04/16674642047_3cb1b85970_z.jpg" alt="16674642047_3cb1b85970_z" width="640" height="427" class="aligncenter size-full wp-image-14235" srcset="/wp-content/uploads/2015/04/16674642047_3cb1b85970_z.jpg 640w, /wp-content/uploads/2015/04/16674642047_3cb1b85970_z-300x200.jpg 300w, /wp-content/uploads/2015/04/16674642047_3cb1b85970_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h1>最後に（編集後記）</h1>

<p>ng-japanの様子を余すことなく書き下ろしましたが、いかがだったでしょうか？</p>

<p>Angular1.4の内容やNewRouterの機能、Angular 2に関すること、Angular 1からAngular 2へのマイグレーションなど盛りだくさんの内容だったと思います。Angularはあまり大規模なアプリケーションを作るのには不適という話もありますが、Angularチームが目指すところは規模に関わらず作りやすく、よりメンテナンスビリティの良いフレームワークを目指しているのではないかと思います。</p>

<p>AngularはGoogle社の閉じた世界観で作られているのではなく、Google社外のコミッターとの連携やReactチームとのコラボレーションもあり健全なオープンソースの道を歩んでいるのではないかと考えてます。しかも我々がAngularと関わりたいと思えばGitHubでissueを書くこともpull requestも送ることもできます。より関わることで、Angularが我々開発者にとって良いものになるのではと思います。</p>

<p>そのための一歩としてまずは、Angularを「触ってみる」ということも重要だと思います。「AngularJS Japan User Group」では各地で初心者向けハンズオンや、中上級者向けのハッカソン、ナイトセミナーも実施しておりますので、機会がありましたら足を運んでいただけたら幸いです。</p>

<p>最後に多くの方に来場いただき、感謝するとともに、多くのスポンサー様にご協力いただききました。この場をお借りし御礼申し上げます。</p>

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

<h1>セッション動画</h1>

<p>当日のセッションはYouTubeで公開されています。是非ご覧ください！</p>

<div class="aligncenter">
<!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ -->
<iframe width="560" height="315" src="https://www.youtube.com/embed/QzyUePqt4RM" frameborder="0" 0="allowfullscreen" scrolling="yes" class="iframe-class"></iframe>
</div>
]]></content:encoded>
		
		<series:name><![CDATA[ng-japan 2015 特集]]></series:name>
	</item>
	</channel>
</rss>
