【eLV勉強会】AngularJSでのモバイルフロントエンド開発

34
AngularJS でで ででででででででででででで 2014/9/30 ででででIT でででででででで ~ Engineer’s Learning Vesper http :// learningvesper.doorkeeper.jp ででででででででで )。 でででででででででででででででで

description

本資料は「ITエンジニア勉強会~ Engineer’s Learning Vesper」での発表資料です。 http://learningvesper.doorkeeper.jp/events

Transcript of 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

Page 1: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

2014/9/30

本資料は『 IT エンジニア勉強会 ~ Engineer’s Learning Vesper 』( http://learningvesper.doorkeeper.jp)での発表資料です。

発表後に構成をすこし修正しました。

Page 2: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発自己紹介

@h_ku_su

hiroyuki.kusu

hkusu

hkusu

Page 3: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発AngularJS について

AngularJS とは

•Google 製の JavaScript フレームワーク

•MV* - MVC ( Model 、 View 、 Controller ) - MVVM ( Model 、 View 、 ViewModel ) - .. とにかく好きに使え?ということらしい

• フルスタック - 機能は豊富だが、いわゆる「 AngularJS way 」 - 単純に HTML のエレメント操作なら Knockout.js や Vue.js の方がシンプルで扱いやすいと思う

Page 4: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発AngularJS について

モバイルで AngularJS を使うメリット

• 純粋にフレームワークとしてのメリット - コード量の削減、多人数での開発 - 機能が豊富 - コード量的に中規模までは耐えうる - 大規模になると性能の問題がでてくる(後述)

• 他の CSS フレームワークと組み合わせてアプリっぽく - Onsen UI 、 ionic 、 Famo.us 、 etc.. - これらは AngularJS ベースの開発を想定

Page 5: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発AngularJS について

モバイルで AngularJS を使うメリット

• なにより Web の技術 でアプリケーションが作れる - JavaScript/CSS/HTML - よって 1 ソースで iOS/Android 両対応 - Cordova/PhoneGap を使えばネィティブアプリ化 やスマホ OS の機能を利用することも可能 - ただし現時点では、ネィティブアプリほどの UX ( ユーザーエクスペリエンス ) は実現できない

•SPA (シングル•ページ•アプリケーション) - ページ全体でなく変更分だけ更新 - モバイルなので通信量は抑える必要があるため - 普通の JavaScript でもできるが、やりやすい

Page 6: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発AngularJS について

SPA( シングル•ページ•アプリケーション )

index.html

ダウンロードされたロジックファイルが端末側で動作。

従来のようにユーザアクション毎にHTML 丸ごと取得はしない

サーバ

ユーザアクション

HTML やJSON( 差分のみ )

変更分のみ取得

Page 7: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発AngularJS について

もっと大きな話(マイクロサービス?)

ネィティブアプリ、

ブラウザ

クライアント

サーバ

マルチデバイス化

API

機能は SaaS などでAPI で提供される

こういう時代に、 AngularJS は向いている、かもしれない。

Page 8: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

利用するモバイル向け CSS フレームワークについて

現時点で完成度が高いのは、この2つ。

◆Onsen UI

◆ionic

2 つとも SPA 構成にも対応している。ロジックも AngularJSで書ける。

あまり見た目を気にしないなら、 Twitter Bootstrap などでも。

AngularJS について

Page 9: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発モバイル利用でのポイント

モバイルで利用するなら通信頻度 / 量に注意する

① ファイルの数と容量を減らす

② ブラウザに読み込んだものは使い回す

③ 遅延ロード ( 必要になったらロード )

④ 体感

⑤ ネットワーク

考え方としては、大きく下記の5つ

Page 10: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

通信頻度 / 量のチューニング〜①ファイルの数と容量を減らす〜

•JavaScript/CSS ファイル群のファイル圧縮 (minify) 、ファイ ル結合 (concat) - Grunt もしくは gulp 等のタスクランナーで - 場合によっては HTML ファイルも。ただ AngularJS では そこまでやらなくてよいかも ( angular-ui-router 等で遅延ロードされるため)

• 画像ファイルの最適化 ( 縦横サイズ、容量 ) - もしくは CSS スプライトや SVG を利用

• ファイル郡の gzip 圧縮 - WEB サーバが Apache であれば mod_deflate 等

モバイル利用でのポイント

Page 11: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

通信頻度 / 量のチューニング〜②ブラウザに読み込んだものは使い回す〜•JavaScript/CSS/HTML/ 画像 / 連携 API のブラウザキャッシュ - HTTP レスポンスヘッダの最適化 ( サーバ側 ) - Cache-Control ヘッダ、 Expires ヘッダ - ブラウザからの条件つきリクエストへの対応 ( サーバ側 ) - If-Modified-Since ヘッダ、 If-None-Match ヘッダ

• メモリ - 何度も API を叩かないでいいように、きちんとモデル設計 をして JavaScript オブジェクトに - 永続的なものは WEB ストレージへ

•HTML5 の Application Cache はちょっと使い勝手が悪い - オフラインでの動作目的でないなら、見送った方がよい

モバイル利用でのポイント

Page 12: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

•AngularJS に限った話であれば、 HTML は angular-ui-router 、 外部の連携 API は $http サービスでメモリへキャッシュ できる

モバイル利用でのポイント

Page 13: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

通信頻度 / 量のチューニング〜③遅延ロード ( 必要になったらロード ) 〜•JavaScript ファイル群の遅延ロード - RequireJS を使う(ただし複雑度はあがる)

•HTML ファイル群の遅延ロード - angular-ui-router 等のテンプレート機構を使う

• 画像の遅延ロード - ブラウザの表示領域にはいったら読み込む

• ページ内のリストの遅延ロード - 例えば商品一覧ページで 100 件を表示する場合、 ブラウザで見える 5 件だけ表示する、など - スクロールしたら次の 5 件を読み込み

モバイル利用でのポイント

Page 14: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

• ちなみに CSS ファイル群の遅延ロードは恐らく推奨されない - CSS 設計の複雑度があがる - 遅延ロードするぐらいなら、ファイルの圧縮、結合を した方がよいと思われる

•JavaScript 郡、 HTML ファイル群の遅延ロードは、ファイル 結合の恩恵を受けれないということでもあるので、どちら が良いかは比較検討する

モバイル利用でのポイント

Page 15: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

通信頻度 / 量のチューニング〜④体感〜

• レスポンスを待ってる感 が無いユーザインタフェース

• 先読みや、非同期での取得 (ただ複雑にはなる。)

モバイル利用でのポイント

Page 16: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

通信頻度 / 量のチューニング〜⑤ネットワーク〜

•JavaScript/CSS/HTML/ 画像ファイル群、および連携する API を「端末から近い」「応答が早い」場所から配信する。 - 国内だけなら、それほど気にしなくて良いかも。

•具体的には、 CDN ( Contents Delivery Network )を利用 する。 - AWS でいえば CroudFront - 静的リソースが中心になるので、 CDN に載せやすい

• 可能であれば接続コネクションの keepalive

モバイル利用でのポイント

Page 17: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

そのほかチューニング項目

• 動作速度

•描写速度

• メモリ利用量

これらを Chrome の ディベロッパーツールや他の計測サービスを用いてチューニングしていく。

モバイル利用でのポイント

Page 18: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

セキュリティについて

• ソースはブラウザ側なので、全て解読される前提で考える - 中間者による改竄を防ぐなら全て SSL ページで - 重要な処理は、やはりサーバ側に API を用意する必要ある

• フロントエンドで考えるべきは大きく3つ - DOM Based XSS ( Cross Site Scripting ) - CSRF ( Cross Site Request Forgeries ) - CSP ( Content Security Policy ) • ただフロントエンドについて、 AngularJS は、だいたいデフォルトで機能を備えているような感じはある。

モバイル利用でのポイント

Page 19: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

SEO について

• クローラが JavaScript を解釈しないため - ただ解釈するようになった、という説もある

• 必要あらば PhantomJS 等で サーバ側でコンテンツを 書き出す

•SNS(Facebook など ) でシェアされた際の OGP も、必要あらば 動的に生成する

モバイル利用でのポイント

Page 20: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

ほか

• 必要あらば、メンテナンスモードやバージョンアップ機能 (運営側でアプリケーションを更新したい場合にブラウザ を強制リロードさせる)を設ける - 単純にメモリ上の JavaScriptオブジェクトだけでなく、 ブラウザへのファイルキャッシュやブラウザのストレージ も対象

• ブラウザバックやボタン 2 度押し、ボタン連打への対応

•非対応ブラウザでの挙動を明確に(下位は切るのが楽)

• 実機テストをしっかりと

モバイル利用でのポイント

Page 21: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発感想

AngularJS を使ってみて• きちんと MV* 構成を設計すれば、テスト ( コード ) が楽 ( ちなみにテストコードは必須と考えた方がよい )

• モデル / サービスをきちんと設計しないと、色んなところ で同じようなものを作る羽目になる

• モバイルで大規模なものには今のところ向かないと思う (前述のファイル容量や性能の問題 )

•CSS フレームワークはなるべくカスタマイズしない方が良い - フレームワークの枠を越えると、とたんに複雑になる

•Android は作り方や端末によってはもっさりするかも - 特にネィティブアプリの WebView 経由は注意(重い)

Page 22: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発始めてみる

開発環境の構築

• 手元の環境は Mac OS ( Mavericks )が前提です。 Windows でも出来るかもしれないが、敷居があると思う。

•Yeoman を利用します。

• 今回は CSS フレームワークは Twitter Bootstrap を利用、構成は 一番 単純な例 で説明します。

ちなみに他の CSS フレームワークを導入する手順は、こちらに書きました。

■onsen ui ( AngularJS ベース)のアプリケーション開発環境を構築 http://qiita.com/hkusu/items/664d025eec9f316d7270 ■ionic ( AngularJS ベース)のアプリケーション開発環境を構築 http://qiita.com/hkusu/items/a9d5908ede11110acb88 ■Yeoman で AngularJS & UI Bootstrap の開発環境構築 http://qiita.com/hkusu/items/7d748b55ba73cc8a3675

Page 23: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)”

