~新しい着回しと出会おう~ 『xz(クローゼット)』 を支える技術...

74
2014.12.02 2Apache Cordova勉強会@IIJ 株式会社スタジオ・アルカナ 吉田 紳一郎 〜新しい着回しと出会おう〜 を支える技術 Cordova編-

Upload: shinichiro-yoshida

Post on 16-Jul-2015

2.953 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

2014.12.02 第2回Apache Cordova勉強会@IIJ

株式会社スタジオ・アルカナ 吉田 紳一郎

〜新しい着回しと出会おう〜

を支える技術 -Cordova編-

Page 2: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

わたしどこのどなた?

株式会社スタジオ・アルカナ

普段はエンジニア/マネージャ業務やってます

吉田 紳一郎

プログラミング、システム設計、インフラ構築、 プロジェクトマネージャ、雑用など、

デザイン以外は基本的になんでもやります。

Page 3: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

どんな会社?

株式会社スタジオ・アルカナ

17名程度のWeb制作会社

デザイン/システム/インフラ ワンストップで対応しています

今年で10期目を迎えますが ソリューション事業から 自社サービス事業へと 転換しようとしています

(ついでにサービス2つ紹介しちゃう)

Page 4: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

https://svgn.biz/

Page 5: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

http://repre.me/

Page 6: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

本題

Page 7: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

というサービスの開発事例を紹介します

Apache Cordova を利用して開発した

Page 8: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

『XZ』ってなあに? (サービスについて)

どうやって進めたの? (プロジェクトについて)

3 どんな技術を使ってるの? (Cordovaについて)

Page 9: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

『XZ』ってなあに? (サービスについて)

どうやって進めたの? (プロジェクトについて)

3 どんな技術を使ってるの? (Cordovaについて)

Page 10: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

Type ファッションコミュニティサービス

Owner STANDING OVATION

Launch 2014. 9. 8

Page 11: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

どんな企業?

Page 12: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

ビジョン

「テクノロジーで、新しい感性を。」

ファッションの新たな体験を想像し、

オシャレを楽しむすべての人を応援する。

ファッション体験を、従来の商品主体から

ユーザー主体にシフトする

STANDING OVATION http://s-ovation.jp/

Page 13: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

経営チーム 代表取締役 CEO 荻田芳宏

◆博報堂(1999〜2006)

プロモーション企画やイベントプロデュースを経て、タレントやモデル、

アーティスト、音楽のキャスティングを担当。

◆フューチャースコープ取締役COO(2007〜2013)

「魔法のiらんど」役員陣とネットベンチャー立ち上げに参画。モバイルコンテンツ

のプロデューサー、ブランド戦略部長を経てグループ最年少で取締役COO就任。

スマホアプリ事業(累計200万DL)やソーシャルゲーム事業等を立ち上げ、

120名・月商数億円規模に育て上げる。

取締役 CTO 井上大輔

◆メディアシークなどでエンジニアとしてキャリアを積み、起業。

◆スターダストコミュニケーションズ 代表取締役社長CEO(2006〜2013)

女性向けネットフリマという新しいカテゴリー・ジャンルを切り拓き、

『ショッピーズ』を100万人女性ユーザー(月商数億)の国内最大級

ネットフリマサービスに育て上げる。

Page 14: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

どんなサービス?

Page 15: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

http://xz-closet.jp/

Page 16: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

http://xz-closet.jp/

Page 17: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

http://xz-closet.jp/

Page 18: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

http://xz-closet.jp/

Page 19: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

http://xz-closet.jp/

Page 20: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

課題解決

「XZ」は、世界初の着回し解決コミュニティ

手持ちのアイテムの意外な・新しい着回し発見から

着回しバリエーションが増えて、普遍的な悩みを解決する

http://xz-closet.jp/

Page 22: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

『XZ』ってなあに? (サービスについて)

どうやって進めたの? (プロジェクトについて)

3 どんな技術を使ってるの? (Cordovaについて)

Page 23: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

『XZ』ってなあに? (サービスについて)

どうやって進めたの? (プロジェクトについて)

3 どんな技術を使ってるの? (Cordovaについて)

Page 24: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

今回お話しするスコープ

インフラ構築

アプリ開発(iOS/Android)

サーバサイドAPI開発

テスト

Web版開発

要件定義

機能設計

画面構成設計

デザインカンプ

外部設計が完了した 後の工程のお話です

Page 25: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

開発チーム体制

CTO

PM

SE

PG

SE

PG HTML

HTML

CEO

Test

Test

