20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

23
マイクロサービス化とFirebase活用事例 【タウンWiFi × LIFULL】スマホアプリ開発の実例を大公開! 2017.5.10 株式会社LIFULL 寒川 明好

Upload: lifull-co-ltd

Post on 21-Jan-2018

297 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

マイクロサービス化とFirebase活用事例

【タウンWiFi × LIFULL】スマホアプリ開発の実例を大公開! 2017.5.10

株式会社LIFULL

寒川 明好

Page 2: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。2

自己紹介

• 寒川 明好

• 株式会社LIFULL– Android開発グループ

• Engineering Manager

• 2010年入社– 入社後1年半はWebを担当

– その後はアプリ開発メイン

• Android

• iOS

• Windows Phone

Page 3: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。3

LIFULL HOME’Sとは

最上の住まいに出逢えるよう、最大の不動産・住宅情報と、最良の情報品質、最適な手法によって住まい探しをお手伝いする、不動産・住宅情報の総合サービスです。

• ブラウザ– デスクトップ– スマートフォン

• アプリ– Android

• Phone• Tablet• Wear

– iOS• Phone• Tablet• Watch• TV

Page 4: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。4

おかげさまでベストアプリ

Page 5: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。5

アジェンダ

• マイクロサービス化– LIFULL HOME’Sのマイクロサービス構成

– API Gateway と Lambda について

– API側の開発環境

– 運用と監視

• Firebase活用事例– Develop : Realtime Database & Storage

– Grow : Remote Config

– Grow : Dynamic Links

Page 6: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。6

Orchestration Layer

マイクロサービスとは

• モノリシックとマイクロサービス– モノリシック

• すべての機能が1つのプロセスで稼働

– マイクロサービス• ビジネスロジック機能ごとのサービスで、それぞれ独立したプロセス

で稼働

PC API

SP API

APP API

CommonModules

DB / DAO

Page 7: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。7

Orchestration Layer

マイクロサービスとは

• モノリシックとマイクロサービス– モノリシック

• すべての機能が1つのプロセスで稼働

– マイクロサービス• ビジネスロジック機能ごとのサービスで、それぞれ独立したプロセス

で稼働

PC API

SP API

APP API

CommonModules

DB / DAO

Page 8: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。8

LIFULL HOME’Sのマイクロサービス構成

DAO / DB

• Amazon API Gateway + AWS Lambda で構成

iOS / Android

Route 53 API Gateway Lambda

Cloud Front S3

CloudWatch

Page 9: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。9

API Gateway と Lambda

• API Gateway– 最大で数十万の同時API呼

び出し

– 従量課金

– キャッシュ

– Cloud Watchでロギング

– クライアント側SDKが出力可能

– Lambda関数を指定

– Androidでは出力したクライアントSDKを使っていない

• Lambda– Lambda対応言語

• Node.js

• Java

• C#

• Python

– S3のイベントをフックしてコード実行

– API Gatewayと組み合わせてRESTful通信

– 1関数1git repositoryで独立

POINT POINT

Page 10: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。10

API Gateway と Lambda の制限

• スロットル制限1,000rps• アカウント当たりのAPI数 60• Timeout 30秒• Payloadサイズ 10MB• Etc…

• ディスク容量 512MB• リクエスト本文のPayloadサイズ 6MB• 関数の同時実行数• Etc…

POINT

運用コストが減る代わりに、様々なデフォルト制限があるサービスの規模に応じてAWS Supportに上限緩和申請をする※項目によっては緩和出来ないため、AWSのドキュメントを参照

Page 11: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。11

API側の開発環境

• 言語– Node.js

• パッケージマネージャ– Yarn

• API フォーマット– Swagger

• テスト– Mocha

– ESlint

• CI– Circle CI

Page 12: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。12

Yarn

• 言語– Node.js

• パッケージマネージャ– Yarn

• API フォーマット– Swagger

• テスト– Mocha

– ESlint

• CI– Circle CI

Yarn• Facebookが2016/10にローンチ

