20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
TRANSCRIPT
マイクロサービス化とFirebase活用事例
【タウンWiFi × LIFULL】スマホアプリ開発の実例を大公開! 2017.5.10
株式会社LIFULL
寒川 明好
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。2
自己紹介
• 寒川 明好
• 株式会社LIFULL– Android開発グループ
• Engineering Manager
• 2010年入社– 入社後1年半はWebを担当
– その後はアプリ開発メイン
• Android
• iOS
• Windows Phone
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。3
LIFULL HOME’Sとは
最上の住まいに出逢えるよう、最大の不動産・住宅情報と、最良の情報品質、最適な手法によって住まい探しをお手伝いする、不動産・住宅情報の総合サービスです。
• ブラウザ– デスクトップ– スマートフォン
• アプリ– Android
• Phone• Tablet• Wear
– iOS• Phone• Tablet• Watch• TV
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。4
おかげさまでベストアプリ
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。5
アジェンダ
• マイクロサービス化– LIFULL HOME’Sのマイクロサービス構成
– API Gateway と Lambda について
– API側の開発環境
– 運用と監視
• Firebase活用事例– Develop : Realtime Database & Storage
– Grow : Remote Config
– Grow : Dynamic Links
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。6
Orchestration Layer
マイクロサービスとは
• モノリシックとマイクロサービス– モノリシック
• すべての機能が1つのプロセスで稼働
– マイクロサービス• ビジネスロジック機能ごとのサービスで、それぞれ独立したプロセス
で稼働
PC API
SP API
APP API
CommonModules
DB / DAO
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。7
Orchestration Layer
マイクロサービスとは
• モノリシックとマイクロサービス– モノリシック
• すべての機能が1つのプロセスで稼働
– マイクロサービス• ビジネスロジック機能ごとのサービスで、それぞれ独立したプロセス
で稼働
PC API
SP API
APP API
CommonModules
DB / DAO
© 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
© 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
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。10
API Gateway と Lambda の制限
• スロットル制限1,000rps• アカウント当たりのAPI数 60• Timeout 30秒• Payloadサイズ 10MB• Etc…
• ディスク容量 512MB• リクエスト本文のPayloadサイズ 6MB• 関数の同時実行数• Etc…
POINT
運用コストが減る代わりに、様々なデフォルト制限があるサービスの規模に応じてAWS Supportに上限緩和申請をする※項目によっては緩和出来ないため、AWSのドキュメントを参照
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。11
API側の開発環境
• 言語– Node.js
• パッケージマネージャ– Yarn
• API フォーマット– Swagger
• テスト– Mocha
– ESlint
• CI– Circle CI
© 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!
© 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化で社内用ツールとして
使用
© 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の静的検証ツール• コーディング規約を集約
© 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に結果を通知
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。16
API運用・監視
• ツール– AWS CloudWatch
• デフォルトで使用可能なアラームの他、手動で様々なアラームを定義
– 5xxエラー
– Lambdaの関数ごと
– 任意の文字列(ログ内容から抽出)
– Invocation Count
– Count over limit
– Throttles
• 体制– 輪番でアプリエンジニアが監視
• CloudWatchからのアラームで検知
– 問題が発生した場合
• Lambdaでバージョン管理しているので差し戻し
• リポジトリが独立しているため、他APIへの影響はほぼゼロ
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。17
アジェンダ
• マイクロサービス化– LIFULL HOME’Sのマイクロサービス構成
– API Gateway と Lambda について
– API側の開発環境
– 運用と監視
• Firebase活用事例– Develop : Realtime Database & Storage
– Grow : Remote Config
– Grow : Dynamic Links
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。18
Firebaseとは
• Google I/O 2016 で新しいFirebaseが発表
• mobile Backend as a Service(MBaaS)と呼ばれるクラウドサービス
• ネイティブアプリに特化したプラットフォーム
• Analytics, Develop, Grow, Earn によるアプリの最大化
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。19
Develop : Realtime Database & Storage
• 特徴– Realtime Database
• クラウドでホスティングされているデータベース
• 1 つの Realtime Database インスタンスを共有して、最新のデータによる更新を自動的に受信
– Storage
• Google Cloud Storage でサポートされている
特集などシーズンによって変わるものをすべてのユーザに提供できるDevelop が加速する
WebP
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。20
Grow : Remote Config
• 特徴– 機能変更の公開
– ABテストの実施 通勤・通学時間から探す
所要時間から探す
通勤・通学時間から探す
所要時間から探す
様々なパターンをテストし一番CVRが上がるものをセットできるのでアプリを Grow させることができる
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。21
Grow : Dynamic Links
• 特徴– 1つのリンクでiOS, Android, Webで同じ動作できる
– プラットフォームに応じて、適切な場所に移動できる
– アプリをインストール済みかどうかで動作を変える
Webの続き
Webユーザをアプリユーザにすることでアプリを Grow させることができる
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。22
Firebaseを最大限に活用しよう
$
Analytics
Develop
Grow
Earn
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。23
おわり