STANDING OVATION

スタジオ・アルカナ

技術サポート

Page 26: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

開発スケジュール

7月 8月 9月

★開発着手 ★α公開 ★一般公開(iOS)

★一般公開(Android)

Web版公開 ★

HTML

API設計

アプリ設計

アプリ実装

インフラ構築

★β公開

アプリ実装

API実装

Web版実装

API実装

アプリ実装

API実装

Page 27: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

7月 8月 9月

インフラ構築タスク

生々しいWBS見せちゃう

HTML実装タスク

アプリ開発タスク

サーバサイド開発タスク

テスト関連タスク

1人

2人

2人

2人

2人

Page 28: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

なぜCordovaを採用?(1)

サービスとして必要なものは「アプリ」の開発

当初はネイティブ(Objective-C/Java)を想定していた

アプリ開発に加えてWeb版の開発も予定していた

サービス要件

iOS & Web版の開発:〜9月

Android版の開発:〜11月

スケジュールの目標

スケジュール 最優先!

Page 29: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

なぜCordovaを採用?(2)

ハイブリッドなのでiOS/Androidを並行で開発できる

Web版を開発する際に再利用できる

Cordova開発にしたらどうなる?

iOS & Android版の開発:〜9月

Web版の開発:〜10月

スケジュールの見込み

スケジュール 短縮できる!

Page 30: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

なぜCordovaを採用?(3)

メンバーが普段Web系の開発をメインにしている

エンジニアやデザイナーのWeb系スキルを生かせる

開発メンバーのスキルセットとの一致

ネイティブ開発に比べ、学習コストを抑えつつ、 かつ、スピーディにアプリ開発ができそう

ローカルのWebブラウザで開発ができるので、 環境構築やビルド作業があまり手間取らない

Page 31: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

Cordovaのデメリット

広告系のモジュール等はCordova対応していないので 自分でプラグインを開発する手間がかかる

サードパーティ製のSDKを組み込みにくい

レンダリングする際のチューニングに工数がかかる ※シンプルなUIを設計することで回避はできる

アニメーションや演出がリッチだと動作が重くなりがち

アシアルの久保田さんの本とか だいぶ参考になります

Page 32: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

『XZ』ってなあに? (サービスについて)

どうやって進めたの? (プロジェクトについて)

3 どんな技術を使ってるの? (Cordovaについて)

Page 33: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

『XZ』ってなあに? (サービスについて)

どうやって進めたの? (プロジェクトについて)

3 どんな技術を使ってるの? (Cordovaについて)

Page 34: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

を支える技術

Page 35: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

インフラ

バックエンド(サーバーサイドAPI)

フロントエンド(アプリ開発)

Page 36: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

Amazon EC2 Amazon Route 53

Elastic Load Balancing

Amazon S3 AWS OpsWorks Chef

Amazon SNS (Push通知)

AWS cloud

インフラ

バックエンド(サーバーサイドAPI)

フロントエンド(アプリ開発)

Page 37: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

Amazon EC2 Amazon Route 53

Elastic Load Balancing

AWS OpsWorks Chef

AWS cloud

インフラ

バックエンド(サーバーサイドAPI)

nginx Apache HTTP Server

PHP MySQL Zend Framework

ngx_small_light

フロントエンド(アプリ開発)

Amazon S3 Amazon SNS (Push通知)

Page 38: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

Amazon EC2 Amazon Route 53

Elastic Load Balancing

AWS OpsWorks Chef

AWS cloud

インフラ

バックエンド(サーバーサイドAPI)

nginx Apache HTTP Server

PHP MySQL Zend Framework

ngx_small_light

フロントエンド(アプリ開発)

Apache Cordova Ionic Framework AngularJS Grunt Crosswalk

Amazon S3 Amazon SNS (Push通知)

Page 39: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

フロントエンド(アプリ開発)

Apache Cordova Ionic Framework AngularJS Grunt Crosswalk

Amazon EC2 Amazon Route 53

Elastic Load Balancing

AWS OpsWorks AWS cloud

インフラ

バックエンド(サーバーサイドAPI)

nginx Apache HTTP Server

PHP MySQL Zend Framework

ngx_small_light

Amazon S3 Amazon SNS (Push通知)

ここもうちょっと

掘り下げてみます

Page 40: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

を支える技術 -Cordova編-

Page 41: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

HTML, CSS, JavaScriptでアプリ開発ができるプラットフォーム

iOS, Android, WindowsPhone, Windows, Mac OS X など様々