• Ultra Fast.• Mega Secure.• Super Reliable.• Offline Mode• Flat Mode

$ npm install $ yarn (install)

Ultra Fast!

Page 13: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。13

API側の開発環境

• 言語– Node.js

• パッケージマネージャ– Yarn

• API フォーマット– Swagger

• テスト– Mocha

– ESlint

• CI– Circle CI

Swagger• THE WORLD’S MOST POPULAR

API FRAMEWORK• Open Source Initiativeが採用• RESTful APIドキュメントの管理• Swagger SpecでI/Oを定義する

(yaml/json)• Client用のSDKとサーバーコード

の生成• Electron化で社内用ツールとして

使用

Page 14: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。14

API側の開発環境

• 言語– Node.js

• パッケージマネージャ– Yarn

• API フォーマット– Swagger

• テスト– Mocha

– ESlint

• CI– Circle CI

Mocha• ユニットテスト• 結合テスト(APIテスト)• npm ライブラリrewireでprivate

functionテスト• coverage計測• CIサーバーでpush毎にnpm run

test

ESlint• JavaScriptの静的検証ツール• コーディング規約を集約

Page 15: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。15

API側の開発環境

• 言語– Node.js

• パッケージマネージャ– Yarn

• API フォーマット– Swagger

• テスト– Mocha

– ESlint

• CI– Circle CI

Circle CI• ビルド毎にコンテナ起動 → 破棄• 1コンテナは無料• Github連携• Slackにテスト結果通知• yarnでも使える• Test前にlintも流す• cache_directoriesの指定

• ビルドからテストまでを高速化

コードをPush

Circle CIでテスト実行GitHubと連携

Slackに結果を通知

Page 16: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。16

API運用・監視

• ツール– AWS CloudWatch

• デフォルトで使用可能なアラームの他、手動で様々なアラームを定義

– 5xxエラー

– Lambdaの関数ごと

– 任意の文字列(ログ内容から抽出)

– Invocation Count

– Count over limit

– Throttles

• 体制– 輪番でアプリエンジニアが監視

• CloudWatchからのアラームで検知

– 問題が発生した場合

• Lambdaでバージョン管理しているので差し戻し

• リポジトリが独立しているため、他APIへの影響はほぼゼロ

Page 17: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。17

アジェンダ

• マイクロサービス化– LIFULL HOME’Sのマイクロサービス構成

– API Gateway と Lambda について

– API側の開発環境

– 運用と監視

• Firebase活用事例– Develop : Realtime Database & Storage

– Grow : Remote Config

– Grow : Dynamic Links

Page 18: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。18

Firebaseとは

• Google I/O 2016 で新しいFirebaseが発表

• mobile Backend as a Service(MBaaS)と呼ばれるクラウドサービス

• ネイティブアプリに特化したプラットフォーム

• Analytics, Develop, Grow, Earn によるアプリの最大化

Page 19: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。19

Develop : Realtime Database & Storage

• 特徴– Realtime Database

• クラウドでホスティングされているデータベース

• 1 つの Realtime Database インスタンスを共有して、最新のデータによる更新を自動的に受信

– Storage

• Google Cloud Storage でサポートされている

特集などシーズンによって変わるものをすべてのユーザに提供できるDevelop が加速する

WebP

Page 20: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。20

Grow : Remote Config

• 特徴– 機能変更の公開

– ABテストの実施 通勤・通学時間から探す

所要時間から探す

通勤・通学時間から探す

所要時間から探す

様々なパターンをテストし一番CVRが上がるものをセットできるのでアプリを Grow させることができる

Page 21: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。21

Grow : Dynamic Links

• 特徴– 1つのリンクでiOS, Android, Webで同じ動作できる

– プラットフォームに応じて、適切な場所に移動できる

– アプリをインストール済みかどうかで動作を変える

Webの続き

Webユーザをアプリユーザにすることでアプリを Grow させることができる

Page 22: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。22

Firebaseを最大限に活用しよう

Analytics

Develop

Grow

Earn

Page 23: 20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)

© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。23

おわり