① HomeBrew のインストール(はいってなければ)

※ 執筆時とコマンド内容が変わってるかもしれないので、公式ページ ( http://brew.sh/index_ja.html)も確認ください。※ 事前に Xcode のインストール(および起動して許諾への同意)が必要。

$ brew install node

② Node.js のインストール(はいってなければ)

始めてみる

Page 24: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

④ ディレクトリを作ってジェネレータを起動

$ mkdir hoge$ cd hoge$ yo angular --minsafe

③ Yeoman と AngularJS の雛型ジェネレータをインストール

$ npm install -g yo grunt-cli bower$ npm install -g generator-angular

始めてみる

Page 25: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

⑤ 適当に質問に答える

始めてみる

Page 26: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

⑥ 雛型のファイル郡が展開される

始めてみる

Page 27: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発

⑦ 動作確認(ローカルサーバ起動)

$ grunt serve

始めてみる

Page 28: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発ほか

alt( 代替 )系の言語の利用

記述量が減るのでおすすめ。

◆JavaScript → CoffeeScript◆CSS → SASS◆HTML → Haml

gem コマンドでインストールできます。

ただし SASS と Haml については、デザイナーさんと要相談。

$ gem install coffee-script$ gem install sass$ gem install haml

Page 29: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発ほか

IDE

WebStorm が使いやすい。 Git との連携もできる

ただし有償( $48 〜)。一ヶ月間のお試し期間あり。その他の候補としては Sublime Text など。

Page 30: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発ほか

AngularJS の書籍

Amazon で買えます。日本語!

Page 31: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発ほか

AngularJS(JavaScript) の学習方法•(知らなければ ) まず JavaScript について知る ⇒ JavaScript 第 6版( http://www.amazon.co.jp/dp/4873115736/)

•JavaScript の周辺環境について知る。これ ⇒

•AngularJS のソースと公式リファレンスを読む ⇒ https://github.com/angular/angular.js

⇒ http://docs.angularjs.org/api

•Qiita の投稿をみる(タグは AngularJS ) ⇒ http://qiita.com/tags/angularjs

• ともあれ、とにかく書く!作る!

Page 32: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発ほか

◆個人で AngularJS と Onsen UI で作ったもの

http://hkusu.github.io/gp-kao-catalog/

HTML5 の某イベントに向けて作成しました。 作品の詳細 ⇒ https://5jcup.org/works/53b0e2ca43df3d6b87005186

(ソースは GitHub にも置いてあります。)

◆こちらは 4月の Android のイベントで、 AngularJS に ついてライトニングトークした時の資料です。

http://www.slideshare.net/hiroyukikusu/abc2014-spring-ltangularjsweb

Page 33: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発ほか

モバイル対応が強化される?

Page 34: 【eLV勉強会】AngularJSでのモバイルフロントエンド開発

AngularJS でのモバイルフロントエンド開発ゆめみについて

https://itunes.apple.com/jp/app/id432831907

エンジニア ( フロントエンド / サーバ )募集!デザイナー /WEB制作者 募集!

世界中で使われる O2O サービスの実現

ネイルブック