<?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="/rdlabo/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>「次のモバイルファースト」がやってくる！UIと機能設計をIonic 2を使って学んでみよう</title>
		<link>/rdlabo/22596/</link>
		<pubDate>Wed, 29 Mar 2017 01:00:43 +0000</pubDate>
		<dc:creator><![CDATA[榊原昌彦]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[デザイン]]></category>
		<category><![CDATA[Ionic 2]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[モバイルファースト]]></category>

		<guid isPermaLink="false">/?p=22596</guid>
		<description><![CDATA[レスポンシブデザインが生まれたばかりの2009年には、はやくも「モバイルファースト」という言葉が使われ始めていました。 WebサイトはPCから見るものだったのは今や昔。今ではスマートフォンの普及により、多くのWebサイト...]]></description>
				<content:encoded><![CDATA[<p>レスポンシブデザインが生まれたばかりの2009年には、はやくも「モバイルファースト」という言葉が使われ始めていました。
WebサイトはPCから見るものだったのは今や昔。今ではスマートフォンの普及により、多くのWebサイトではPCとモバイルからのアクセス数が逆転してるWebサイトも多く、「モバイルファースト」な開発も当たり前になりました。</p>

<p>しかし、2009年の「モバイルファースト」と、今の「モバイルファースト」は大きく中身が成長しました。モバイルフレームワークであるIonic 2も先日リリースされましたので、ここで改めて「モバイルファースト」とは何かを考え、モバイルの設計を見直していきます。</p>

<h2>レスポンシブとモバイルファースト</h2>

<p>モバイルファーストは、「モバイル環境に最適化した開発手法」と説明することができます。</p>

<p>モバイル（多くはiPhoneを指しました）は解像度が低く、操作方法もPC文化と異なり、かつ通信速度も遅いという制約があります。イベントひとつとっても、onclickでは待機時間があるから、jQueryのtapイベントを使う、というようにPCとモバイル開発の乖離をどのようにするかの課題があります。</p>

<p>モバイルファーストがいわれはじめた2009年当時は「PC版を作ったあと、MediaQueriesを使ってモバイルでも表示させる」というワークフローが主流でしたが、これではPCとモバイル開発の乖離にアプローチするのが難しかったため、「先にモバイル版をつくる」ワークフローを取り入れる現場が多く生まれました。PCよりもモバイルを優先させるので、「モバイルファースト」だったわけです。</p>

<p>その頃は、モバイルファーストとレスポンシブデザインの区別がつかない議論を度々聞きましたが、もうここらへんの誤解は整理された感があります。</p>

<h2>Googleが提示する「次のモバイルファースト」</h2>

<p>モバイルからのアクセスが主流になる中で、Googleは「次のモバイルファースト」として、2つの選択肢を提示しました。AMP（Accelerated Mobile Pages）と、PWA（Progressive Web Apps）です。</p>

<p>簡単に概要をいうと、AMPは超高速でWebサイトを表示することができます。HTMLやJavaScriptは高速化を妨げるものは使えなくなっており、またCSSはインラインのみでの表示でありと、ひたすらページ表示速度をあげるための仕様です。
PWAは「Webのアプリ化」を標榜したもので、インストール型のアプリと同様にWebを使うことができます。代表的な内容でいえば、Webをアプリとしてインストールしたり、オフラインでも表示することができたり、プッシュ通知を受け取ることができるようになります。</p>

<p>Googleはこの2つの仕様により、</p>

<ul>
<li>普通のWebサイトなら、超高速化するためにAMP
<li>いろいろな機能を実装するなら、PWAでWebをアプリ化
</ul>

<p>という2つの「次のモバイルファースト」を提示しました。これは、今の「レスポンシブにしてモバイルで表示できればOK」から大きな変化であり、これからのモバイル体験を大きく変えるものになるのではないでしょうか。</p>

<h2>UIデザインのモバイルファースト</h2>

<p>PWAの標榜する「Webのアプリ化」は、UIデザインにおいても「次のモバイルファースト」を生み出す可能性が高いです。
皆さんご存知の通り、PCと（現在の）モバイル、そしてモバイルアプリはUI文化が異なります。PCとモバイルのWeb表示はレスポンシブデザインによって多くの共通化されたモジュールが使われていますので似通っておりますが（便宜上、これらを「現行WebUI」といいます）、モバイルアプリUIは別物に近いといっていいでしょう。</p>

<p>例えば、「現行WebUI」では、HeaderのロゴはクリックしてHOMEに戻るという文化があります。ほとんどがこのUIを採用しています。しかしながらモバイルアプリはHeader部にロゴは入れませんし、入れていてもクリックさせない場合が多いです。
また、「現行WebUI」ではクリックできる場所は明確にするしきたりがあります。例えばカードデザインでも下に「詳しくみる」と注釈をつけてクリックを促したりします。しかしながら、モバイルアプリUIでは「カードはとりあえずクリックしてみるよね」という風潮があります。</p>

<p><img src="/wp-content/uploads/2017/03/074f1efc473594fd3f8d73e2b8b8f40c.png" alt="" width="640" height="408" class="alignnone size-full wp-image-22621" srcset="/wp-content/uploads/2017/03/074f1efc473594fd3f8d73e2b8b8f40c.png 640w, /wp-content/uploads/2017/03/074f1efc473594fd3f8d73e2b8b8f40c-300x191.png 300w, /wp-content/uploads/2017/03/074f1efc473594fd3f8d73e2b8b8f40c-207x132.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>モバイルファーストで考えた時、Webがアプリ化する前提でのUIの再設計も必要になってくるでしょう。その時に、各デバイスが発表しているデザインガイドラインはとても有用です。</p>

<ul>
  <li><a href="https://developer.apple.com/jp/documentation/UserExperience/Conceptual/MobileHIG/BasicsPart/BasicsPart.html" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">iOS Human Interface Guidelines（日本語版）</a></li>
  <li><a href="https://material.io/jp/guidelines/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">マテリアル デザイン</a></li>
  <li><a href="https://msdn.microsoft.com/ja-jp/mt634411.aspx" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Windows 10 アプリ UX デザイン ガイド（Modern UI）</a></li>
</ul>

<p>AMPのように表示速度に最適化したWebはまた異なるUI文化が生まれてくるのでしょうが、「Webのアプリ化」を標榜するPWAはモバイルWebのUIもアプリサイドに寄せていくことになりそうです。
　</p>

<h2>デバイスの作法に寄り添うために</h2>

<p>WebのUIもアプリサイドに寄っていくことを考えた時、一番大きなハードルになるのは前挙した「各デバイス毎のデザインガイドライン」をどのように吸収するかです。モバイルでは、デバイスの文化に寄り添うUI設計が最もユーザの学習コストが低く、適切なUI,UXを提供することができます。iPhoneはフラットデザイン、Androidはマテリアルデザイン、WindowsPhoneはModern UIを提供するために1リソースで複数デザインパターンを用意して保守し続けることはハードルが高く現実的ではありません。</p>

<p>そのハードルに対して、適切にソリューションを提供してるモバイルフレームワークのひとつに、Ionic 2があります。</p>

<p>Ionic 2は、2017年1月にリリースされた、Angular 2を使って構築するモバイルフレームワークです。現在、（著者が確認する範囲では）唯一のPWA対応を標榜したモバイルフレームワークとなっております。</p>

<h3>Ionic 2のWebComponents</h3>

<p>よくモバイル開発で使われるComponents（CardやFabitなど）を、フラットデザイン、マテリアルデザイン、Modern UIのパターンを用意し、フレームワークが判断して自動的にデザインをデバイスに合わせます。</p>

<p><img src="/wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6.png" alt="" width="640" height="393" class="alignnone size-full wp-image-22361" srcset="/wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6.png 640w, /wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6-300x184.png 300w, /wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6-207x127.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>Ionic 2は、デフォルトで用意しているUIパターンは、複雑になりがちなHTMLを「Web Components」という技術によってカスタムタグを用意して、コーダーの負担を減らす工夫をしています。例えば&lt;button ion-button&gt;Login&lt;/button&gt;というボタンがあると、これをフレームワークが自動的に展開して、ユーザには</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>と表示されます。手元のソースコードはシンプルですので、可読性が高く、またデバイス毎の表示に困ることはありません。2017年3月現在、28のコンポーネントがデフォルトで用意されています（<a href="http://ionicframework.com/docs/v2/components/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">コンポーネント一覧は公式リファレンスをご覧下さい</a>）</p>

<p><img src="/wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6.png" alt="" width="640" height="393" class="alignnone size-full wp-image-22361" srcset="/wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6.png 640w, /wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6-300x184.png 300w, /wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6-207x127.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>また、フレームワークが直下に&lt;ion-app&gt;というタグを生成してくれており、そこにデバイスを示すclass（iPhoneだと<code>ios</code>、Androidは<code>md</code>、WindowsPhoneは<code>wp</code>）をつけてくれます。なので、もしも自分自身でカスタムデザインを用意したい場合、それを親にしてCSS設計することが可能です。</p>

<h3>Ionic 2のオフライン表示</h3>

<p>GoogleのPWAのガイドラインの中で<a href="https://developers.google.com/web/progressive-web-apps/checklist" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">「Progressive Web App Checklist」</a>を提供しています。Webをアプリ化するために、これだけはクリアしてねというチェックリストです。</p>

<p>その中で「オフラインでも表示される」というものがあります。普通のWebサイトでは、キャッシュを持っていてもオフライン環境で更新すると「オフラインです」とエラーがでます。しかしながら、Service Workerという技術を使うと、オフライン環境では自動的にキャッシュを返すことができます。</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>このことによって、Service Workerが対応している場合は<code>service-worker.js</code>を読み込み、オフライン対応が行われます。回線が安定してるPCとは異なり、トンネルの中であったり山中であったりでも安定してコンテンツを提供するためには必須の機能です。
<br>
Ionic 2では、<code>sw-toolbox.js</code>を利用しておりますので、詳細に興味がある方は<a href="https://googlechrome.github.io/sw-toolbox/usage.html#main" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">「sw-toolbox」</a>をご覧下さい。拡張すれば、いろいろなオフライン時の挙動を制御できます。</p>

<h3>Ionic 2のmanifest.json</h3>

<p>PWAでは、Webをアプリストアのアプリ同様にHOME画面にアイコン付きで登録することができます。manifest.jsonは、その時のアイコンであったりとか、起動した時のヘッダー部の配色であったりを定めることができます。
初期では以下の通りです。</p>

<p></p><pre class="crayon-plain-tag">{
  "name": "Ionic",
  "short_name": "Ionic",
  "start_url": "index.html",
  "display": "standalone",
  "icons": [{
    "src": "assets/imgs/logo.png",
    "sizes": "512x512",
    "type": "image/png"
  }],
  "background_color": "#4e8ef7",
  "theme_color": "#4e8ef7"
}</pre><p></p>

<p>これを設定すると、Androidで表示された場合に自動的に「ホーム画面に追加」というバナーがでてきて、ユーザに対してWebをアプリとして扱うことを提案することができます。</p>

<h4>他のProgressive Web App Checklist</h4>

<p>他のProgressive Web App Checklistは以下の通りです。Webをアプリとして扱うことを考える時に、ぜひご配慮下さい。</p>

<ul>
<li>SSLで提供されている
<li>モバイルに表示が最適化されている（レスポンシブデザイン）
<li>10秒以内に最初のページが表示される
<li>Chrome、Edge、Firefox、Safariで動作する
<li>各ページはURLを持っている
</ul>

<h2>おわりに</h2>

<p>GoogleがAMPとPWAというふたつの選択肢を提示しました。これは、既存のモバイルから設計するデザインワーク中心の「モバイルファースト」から、モバイル体験中心をWebを中心として再設計する新たな「モバイルファースト」を生み出す可能性を秘めています。Webの設計、デザイン、技術の大きな見直しの転換点となるのではないでしょうか。
そこで、ぜひともいちはやく「PWAのサポート」を発表したIonic 2を試していただき、この流れとWebのこれからを体験していただければと思います。</p>

<h3>Ionic 2 の日本語コミュニティあります</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>
			</item>
		<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>
	</channel>
</rss>
