<?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>Ionic2 &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/ionic2/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>Angular 2を使うならUIはコレで！Ionic 2ことはじめ（正式リリース版対応）</title>
		<link>/rdlabo/22296/</link>
		<pubDate>Thu, 16 Feb 2017 00:14:20 +0000</pubDate>
		<dc:creator><![CDATA[榊原昌彦]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Angular]]></category>
		<category><![CDATA[Angular 2]]></category>
		<category><![CDATA[Ionic2]]></category>

		<guid isPermaLink="false">/?p=22296</guid>
		<description><![CDATA[連載： React/Angular2時代のWeb開発 (3)Web制作してると、また新技術が出たのかと思うと、気づいたら「新常識」が増えてたということに頻繁に出会います。 タスクランナー、SCSS、LiveReload、...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/webdev-2016/" class="series-400" title="React/Angular2時代のWeb開発" data-wpel-link="internal">React/Angular2時代のWeb開発</a> (3)</div><p>Web制作してると、また新技術が出たのかと思うと、気づいたら「新常識」が増えてたということに頻繁に出会います。</p>

<p>タスクランナー、SCSS、LiveReload、SPA、PWA、ハイブリッドアプリ。そういった近年のキーワードを一気に体験できるUIフレームワーク「Ionic 2」が先日リリースされましたので、ご紹介します。</p>

<p><strong>編集部注: Angular 2の正式名称は「Angular」ですが、現状だと「AngularJS 1.x」のことを呼称していると誤解される可能性が高いと判断し、本稿では「Angular 2」で統一させていただきます</strong></p>

<p>記事の内容が古くなってたので、2017年8月11日に更新しました</strong></p>

<h2>Ionic 2の概要</h2>

<p><img src="/wp-content/uploads/2017/02/ionic-2-final-header.jpg" alt="ionic-2-final-release" width="640" height="384" class="alignnone size-full wp-image-22302" srcset="/wp-content/uploads/2017/02/ionic-2-final-header.jpg 640w, /wp-content/uploads/2017/02/ionic-2-final-header-300x180.jpg 300w, /wp-content/uploads/2017/02/ionic-2-final-header-207x124.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />
Ionic2は、アメリカの<a href="https://ionic.io/about" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Ionic社</a>が中心となって開発しているオープンソースのモバイルフレームワークです。
Angular 1上に構築されたIonic 1の後継プロダクトとなり、当時の経験が反映され、とても完成度が高く仕上がっています。
つい先日の2017年1月29日に正式リリースされました。</p>

<p><a href="https://ionic.io/about" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Drifty Co</a>がデモアプリとして、<a href="https://pwa.ionic.io/ionic-conference-app/www/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Ionic 2 Conference Application</a>を公開していますので、ぜひアクセスしてみてください。モバイルアプリのデモですので、スマホからアクセスするのがいいかと思います。Ionic 2の世界観とデフォルトデザインの完成度の高さがよくわかるデモとなっています。</p>

<p>このデモでわかる操作性・UI以外にも、Ionic2には</p>

<ul>
<li>ターミナルにコマンドを4行入れるだけで開発をはじめることができる</li>
<li>Webはもちろんのこと、iOS/Android/WindowsPhoneアプリとしてもリリースできる</li>
<li>ブラウザにPush通知を送ったり、オフライン対応することも可能</li>
<li>Angular 2上に構築されているので高速</li>
</ul>

<p>という特徴があります。
Web最前線の現場で使われてる技術を体験するために、ぜひとも一度使ってみてください！
　</p>

<h2>4行で高速開発環境構築</h2>

<p>Ionic 2でどのような体験ができるかをご紹介するために、実際にプロジェクトを立ち上げてみます。以下は、Node.js(6以上)をインストールされている環境を前提にしていますので、未インストールの場合は <a href="https://nodejs.org/ja/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">https://nodejs.org/ja/</a> からインストールください。</p>

<p>最初に、ターミナル（Windowsの場合はコマンドプロンプト）を立ち上げ、以下のコマンドを入力します。これで、Ionic 2を構築するためのIonic CLIというパッケージをインストールします。
</p><pre class="crayon-plain-tag">npm install -g ionic cordova</pre><p></p>

<p>次に、プロジェクトを作るフォルダに移動して、以下のコマンドを入力します。するとProjectNameという名前のフォルダが作成され、2-3分でプロジェクトが作成されます。
</p><pre class="crayon-plain-tag">ionic start ProjectName --v2</pre><p></p>

<p>最後に、ProjectNameというフォルダに移動し、<code>ionic serve</code>という開発を開始するためのコマンドを入力します。</p>

<p></p><pre class="crayon-plain-tag">cd ProjectName
ionic serve</pre><p></p>

<p>すると、自動的にブラウザが立ち上がり、画面が表示されます。URLが<code>http://localhost:8100/</code>になっていると思いますが、これはIonic CLIが自動的に開発用サーバを立ち上げてくれたためです。（実際にアクセスしているのは、<code>www/</code>フォルダの中です）</p>

<p>4行のコマンドで開発の準備が完了しました！</p>

<p><img src="/wp-content/uploads/2017/02/fc943b474dd3f664b17206df1d0b5983-300x236.png" alt="Ionic-serve" width="300" height="236" class="alignnone size-medium wp-image-22322" style="border:1px solid #c0c0c0" srcset="/wp-content/uploads/2017/02/fc943b474dd3f664b17206df1d0b5983-300x236.png 300w, /wp-content/uploads/2017/02/fc943b474dd3f664b17206df1d0b5983.png 640w, /wp-content/uploads/2017/02/fc943b474dd3f664b17206df1d0b5983-207x163.png 207w" sizes="(max-width: 300px) 100vw, 300px" />
　</p>

<h2>5分でIonic 2の開発を体験！</h2>

<p>早速開発してみましょう。Ionic 2は、様々な機能が実装されているためにいろいろな設定ファイルやフォルダが用意されていますが、最初は<code>src/</code>と<code>www/</code>の中をさわれば事足ります。</p>

<p></p><pre class="crayon-plain-tag">ProjectName/
├── src/
　　├── app/
　　├── assets/
　　├── pages/
　　　　├── about/
　　　　├── contact/
　　　　├── home/
　　　　└── tabs/
　　├── theme/
　　└── index.html
└── www/</pre><p></p>

<p>では、まず<code>src/pages/</code>の中を見てみましょう。</p>

<p>4つのフォルダが、画面のそれぞれのComponentに対応しています。例えば、Home画面だと以下の通りです。
メインコンテンツは<code>home/home.html</code>が、タブのエリアは<code>tabs/tabs.html</code>がテンプレートになっています。</p>

<p><img src="/wp-content/uploads/2017/02/components-300x236.jpg" alt="components" width="300" height="236" class="alignnone size-medium wp-image-22335" srcset="/wp-content/uploads/2017/02/components-300x236.jpg 300w, /wp-content/uploads/2017/02/components.jpg 640w, /wp-content/uploads/2017/02/components-207x163.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" /></p>

<p>試しに、<code>home/home.html</code>をログインフォームにしてみましょう。<code>home/home.html</code>の中身を以下に差し替えて見てください。</p>

<p></p><pre class="crayon-plain-tag">&lt;ion-header&gt;
  &lt;ion-navbar&gt;
    &lt;ion-title&gt;Home&lt;/ion-title&gt;
  &lt;/ion-navbar&gt;
&lt;/ion-header&gt;

&lt;ion-content padding&gt;
  &lt;ion-list&gt;
    &lt;ion-item&gt;
      &lt;ion-label fixed&gt;Username&lt;/ion-label&gt;
      &lt;ion-input type="text" value=""&gt;&lt;/ion-input&gt;
    &lt;/ion-item&gt;

    &lt;ion-item&gt;
      &lt;ion-label fixed&gt;Password&lt;/ion-label&gt;
      &lt;ion-input type="password"&gt;&lt;/ion-input&gt;
    &lt;/ion-item&gt;
  &lt;/ion-list&gt;
  &lt;button ion-button block&gt;Login&lt;/button&gt;
&lt;/ion-content&gt;</pre><p></p>

<p>そして保存すると、自動的にブラウザが更新されて、ログインフォームが表示されます。
LiveReloadという機能で、一回いっかい更新ボタンを自分で押す必要がないので、複数ディスプレイで作業してる時とても捗ります。</p>

<p><img src="/wp-content/uploads/2017/02/de1be981c4d7b0b36c54226a2a051941-300x236.png" alt="ionic2-form" width="300" height="236" class="alignnone size-medium wp-image-22350" style="border:1px solid #c0c0c0" srcset="/wp-content/uploads/2017/02/de1be981c4d7b0b36c54226a2a051941-300x236.png 300w, /wp-content/uploads/2017/02/de1be981c4d7b0b36c54226a2a051941.png 640w, /wp-content/uploads/2017/02/de1be981c4d7b0b36c54226a2a051941-207x163.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></p>

<h3>見慣れないタグ。これって何？</h3>

<p><code>home/home.html</code>のタグをみると、<code>ion-header</code>や<code>ion-content</code>と見覚えのないタグが使われていることに気づくと思います。これは、Directiveを使って定義づけているカスタムタグで、Ionic 2オリジナルのものです。
例えば、&lt;button ion-button&gt;Login&lt;/button&gt;だと、これをJavaScriptが以下のように展開します。</p>

<p></p><pre class="crayon-plain-tag">&lt;button block="" ion-button="" class="button button-md button-default button-default-md button-block button-block-md"&gt;
    &lt;span class="button-inner"&gt;Login&lt;/span&gt;
    &lt;div class="button-effect" style="transform: translate3d(392px, -91px, 0px) scale(1); height: 240px; width: 240px; opacity: 0; transition: transform 552ms, opacity 386ms 166ms;"&gt;
    &lt;/div&gt;
&lt;/button&gt;</pre><p></p>

<p>複雑なHTMLであったり、多くのclass名であったりをいちいち書かなくてもいいようにIonic 2が処理してくれますので、開発コードがとても可読性の高いものとなります。
Ionic 2が用意しているComponentsは、<a href="http://ionicframework.com/docs/v2/components/#overview" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">公式のサイト</a>から一覧で確認できます。</p>

<p><a href="http://ionicframework.com/docs/v2/components/#overview" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6-300x184.png" alt="ionic2-components" width="300" height="184" class="alignnone size-medium wp-image-22361" style="border:1px solid #c0c0c0" srcset="/wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6-300x184.png 300w, /wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6.png 640w, /wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6-207x127.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>Ionic 2を使っていると、最初は「ドキュメントにあるコンポーネントをコピペしていく」だけで大部分のUIデザインが完了します。ですので、ワイヤーフレーム段階からがしがし作っては捨てるタイプの<strong>小さく回す開発</strong>が可能です。</p>

<h2>Ionic 2のUI</h2>

<h3>Themeを書き換える</h3>

<p>Ionic 2は、CSSを拡張したSCSSを採用しています。変数などが使えるので、<code>!important</code>を使わずにThemeの変更をすることが可能です。
実際に、SCSSの変数機能を利用して、Themeを自作してみましょう。</p>

<p><code>src/theme/variables.scss</code>を開いてみてください。現在設定されているThemeの変数を入れ替えたり、上書きするための設定ファイルです。</p>

<p><img src="/wp-content/uploads/2017/02/b7120d716c16d8f1965294569cd704ea-300x137.png" alt="" width="300" height="137" class="alignnone size-medium wp-image-22480" style="border:1px solid #c0c0c0" srcset="/wp-content/uploads/2017/02/b7120d716c16d8f1965294569cd704ea-300x137.png 300w, /wp-content/uploads/2017/02/b7120d716c16d8f1965294569cd704ea.png 640w, /wp-content/uploads/2017/02/b7120d716c16d8f1965294569cd704ea-207x95.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></p>

<p>この$colorsで設定されているprimaryがdefaultの色となります。試しにこの色をredに変更して保存してみてください。正常にLiveReloadが動作していれば、自動的に以下のようにThemeが変更されます。</p>

<p><img src="/wp-content/uploads/2017/02/83ba668bf8978ceaa5c99c7298db6ddb-300x201.png" alt="" width="300" height="201" class="alignnone size-medium wp-image-22483" style="border:1px solid #c0c0c0" srcset="/wp-content/uploads/2017/02/83ba668bf8978ceaa5c99c7298db6ddb-300x201.png 300w, /wp-content/uploads/2017/02/83ba668bf8978ceaa5c99c7298db6ddb.png 640w, /wp-content/uploads/2017/02/83ba668bf8978ceaa5c99c7298db6ddb-207x139.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></p>

<p>他にも、様々な設定変数がIonic2には用意されています。試しにツールバーの背景色を変更してみましょう。 $colorsの下に、以下の値を入力してください。</p>

<p></p><pre class="crayon-plain-tag">$toolbar-background : yellow;</pre><p></p>

<p>そしてリロードすると、ツールバーの背景色が黄色になるのを確認できます。これらの設定変数は<a href="http://ionicframework.com/docs/v2/theming/overriding-ionic-variables/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Overriding Ionic Sass Variables</a>に書いてありますので、ここを見ながら変数を作っていくと、簡単にオリジナルThemeを作ることができます。</p>

<h3>プラットフォームチェック</h3>

<p>Ionic 2は、それぞれのモバイルOSの文化に寄り添ったデザインで表示されるようになっています。上記はChromeで表示しているのでマテリアルデザインとなっていますが、iOS SafariでみるとiOSのデザインに自動的に変更されます。</p>

<p>それぞれのモバイルブラウザでどのように表示されるかを見比べる機能があるので使ってみましょう。<code>http://localhost:8100/ionic-lab</code>にアクセスしてみてください。先程の表示画面がそれぞれのモバイルプラットフォーム毎にどのように表示されるのか見比べることができます。</p>

<p><img src="/wp-content/uploads/2017/02/a60eeff0d99ea74a437e9f542dd9aba5-640x409.png" alt="ionic-lab" width="640" height="409" class="alignnone size-large wp-image-22355" style="border:1px solid #c0c0c0" srcset="/wp-content/uploads/2017/02/a60eeff0d99ea74a437e9f542dd9aba5.png 640w, /wp-content/uploads/2017/02/a60eeff0d99ea74a437e9f542dd9aba5-300x192.png 300w, /wp-content/uploads/2017/02/a60eeff0d99ea74a437e9f542dd9aba5-207x132.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>UI,UXを考える上で、それぞれのユーザのプラットフォームの文化に寄り添うのはとても重要な要素ですので、とても重宝する機能です。</p>

<h2>Ionic 2をコンパイルする</h2>

<h3>iPhoneアプリとしてコンパイルする</h3>

<p>作ったWebアプリを、iOS/Android/Windows Phoneのアプリとしてコンパイルすることができ、それぞれのプラットフォーム上でのアプリストアで販売できます（このように作られたアプリをハイブリッドアプリといいます）</p>

<p>コンパイルは、とても簡単です。例えば、Xcodeをインストール済みのMacでしたら、以下のコマンドを入力するだけでコンパイルが行われ、iOSアプリとしてのプレビューが行われます。</p>

<p></p><pre class="crayon-plain-tag">ionic cordova emulate ios</pre><p></p>

<p><img src="/wp-content/uploads/2017/02/3bb7d0edd89d05a7b43f6f55851877c5-163x300.png" alt="" width="163" height="300" class="alignnone size-medium wp-image-22369" srcset="/wp-content/uploads/2017/02/3bb7d0edd89d05a7b43f6f55851877c5-163x300.png 163w, /wp-content/uploads/2017/02/3bb7d0edd89d05a7b43f6f55851877c5-113x207.png 113w, /wp-content/uploads/2017/02/3bb7d0edd89d05a7b43f6f55851877c5.png 322w" sizes="(max-width: 163px) 100vw, 163px" /></p>

<h3>Webがオフラインでも表示できるようにする</h3>

<p>Ionic 2は、Googleが提唱している<a href="https://developers.google.com/web/fundamentals/getting-started/primers/service-workers?hl=ja" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Service Worker</a>という<strong>Webサイトをアプリとして使うための技術</strong>を積極的にキャッチアップしています。Service Workerには様々な機能がありますが、Ionic 2はデフォルトでオフライン対応が実装されています。</p>

<p>オフライン対応を有効するのはとても簡単で、<code>src/index.html</code>の17-24行目のコメントアウトを外すだけです。</p>

<p></p><pre class="crayon-plain-tag">&lt;script&gt;
    if ('serviceWorker' in navigator) {
      navigator.serviceWorker.register('service-worker.js')
        .then(() =&gt; console.log('service worker installed'))
        .catch(err =&gt; console.log('Error', err));
    }
  &lt;/script&gt;</pre><p></p>

<p>ただ注意事項が2点ありまして、1つはServiceWorkerはSSLでしか動かないです。もうひとつは、現行ではiOS非対応ですので、iPhoneでの確認をすることはできません。ご注意ください。</p>

<h3>リリース版をコンパイルする</h3>

<p>Ionic 2のコンパイルは、<code>serve</code>/<code>cordova emulate</code>と<code>npm run build --prod</code>のに分かれます。簡単に違いをいうと、前者はLiveReloadをストレスなく行うために実環境のパフォーマンスを落としていて（Just in Time Compile）、後者はコンパイル時に時間こそがかかるものの、それ以降はとても高速に動作します（Ahead of Time Compile）。ですので、開発環境では前者を、本番環境では後者を使います。
Ahead of Time Compileのコマンドは以下ですので、お気をつけください。</p>

<p></p><pre class="crayon-plain-tag">npm run build --prod</pre><p> 
</p><pre class="crayon-plain-tag">ionic cordova build ios --prod</pre><p> 
</p><pre class="crayon-plain-tag">ionic cordova build android --prod --release</pre><p></p>

<p>なお、Compileの違いの詳細に興味がある方は、<a href="http://qiita.com/Quramy/items/a603ddb47d6e4b3497e1" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Angular AoTガイド</a>をご覧ください。</p>

<h2>終わりに</h2>

<p>ここまでは、入門的HowToをご紹介してきました。冒頭でもふれたとおり、近年のフロントエンドのキーワードをまとめてさわるにはとても優れたモバイルフレームワークです。しかしながら、実案件に入るとAngular 2ベースのComponents開発であったり、SPA文化であったり、開発に入る前にもっと触れておいた方がいい知識があります。そこで、次の入り口として、3つをご案内して結びにかえさせていただきます。</p>

<h3>公式のチュートリアルでもっと学ぶ</h3>

<p>Ionic 2では、初心者向けのチュートリアルを用意しています。英語なので少し大変かもしれませんが、大変わかりやすく書かれてありますのでおすすめです。Ionic 2を使う前提でしたら、Angular 2のチュートリアルをする前にぜひこちらを試してみてください。</p>

<p><a href="http://ionicframework.com/docs/v2/intro/tutorial/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Ionic 2 Tutorial</a></p>

<h3>日本語コミュニティあります</h3>

<p>今では随分改善されましたが、Ionic 2はリリース前（特にβ版時代）はとても日本語情報が少なかったので、知見を共有するためにslackのオープンチャンネルを開設しました。分かる方がいれば有志が回答する形ですのでレスポンス速度はあまり高くありませんが、ご活用いただけましたら幸いです。</p>

<p><a href="https://ionic2-ja.herokuapp.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Ionic 2 slackチーム</a></p>
]]></content:encoded>
		
		<series:name><![CDATA[React/Angular2時代のWeb開発]]></series:name>
	</item>
		<item>
		<title>React/Angular2時代のUIフレームワーク考──Ionic2、Onsen UI2を語る</title>
		<link>/shumpei-shiraishi/20411/</link>
		<pubDate>Fri, 02 Sep 2016 00:00:21 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[Angular2]]></category>
		<category><![CDATA[Ionic2]]></category>
		<category><![CDATA[Onsen UI2]]></category>
		<category><![CDATA[React]]></category>

		<guid isPermaLink="false">/?p=20411</guid>
		<description><![CDATA[連載： React/Angular2時代のWeb開発 (2)読者の皆様こんにちは、編集長の白石です。 先日ふとしたきっかけで、本サイトの認定エキスパートでありアシアル株式会社の社長でもある田中 正裕さんと、Web技術につ...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/webdev-2016/" class="series-400" title="React/Angular2時代のWeb開発" data-wpel-link="internal">React/Angular2時代のWeb開発</a> (2)</div><p>読者の皆様こんにちは、編集長の白石です。</p>

<p>先日ふとしたきっかけで、本サイトの認定エキスパートでありアシアル株式会社の社長でもある<a href="https://html5experts.jp/masahiro/" data-wpel-link="internal">田中 正裕さん</a>と、Web技術について語り合う機会がありました。</p>

<p>ReactやAngular2といった次世代のアプリケーションフレームワークが存在感を増す中で、UIを構築するためのフレームワークはどう進化するのか？</p>

<p>これらのアプリケーションフレームワークをベースとした<a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>や<a href="https://onsen.io/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a>と言ったUIフレームワークについて、それぞれの立場から語り合ってみました。
（田中さんは<a href="https://onsen.io/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a>の開発者、白石は<a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>をかなりヘビーに使い倒しています）</p>

<p>Progressive Web Apps (PWApps)というキーワードが認知を広げる中で、ハイブリッドアプリやモバイルサイトを構築する手段として、これらのフレームワークは存在感を増しています。PWApps、React、Angular2、Cordovaといったキーワードに関心のある方は必読です！</p>

<p>では、本編をお楽しみください。</p>

<h2>対談参加者のプロフィール</h2>

<p><img src="/wp-content/uploads/2013/07/f9ae33ea6273febd996e092fca378753.jpg" alt="田中 正裕" />
<strong>田中 正裕</strong>(アシアル株式会社 代表取締役社長)</p>

<p>ユーザーインタフェース設計からインフラストラクチャー構築まで、最先端の技術を駆使したシステム構築を手がける。特にPHPをはじめとするOSSや、HTML5やJavaScriptといったオープンなアーキテクチャーを用いたシステムの構築に尽力している。モバイルアプリ開発プラットフォーム「Monaca」のプロダクトマネジャーを兼務。</p>

<p><img src="/wp-content/uploads/2015/01/bf985f8ff1bf6f607fcd1950db7ecac7-66x66.jpg" alt="白石 俊平" />
<strong>白石 俊平</strong>(HTML5 Experts.jp編集長)</p>

<p>株式会社オープンウェブ・テクノロジーCEO。2015年12月、「最先端は、ここにある。」を謳うテクノロジー情報キュレーションサービスTechFeedをリリース。Web技術者向け情報メディア「HTML5 Experts.jp」編集長。日本最大（6,500名超）のHTML5開発者コミュニティ「html5j」ファウンダー。Google社公認Developer Expert (HTML5)、Microsoft社公認Most Valuable Professional (IE) などを歴任。著書に「HTML5&amp;API入門」（2010, 日経BP）、「Google Gearsスタートガイド」（2007, 技術評論社）など。監訳に「実践jQuery Mobile」（2013, オライリー）など。</p>

<h2><a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>と<a href="https://onsen.io/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a></h2>

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

<p><b>白石:</b> 本日はよろしくお願いします。今回はReact/Angular2時代のUIフレームワークということで、最先端のUIフレームワークについて語る場にしたいと思っています。</p>

<p><b>田中:</b> はい、よろしくお願いします！</p>

<p><b>白石:</b> まずは、<a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>や<a href="https://onsen.io/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a>について馴染みのない読者も多いと思うので、それぞれのフレームワークとぼくらの関わりについて話しましょうか。まずは、両フレームワークの共通点としては、以下の様な点が挙げられるかと思います。</p>

<ul>
<li>どちらもコンポーネント指向のUIフレームワーク。独自のタグを元に、HTMLっぽいテンプレートを記述することでUIを構築していける。</li>
<li>どちらも最初から数多くのUIコンポーネントを備えており、モバイルネイティブに近い見た目のアプリを作れる。</li>
<li>どちらも、Cordovaをベースとしたモバイルアプリ開発（ハイブリッドアプリ）を前提としている。そのため、以下に示すようなCordovaの特徴を備えることになる。

<ul>
<li>ほぼ完全なクロスプラットフォーム性を備える</li>
<li>プラグインを通じて、ネイティブの機能を呼び出すことができる</li>
<li>WebView上で動作するので、ネイティブアプリに比べて動作が遅い</li>
</ul></li>
</ul>

<p><b>白石:</b> で、こうした認識をベースとして、それぞれのフレームワークの違いなどに踏み込んでいければと思います。
まずは田中さんとOnsen UIの関係ですが、田中さんはOnsen UIのメイン開発者ということでいいんでしょうか？</p>

<p><b>田中:</b> 正確に言うと、開発のリードをしている立場ですね。</p>

<p><b>白石:</b> では、開発の優先順位なども田中さんが決定してらっしゃるということですね。チームは何人くらいいるんですか？</p>

<p><b>田中:</b> 以前弊社に所属していた<a href="https://html5experts.jp/anatoo/" data-wpel-link="internal">久保田 光則さん</a>も含めると、4〜5人くらいがフルコミットしている感じですね。</p>

<p>そもそもOnsen UIとは何かというと、バージョン1の時はAngular1をベースとしたUIフレームワークでした。現在開発を続けている<a href="https://onsen.io/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a>の大きな特徴は「<strong>アプリケーションフレームワーク非依存</strong>」ということです。</p>

<p></p><pre class="crayon-plain-tag">&lt;!--
Onsen UI2のコード例。
以下の例はAngular2だが、Angular1やReactと組み合わせることも可能
--&gt;
&lt;ons-page&gt;
  &lt;ons-input (change)="onChange()" type="text"&gt;&lt;/ons-input&gt;
  &lt;ons-button&gt;Click Me!&lt;/ons-button&gt;
&lt;/ons-page&gt;</pre><p></p>

<p><a href="https://onsen.io/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a>自体はWeb Componentsに則って作られていて、それをReactやAngular2、Angular1、さらにはjQueryなどと組み合わせて利用できます。最近だとVue.jsとか今はMeteorとかいうバインディングも増えていますね。</p>

<p><b>白石:</b> そこがIonicとの大きな違いですね。</p>

<p>ぼくは、先日リリースした<a href="https://techfeed.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">TechFeed</a>というアプリで、<a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>を全面的に採用しました。TechFeedはエンジニア向けのニュースアプリなのですが、Web/メール/モバイルアプリと、様々なクライアントがあります。そのモバイルアプリを開発するにあたって、プラットフォームごとにコードベースを分けたくなかったので、Cordova上で動作するモバイルアプリ用UIフレームワークを探していたんですね。</p>

<p>その際、まだβ版が出たばかりだったAngular2が割とアーキテクチャ的に美しくまとまっていたのと、<a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>が既にAngular2に対応していたので、採用することにしました。
なので、<a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>はAngular2をベースにしたUIフレームワークです。Angular2以外では動きません。</p>

<p></p><pre class="crayon-plain-tag">&lt;!--
  Ionic2のコード例。
  タグの名前などは異なるが、あまり変わらない。
--&gt;
&lt;ion-content&gt;
  &lt;ion-input (change)="onChange()" type="text"&gt;&lt;/ion-input&gt;
  &lt;button&gt;Click Me!&lt;/button&gt;
&lt;/ion-content&gt;</pre><p></p>

<p>この、UIフレームワークとアプリケーションフレームワークが密結合（<a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>）なのか、それとも疎結合（<a href="https://onsen.io/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a>）なのかというところが、今日の対談のポイントになりそうですね。</p>

<p>ただこのまま、UIフレームワークありきの議論に入っていく前に、ぼくは一つ確認したいことがありまして。<strong>そもそもUIフレームワークって必要とされているんでしょうか？</strong></p>

<h2>UIフレームワークは必要か？</h2>

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

<p><b>白石:</b> 「いらないだろう」という前提で話すわけではなくて、Webの世界にとってコンポーネント指向のUIフレームワークというのはまだ新しい存在なので、そもそも「なぜ必要なのか？」を確認したいのです。とりあえず、フレームワークが必要か不要かで言うと、Webデザイナーさんの中には、フレームワークを嫌がる方も多い気がするのですが。</p>

<p><b>田中:</b> 確かにそういう方もいらっしゃるとは思います。が、（Bootstrapなどのような）CSSフレームワークと、JavaScriptも含めたUIフレームワークは別に考えるべきじゃないかと思います。</p>

<p><b>白石:</b> 確かにそうですね。CSSフレームワークは、デフォルトでそれなりの見た目になるとか、コーディングスタイルが統一されるなどの利点はあると思いますが、フレームワークのスタイルを変更しようとすると途端に面倒だったりしますしね。フレームワーク独自のルールを覚えなくちゃいけないし、最終的には全部リセットしたくなったり（笑）。</p>

<p><b>田中:</b> その通りです。それに、ことモバイルアプリやサイトをWeb技術で作る場合に大事なのって、単なるCSSのプリセットがあることではありません。実際に操作してみた時のスムーズさだったり、アプリ全体から受ける印象だったりと、振る舞いも含めたもっと包括的なUXです。</p>

<p>そういう面で、アプリ全体のUXを統一して、なおかつプラットフォームに馴染んだものにするためには、やはり一貫した枠組みが必要です。それは実際に私がMonacaを運営する上で、お客様からご要望をいただいてきたところでもありますし、だからこそOnsen UIを作ることにも繋がりました。ということで、私はUIフレームワークは確実に必要だと思いますね。</p>

<p><b>白石:</b> なるほど。ただ、UIフレームワークって、寿命が短くないですか？昔はjQuery MobileやKendo UIなんてのもありましたが、今ではあまり使っているという話を聞きません。</p>

<h3>UIフレームワークとアプリケーションフレームワーク</h3>

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

<p><b>田中:</b> それは、それらのフレームワークがUI的に古びてしまったというわけではなく、アーキテクチャ的に古いと見なされたから使われなくなってしまったんだと思うんです。JavaScriptアプリケーションのアーキテクチャは、ここ数年目まぐるしく移り変わってきました。jQueryのあとAngular1、React、Angular2, 他にもRiot.jsとかVue.jsなども出てきている。</p>

<p>ですがそれはアーキテクチャの進化であって、UIが進化したわけではありません。例えばUIの進化って、iOS7からフラットデザインになりましたとか、マテリアルデザインが出てきましたとか、そういうことです。こうした進化がすごく早いかと言われると、正直そうは思いません。UIフレームワークが、アプリケーションアーキテクチャの進化に引きずられちゃってたんじゃないか、というのがぼくの思うところです。</p>

<p><b>白石:</b> なるほど、だから<a href="https://onsen.io/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a>はアプリケーション・フレームワークに依存しない形で設計されているわけですね。ぼくはTechFeedを<a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>で作りましたが、それはAngular2の採用を先に決めていたから、というのもあります。というか、その時はまだ<a href="https://onsen.io/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a>が今ほど開発が進んでいなかったので、モバイルアプリを包括的に作れるUIフレームワークと、コンポーネント指向のアプリケーションフレームワークの組み合わせが、<a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a> + Angular2しかなかったんですよね。</p>

<p><b>田中:</b> <a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>はAngular2に強く依存しているわけですが、<a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>を学ぶには先にAngular2を学ばなくてはならないわけですよね。私はそこを少しもったいないな、と思います。元々私がUIフレームワークで実現したかったことって、「JavaScriptのフレームワークを学ばなくても簡単に使える」ということだったので。</p>

<p><b>白石:</b> 確かに、Onsen UIはそういうところの配慮が行き届いている気がします。ぼくもOnsen UI1の時に使わせていただいていましたが、Webサイト上のサンプルコードが良くできていて、コピペするだけでUIが作れてしまうのが、とても楽ちんでした。</p>

<h3>それぞれのフレームワークが目指すもの</h3>

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

<p><b>田中:</b> あと、<a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>はどことなくUIフレームワークというよりは「プラットフォーム」を目指している気がします。</p>

<p><b>白石:</b> 確かに。Ionicはモバイルアプリを作る際はCordovaを使用するのですが、CordovaもあくまでIonicが規定するプラットフォームの一部というつもりなのか、<code>cordova</code>コマンドをラップした<code>ionic</code>コマンドを提供していますね。また、CordovaプラグインのAPIをラップした <code>ionic-native</code> というモジュールも提供しています。これは、各種プラグインをTypeScriptから使えるようにしてくれているので、結構ありがたくはあるんですが。</p>

<p><b>田中:</b> UIフレームワークを入り口として、プラットフォームに入ってきてください、というスタンスな気がしますよね。
Onsen UIはあくまでUIフレームワークであり、アプリケーションスタックの一部という位置付けなので、そこは思想の違いが現れている気がします。</p>

<p><b>白石:</b> <a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>はアプリケーションプラットフォームを限定していて、プラットフォームを志向している。<a href="https://onsen.io/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a>はアプリケーションプラットフォーム非依存で、ライブラリを指向している。こういう対比になりますね。こうして並べると、個人的には<a href="https://onsen.io/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a>の方が設計面で魅力を感じます。</p>

<p><b>田中:</b> ありがとうございます(笑)。</p>

<p><b>白石:</b> ただ、まだ結論を出すのは早い気もしますね。どちらも正式リリース前ですし(笑)。</p>

<p>TechFeedがAngular2と<a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>を採用しているからというわけではないですが、アプリケーションプラットフォームを限定しているからこその強みもあるかもしれません。ぼくはまだ<a href="https://onsen.io/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a>を実際に触ってみたことがないので比較ができないのですが、<a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a>のほうがAngular2との相性とかはさすがにいいでしょうし。先ほど出てきた<code>ionic-native</code>パッケージとかもなかなか便利です。</p>

<p>またぼくらがIonicを採用した理由の一つには、コミュニティの大きさがIonicのほうが大きそうだった、という理由もあります。GitHubのStarの数が、Ionicは25,000、Onsen UIは3,000という違いがあったので。コミュニティの大きさは、Web上の情報量の差にもなって表れてくるので、困ったときに情報を得やすいと思ったのです。</p>

<p>このようにいろんな観点での比較ができそうなので、一概にどちらが優れているとここでは結論付けられなそうですが、こうした議論が読者の皆さんにとって判断の助けになるといいですね。</p>

<p>（編集部: 参考までに、ここまでに出てきた論点や、Web上で得られる内容を比較した表を掲載しておきます）</p>

<table>
<thead>
<tr>
  <th>項目</th>
  <th><a href="http://ionicframework.com/docs/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a></th>
  <th><a href="https://onsen.io/v2/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a></th>
</tr>
</thead>
<tbody>
<tr>
  <td>依存するアプリケーションプラットフォーム</td>
  <td>Angular2</td>
  <td>非依存（現時点ではAngular1/2, Reactなど）</td>
</tr>
<tr>
  <td>フレームワークの実装言語</td>
  <td>TypeScript</td>
  <td>ES2015とTypeScript</td>
</tr>
<tr>
  <td>目指す地点</td>
  <td>プラットフォーム？</td>
  <td>ライブラリ</td>
</tr>
<tr>
  <td>GitHub上でのStar数 (2016/8/25時点)</td>
  <td>25,370</td>
  <td>3,216</td>
</tr>
</tbody>
</table>

<p>（UIコンポーネントは現在のところほぼ同数ですが、どちらかにしか実装されていないコンポーネントもいくつかありますし、今後大きく増えていく部分だと思われるため、表からは除外しています）</p>

<h3>今後のWeb技術の展望を語る</h3>

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

<p><b>白石:</b> 最後にお聞きしたいんですが、Onsen UIに限らず、今後のWeb技術って、どういう方向に進んでいくとお考えですか？</p>

<p><b>田中:</b> Web技術って、今どんどん開発のバリエーションが増えている状態だと思っています。それはフラグメンテーションと呼べるかもしれない。例えば、Angular2がTypeScriptを、ReactがJSXを使用しているように、です。これらが収束して一つの太い流れができていくのか、このまま個別の進化を続けていくのかは、まだ何ともいえません。</p>

<p><b>白石:</b> テクノロジーのスタックが積み上がっていくにつれ、それぞれの開発手法の間の差異が広がっているというわけですね。こうした状況は、なぜ起きていると考えられますか？</p>

<p><b>田中:</b> 私はMonacaを通じて「ハイブリッドアプリ」、つまりWeb技術でモバイルアプリを作るというところをずっとやってきました。その経験から言うと、モバイルアプリは大きく2パターンあります。一つは長期間のメンテナンスが必要なアプリ。もう一つはキャンペーンなどのワンタイムなアプリケーションですね。前者には強固な基盤が求められるので、Angular2のようなものが求められます。後者はそうではないですね。逆にさくっと作れるようなものが求められます。</p>

<p>こうしたニーズの二分化も理由の一つじゃないかなあとは思っています。</p>

<p><b>白石:</b> なるほど、ニーズが分かれていると。そういう意味でいうと、静的な文書中心の「Webサイト」と、Single Page Application化が進む「Webアプリ」の違いも、フロントエンド技術のフラグメンテーションに一役買っていそうです。「Webサイト」の制作においては、まだまだjQueryは現役ですし、無理にそこを変える必要もなさそうですし。</p>

<p>あと、Web技術の適用範囲が増えてきているというのもあるかもしれませんね。WebVRとか、JavaScriptで動かせる組み込み基板とか。ウェアラブルやロボティクスという分野にも、Web技術が広まっていくとは思います。実際にそれがどれくらい使われるかは未知数ですけども。</p>

<p><b>田中:</b> とはいえWeb技術って、情報技術全体から見るとエッジの技術ではありませんよね。かなりコモディティ化の進んだ、汎用的でメインストリームな技術。</p>

<p><b>白石:</b> 確かに。これだけ技術が進んでも、結局のところHTML/CSS/JavaScriptという基本的な部分はあまり変わっていません。</p>

<p><b>田中:</b> こうしたWeb技術の適用範囲をいかに広げていくか…というのは、個人的な興味として強くあります。いちエンジニアとして、Webのスキルセットをいろんなプラットフォームで使えるよう後支えしたいというのは、私の目指すところです。</p>

<p><b>白石:</b> それは、HTML5 Experts.jpでもぜひ進めていきたいところです。ではそろそろお時間ですね。本日はお付き合いいただき、どうもありがとうございました！</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/08/P7140983.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/08/P7140983-640x480.jpg" alt="P7140983" width="640" height="480" class="aligncenter size-large wp-image-20436" srcset="/wp-content/uploads/2016/08/P7140983.jpg 640w, /wp-content/uploads/2016/08/P7140983-300x225.jpg 300w, /wp-content/uploads/2016/08/P7140983-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
]]></content:encoded>
		
		<series:name><![CDATA[React/Angular2時代のWeb開発]]></series:name>
	</item>
	</channel>
</rss>
