モバイルUXをつくるWeb制作者のためのIonic Framework

この記事は、[Ionic Advent Calendar 2018](https://qiita.com/advent-calendar/2018/ionicframework)の初日の記事です。Ionic Frameworkが必要とされる背景と、どういうものなのかを改めてご紹介します。

なお、本稿内では、アプリストアから配信されるアプリを「スマホアプリ」、Webブラウザからアクセスするアプリを「Webアプリ」としています。

# なぜ、Ionic Framework
「モバイルファースト」といわれて久しいです。
というよりも、もう流行りを終えた用語感もあり、「もうわざわざ口に出さない」という現場が多いのではないでしょうか。その一方でいまだに「モバイルファーストとは、レスポンシブデザインをモバイルサイズからはじめることだ」という現場もあります。

私的には、UXを高めるための人間中心設計（Human Centered Design）と同様に、「モバイルファースト」とは、モバイルUX（モバイル体験）を高めるためのモバイルを中核とした設計を指すと最近考えるようになりました。
その前提で、モバイルUXを高めるためには何が必要かを2つみていこうと思います。

## 1. Design Guidelineでモバイル文化に寄り添う
モバイルUXを理解する上で欠かせれないのは「デバイス」の存在です。いや、当たり前といえば当たり前なんですが、デバイス上にOS User Interfaceがあり、私たちはその上にあるブラウザの中でUXを提供することになります。

で、そのデバイスとOS User Interfaceに注目してみると、iPhoneとAndroidのどちらもがDesign Guidelineを提供しています。

- [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/) (Apple）
- [Material Design](https://material.io/) (Google)

どちらも有名ですので名前ぐらいは聞かれたことあるのではないでしょうか。
ユーザはデバイスの操作方法（電源の入れ方など）を学んだ上で、次のレイヤーではOSの操作方法を学び、スマホアプリやWebサイトをさわりますので、**このDesign Guidelineに沿ってつくると、ユーザを迷わせませんよ**（Consistency）ということでこれに準拠することを推奨しています。

![スクリーンショット 2018-11-30 20.16.44.png](https://qiita-image-store.s3.amazonaws.com/0/100460/3a1df935-b48a-ba9a-73c5-adde2c399640.png)

Google Play（Androidのアプリを配布するStore）はそこまでではありませんが、AppStore（iPhoneのアプリを配布するStore）では、デザインがHuman Interface Guidelinesに添ってないと配信することはできません。

にしても、いつみても

> Appleのお客様は、シンプルで、洗練され、革新的で、使用が簡単な製品に高い価値を見出します。そして、それはAppleがApp StoreのAppに求めるものと同じです。デザインを優れたものにできるかどうかはデベロッパ次第ですが、App Storeで承認されるためには次のような基準があります。

すごい表記ですよね・・・ｗ

Webデザインはスマートフォンがでる前からあるものですし、「デバイス文化と異なるデザイン文化を育ててきた」「スマホアプリっぽくないWebのほうが多い」というのはその通りですが、一方でこれらのDesign Guidelineに大きく影響を受け、育ってきたことは確かだと思っています。
だって、あれだけWeb上で[iOSのFlat Design採用はとても批難が多かったですが](https://www.google.co.jp/search?q=ios+flatdesign+%E4%BD%BF%E3%81%84%E3%81%AB%E3%81%8F%E3%81%84&oq=ios+flatdesign+%E4%BD%BF%E3%81%84%E3%81%AB%E3%81%8F%E3%81%84&aqs=chrome..69i57.4320j0j9&sourceid=chrome&ie=UTF-8)、気づいたらWebのデザイン文化としてスタンダードのひとつになっていますしね・・・。

また、`Progressive Web Apps` を聞いたことがありますでしょうか。すごく簡単にいうと「Webアプリのスマホアプリ化」のことですが、これにより今までできなかったWebでのPush通知やオフライン表示、Native APIへのアクセスやバックグラウンド処理の実装がはじまっています。

すでににAndroidでもiOSでもその一部は利用できるようになっていて、[スマホアプリと同じように、Webサイト/アプリをホーム画面に追加する](https://developers.google.com/web/fundamentals/app-install-banners/?hl=ja)ようなことができるようになっています。

このようにスマホアプリであるかWebであるかの区別はどんどん小さくなっていってるので、モバイルUXを高めるために、「Design Guidelineでモバイル文化に寄り添う」ことは有効な打ち手です。

## 2. 利用シーンをユーザが選ぶ
機能面で、スマホアプリであるかWebであるかの区別がどんどん小さくなっていき、デザインもともにモバイル文化に寄り添うようになると、次には

「ユーザが使いたいプラットフォームで使えないのか」
「利用シーンをユーザが選べないのか」

が来ると思っています。私もアプリをリリース・運営してるのですが、最初Webだけでだしてたら、「iPhoneアプリでほしいです」という問い合わせがあり、あまりにその問い合わせが多いので対応したら次はAndroid対応を要望されました。
また、WebだとGoogle検索がメジャーですが、アプリだとアプリストア内検索が重要になってくるので、SEOではなく、ASO (アプリストア最適化)という言葉があったりとか。

また一方で、スマホアプリもWebに進出する必要性がでてきています。

<img width="1412" alt="スクリーンショット 2018-11-30 20.34.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/100460/6514cb6f-62af-d69e-7f6c-b781f4cdce69.png">

[The 2017 U.S. Mobile App Report](https://www.comscore.com/Insights/Presentations-and-Whitepapers/2017/The-2017-US-Mobile-App-Report)では、

- モバイルの利用時間は増加傾向
- スマホアプリの新規インストール は2/3は0（1ヶ月）
- かつスマホアプリはTOP5が独占
- スマホアプリに比べて、WEBは倍のトラフィック
- いろいろなWEBに訪問される

という調査結果により、スマホアプリだけではマーケティング上難しくなりつつあることが示唆されています。

「使いたいアプリを使いたいプラットフォームで使える」「探したいプラットフォームで探せる」というのは、モバイルデバイスにおいては重要な要素となってくるのではないでしょうか。

## ここまでのまとめ
- モバイルUXを高めるためのモバイルファースト
- WebもDesign Guidelineに準拠してモバイル文化に寄り添おう
- ユーザが、使いたいアプリを使いたいプラットフォームで使えるようにしよう

# Ionic Frameworkが解決するモバイルUX
Web制作者が上記を解決するためには

- ひとつのWebサイトで、複数のDesignGuidelineに対応しないといけない
- Webだけではなく、iOSアプリ、Androidアプリをつくらないといけない

という課題があります。その課題を解決するためのアプローチとして、モバイルアプリフレームワーク「Ionic Framework」があります。その基本的な機能をみていきます。

![スクリーンショット 2018-11-30 20.35.37.png](https://qiita-image-store.s3.amazonaws.com/0/100460/8873782c-9c2c-73ed-a046-11814e1e9140.png)
https://ionicframework.com/

## Mobile UI Framework
Ionic Frameworkは、Mobile UI Frameworkのひとつです。なので、ドキュメント通りにコードを書いていくと、CSSフレームワークのBootstrapやFoundationと同様にデザインコンポーネントを利用することができます。

そして、そのデザインコンポーネントはデフォルトで、iOSからみるとiOSのデザイン、AndroidからみるとMaterial Designに切り替わるようになっています。

例えば、この2つは同一のHTML/CSSで表示されています
![スクリーンショット 2018-11-30 19.30.02.png](https://qiita-image-store.s3.amazonaws.com/0/100460/d27222ed-8245-32ef-40d4-9c97ec527b43.png)

JavaScriptで判定して、classに`md`もしくは`ios`をつけてるだけですので、デザインコンポーネントをデバイス別につくるのも難しくはありません。まぁ、モバイルデバイス向けのデザインコンポーネントはほとんどそろっておりますが。

https://ionicframework.com/docs/components/#overview

Ionicは世界中でつかわれていますが、採用した人の多くは、デザインがすばらしいから利用してるというぐらいの高品質のデザインコンポーネントが揃っています。

## スマホアプリへの変換とIonic Native
IonicでつくったWebサイトを、Cordovaというモバイルアプリケーション開発フレームワークを使って、iOSアプリ、Androidアプリにすることができます（厳密にはラップしてWebViewで表示する技術です）。

Viewの部分はHTML/CSS/JavaScriptでつくることができていますよね。Cordovaには、スマホアプリとして表示するだけではなく、バイブレーションやPush通知、プラットフォームを利用した課金、指紋認証などのNative APIにアクセスするためのプラグイン「Cordovaプラグイン」があり、それをIonic上で簡単に使いやすくするための「Ionic Native」というAPI群があります。

https://ionicframework.com/docs/native/

これらをうまく使うことで、よりNativeに近づくことができ、モバイルUXを高めることができます。

## 速くはないかもしれない。けど遅くはない。
Ionic Frameworkをはじめとした「HTMLでWebも、iOSアプリも、Androidアプリもつくる」技術を総称して、`HTML5アプリ`や`HTML5ハイブリッドアプリ`というのですが、心無い人に「もっさりしてる」「動作が遅い」と言われることがあります。そこで、まず以下の動画をみてください。

[![スクリーンショット 2018-11-30 20.36.35.png](https://qiita-image-store.s3.amazonaws.com/0/100460/b60ce720-273d-e166-113d-ba86c89f5b76.png)
](https://vimeo.com/55486684)

6年前に「HTML5アプリも、ネイティブ並の速度がでるよ！」というデモ動画で、確かにHTML5アプリは遜色のない速度をだしています。また、実はこの当時、iOSに搭載されていたブラウザは`UIWebView`というエンジンだったのですが、これがクラッシュしやすく、様々なバグを抱えていました。　確かに当時でいえばつらい気持ちもわからなくはないです。

しかしながら、iOSのブラウザエンジンはWKWebViewになってそれらの問題点は改善し、またデバイスの性能自体も飛躍的に伸びています。グラフィカルなゲーム（かつタップ時間がマイクロ秒レベルで求められる）や、CPU負荷がとてつもなく大きなレンダリングをもつような例外は置いとくとして、一般的なSNSやメディア、ツール系アプリなどは問題なく利用することができます。

iOSアプリをSwiftで書く、AndroidアプリをJavaで書くことが確かに最速のパフォーマンスをだせるかもしれませんが、HTML5アプリはそれ以上速くないだけで、遅いことは決してありません。

# あなたはもう高いモバイルUXをユーザに提供できる
「Web制作者だからWebしかつくれない」はもう過去の出来事です。ネイティブと遜色ないパフォーマンス、そしてHTML/CSSで高い表現力によるデザイン、Web/iOSアプリ/Androidアプリのハイブリッド開発による効率的な開発に取り組む素地は、Webをつくってリリースしてる方はすでに身につけていると思っています。

2018年ももう終わりがみえてきているので今年最後に、もしくは2019年の新たな取り組みとして、Ionic Frameworkによるモバイルアプリ開発をはじめてみませんか？？

また、日本にもOSSの互助ユーザ会として「Ionic Japan Users Group」（以下URL）がありますので、ご相談などありましたらぜひご利用ください。それでは、また！

# 関連記事・URL
- [WebはHTML/CSSから学びはじめるべきか｜HTMLも知らない人にIonic本をさせた知見](https://qiita.com/rdlabo/items/8686ffdf9a5e76a68983)
- [Ionicでのアプリ開発の始め方](https://qiita.com/clown0082/items/5405c53eb955f985edda)
- [書籍　Ionicで作る モバイルアプリ制作入門 Web/iPhone/Android対応](https://amzn.to/2RpMO70)
- [Ionicを使う人たちのユーザグループ - Ionic Japan Users Group (slack)](https://ionic2-ja.herokuapp.com/)
- [Ionicを使う人たちのユーザグループ - Ionic Japan Users Group (イベント)](https://ionic-jp.connpass.com/)