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