『XZ』では iOS, Android の2つをターゲットにしています

Page 42: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

HTML5ベースのモバイルアプリケーション開発フレームワーク

HTML, CSS, JavaScriptでもネイティブのようなサクサク感

AngularJSの利用が前提となっているフレームワーク

ボタンなどフロントエンド様々なUIパーツが用意されている

gulp.js

Page 43: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
Page 44: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
Page 45: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
Page 46: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
Page 47: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
Page 48: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

ほかにもいろいろあります

http://ionicframework.com/docs/components/

http://ionicframework.com/docs/api/

Page 49: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

『XZ』では、Ionic Framework の UI をベースにして HTMLのCSS設計を行い、デザインを適用しています。

&

Page 50: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

アプリっぽく魅せる

Page 52: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

Cordovaが重いとき…

Page 53: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

Cordovaが重いとき…

Cordovaで開発すると動作が重い場合がでてくる。

例えば…

巨大なリストのスクロール…

デザイン凝った画面のスクロール……

そして、Android………

Page 54: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

例えば、

1000個のリストを

ng-repeat で描画すると

重い…

巨大なリストのスクロール 1

Page 55: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

そんなときは

collection-repeat

を使って回避できます。 (Ionicのディレクティブ)

巨大なリストのスクロール 1

Page 56: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

collection-repeat

1 巨大なリストのスクロール

Page 57: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

デザイン凝った画面のスクロール 2

Page 58: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

デザイン凝った画面のスクロール

ブラウザのスクロールではなく、独自にスクロールの 機構を持っている。

Ionic Framework のスクロール

積極的に GPU が利用されるように、 translate3d の CSS が適用された領域を位置調整してスクロールする。

DOM 構造が複雑だと、GPU 処理が逆効果になる場合も。

Page 59: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

デザイン凝った画面のスクロール

Ionic で overflow-scroll=true という指定をすると 通常のブラウザのスクロールに切り替わる

ブラウザのスクロールにする

場合によっては、通常のスクロールの方がサクサク動く

画面の表示領域から見えなくなった要素はDOMから消す

Page 60: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

Android… 3

Page 61: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

Android の標準 WebView はレンダリング性能が悪い

Android の標準 WebView

Android… 3

iOS の Safari に比べて動作の重さが顕著

とにかく、マジでひどい。

Page 62: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

Crosswalk は Intel が推進しているプロジェクト

Android! 3

Chromium ベースの WebView エンジンが使える

Cordova のアプリにブラウザのレンダリングエンジンを まるごと入れちゃう感じ

Chrome と同じくらい快適にサクサク動く

動作条件は Android 4.0以降

Page 64: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

Android 4.0 以降で良ければ、絶対に採用すべき

Android! 3

PC と繋いで Chrome の Web インスペクタも使えます

https://crosswalk-project.org/

ブラウザのレンダリングエンジン一式を同梱するので アプリのサイズが20MBくらい増えますがキニシナイ。

Page 65: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

まとめ

Page 66: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

・Web系のスキルセットを生かしてアプリ開発に参入が できるのは、かなりメリットを感じる

まとめ

・Android も Crosswalk などが登場してきたので、 動作が重いといった問題点は解消されつつある

・iOS と Android を同時に開発できるのはステキ

・動作がカクカクする時のチューニングは結構大変かも

・サードパーティ製のSDK導入はわりと手間がかかる

Page 67: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

使ってるプラグイン (参考程度に)

Page 68: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

使用プラグイン紹介(1)

com.danielcwilson.plugins.googleanalytics

・Google Analytics

com.phonegap.plugins.PushPlugin

・Push通知

com.plugin.datepicker

・日付入力UI

nl.x-services.plugins.launchmyapp

・カスタムURIスキーマ

nl.x-services.plugins.socialsharing

・ソーシャルシェア(Twitter, Facebook, LINE, Instagram)

※LINEとInstagramはデフォルト対応していないので独自実装

Page 69: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

使用プラグイン紹介(2)

org.apache.cordova.camera

・カメラ

org.apache.cordova.device

・デバイス情報の取得

org.apache.cordova.inappbrowser

・アプリ内ブラウザ

org.apache.cordova.statusbar

・ステータスバー

Page 70: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

最近のホットな話題

Page 71: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

TechCrunch Tokyo 2014 スタートアップバトルに登壇

113社の応募の中から事前審査を 勝ち抜いた12社のうちの1つ

Page 72: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
Page 73: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

Google+ との公式コラボ

Page 74: ~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-

ご清聴ありがとうございました!