SlideShare a Scribd company logo
アプリAPIの
マイクロサービス化
Amazon API Gateway + AWS Lambda
株式会社LIFULL 衛藤剛史
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。2
自己紹介
• 衛藤 剛史(ETO TAKESHI)
• 大分県大分市出身
• ~2014 SIerで開発経験
• 株式会社ネクスト(現 株式会社LIFULL)中途入社
• Androidアプリ・API(バックエンド)開発を担当
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。3
本日お話すること
• アプリAPIマイクロサービス化概要
• Amazon API Gateway / AWS Lambda
• 実装環境詳細
• Testing
• Deploy(APIリリース)
• 運用・監視
• まとめ
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。4
アプリAPI
マイクロサービス化概要
より柔軟に・より高速に
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。5
マイクロサービスとは
「個別に開発された小さなサービスを組み合わせ
て、一つのサービスを提供する」
Service
Salesforce Customer Success Blog
https://www.salesforce.com/jp/blog/2016/03/microservices.html
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。6
LIFULLとしてのマイクロサービス
「サービスごとに独立した環境を構築し、必要に
応じて連携してプロダクトを作る」
LIFULL HOME’S API
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。7
マイクロサービス化の目的
• ネイティブアプリ専用のAPI
• 高速な開発・リリース
• 古いシステムからの脱却
• 新しい技術への挑戦
• 利用状況の可視化
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。8
以前までの構成
common
modules
PC
API
Smart
phone
API
Apps
API
Orchestration Layer
DB / DAO
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。9
マイクロサービス化
Apps
API
common
modules
Orchestration Layer
DB / DAO
PC
API
Smart
phone
API
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。10
マイクロサービス構成
DB / DAO
Lambda
S3 Cloud Front
API Gateway
App
AWS cloud
Route53
Cognito
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。11
Amazon API Gateway
AWS Lambda
サーバレスアーキテクチャにより運用いらず
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。12
Amazon API Gateway
アプリケーションの玄関
Touch
• 最大で数十万の同時API呼び出し
• 従量課金
• キャッシュ
• Cloud Watchでロギング
• クライアント側SDKが出力可能
• Lambda関数を指定
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。13
AWS Lambda
サーバー構築しなくてもコードを実行
• Lambda対応言語
• Node.js
• Java
• C#
• Python
• S3のイベントをフックしてコード実行
• API Gatewayと組み合わせてRESTful通信
Touch
POINT
1関数1git repositoryで独立
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。14
API GatewayとLambdaの制限
• スロットル制限1,000rps
• アカウント当たりのAPI数 60
• Timeout 30秒
• Payloadサイズ 10MB
• Etc…
• ディスク容量 512MB
• リクエスト本文のPayloadサイズ 6MB
• 関数の同時実行数
• Etc…
POINT
運用コストが減る代わりに、様々なデフォルト制限がある
サービスの規模に応じてAWS Supportに上限緩和申請をする
※項目によっては緩和出来ないため、AWSのドキュメントを参照
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。15
実装環境詳細
APIドキュメントの記載・使用しているツール・実装などについて
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。16
Node.js
サーバーサイドJavaScript環境
• 非同期型のイベント駆動
• 各接続ごとにコールバックが発火
• スレッドベースのモデルと対象的
• Non-blocking I/O
• パッケージ管理はnpm(今回は使っていない※後述)
function handler(event, context, callback) {
// event => API Gatewayのパラメータ
// context => Lambdaの状態
// callback => コールバック関数
}
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。17
SWAGGER
API I/Oドキュメントを作成・管理
http://swagger.io/
• THE WORLD’S MOST POPULAR API FRAMEWORK
• Open Source Initiativeが採用
• RESTful APIドキュメントの管理
• Swagger SpecでI/Oを定義する(yaml/json)
• Client用のSDKとサーバーコードの生成
• Electron化で社内用ツールとして使用
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。18
SWAGGER
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。19
SWAGGER
POINT
• 記述方式が統一されている
• Editorが使いやすい
• 一人三役
1. APIリファレンス
2. パラメータのValidation
3. API Gatewayデプロイ時の設定
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。20
Yarn
npmに変わるパッケージマネージャ
• Facebookが2016/10にローンチ
• Ultra Fast.
• Mega Secure.
• Super Reliable.
• Offline Mode
• Flat Mode
• yarn.lockファイルでversion統一
• Qiita書きました
$ npm install $ yarn (install)
Ultra Fast!
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。21
API実装方針
アプリ専用のAPIとして、自由自在にカスタマイズ
• 1画面1~2APIコール
• 解析に必要な情報は必須で送付
• OS / OS Version / App Version / Device Type
• API Versioning
• 画面に沿ったレスポンス構造
• 必要最低限なレスポンス
Apart001 {
"title": "Apart001",
"overview": {
"title": "概要",
"label": "価格",
"value": "3,000万円"
},
"image": {
"label": "外観"
"url": "https://xxx"
}
}
概要
■ 価格
3,000万円
外観
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。22
Testing
ユニットテスト、結合テスト、Lint
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。23
Mocha
テスティングフレームワーク
• ユニットテスト
• 結合テスト(APIテスト)
• npm ライブラリrewireでprivate functionテスト
• coverage計測
• CIサーバーでpush毎にnpm run test
$ npm test
Hoge
#moge()
✔ should poge poge
1 passing (5ms)
=========== Coverage summary ===========
Statements : 100% ( 37/37 )
Branches : 100% ( 14/14 )
Functions : 100% ( 6/6 )
Lines : 100% ( 37/37 )
========================================
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。24
ESlint
JavaScriptの静的検証ツール
コーディング規約をすべて集約
• インデント幅
• スペーシング
• var禁止(ES6)
• スペルチェック
• Etc…
{
"extends": "eslint:recommended”,
"rules": {
"indent": [2, 2, {"SwitchCase": 1, "VariableDeclarator": 2}],
"quotes": [2, "single"],
"space-before-blocks": [2, "always"],
"comma-spacing": [1, {"before": false, "after": true}],
"complexity": [2, 20],
"no-var": 2,
// etc
"spellcheck/spell-checker": [1,
{…}
]
}
}
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。25
CircleCI
継続的インテグレーション(CI)サービス
• ビルド毎にコンテナ起動 → 破棄
• 1コンテナは無料
• Github連携
• Slackにテスト結果通知
• yarnでも使える
• Test前にlintも流す
コードをpush
CircleCIでテスト
Github連携
Slackに結果通知
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。26
CircleCIをyarnに対応させる
ビルドからテストまでを高速化
machine:
node:
version: 4.2.2
post:
- curl -o- -L
https://yarnpkg.com/install.sh | bash
dependencies:
cache_directories:
- "~/.cache/yarn"
pre:
- yarn --version
override:
- yarn install
test:
post:
- yarn run lint
deployment:
master:
…
cache_directoriesの指定
POINT
circle.yml
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。27
Deploy(APIリリース)
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。28
Gulp
Node.jsベースのビルド自動化用ツールキット
リリーススクリプトタスクの実行順序
1.Clean
2.lint実行
• Fail時はabort
3.UT実行
• Fail時はabort
4.zipに固める
5.AWS Lambdaへアップロード
6.Amazon API Gatewayにデプロイ
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。29
リリース
毎日リリース
• Web側のスケジュールを気にすることなくリリース
• Web側への影響はほぼゼロレベル
• Lambdaは切り戻しがすぐに行える
• エンジニア全員がリリース作業を行える
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。30
運用・監視
輪番体制で毎日監視
修正が必要であれば即修正・即リリース
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。31
AWS CloudWatch
AWSクラウドリソースとAWSで実行するアプリケー
ションのモニタリングサービス
デフォルトで使用可能なアラームの他、手動で様々なアラームを定義
• 5xxエラー
• Lambdaの関数ごと
• 任意の文字列(ログ内容から抽出)
• Invocation Count
• Count over limit
• Throttles
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。32
運用と監視
輪番体制でアプリエンジニアが監視
• アラームメールで検知
• Chatworkで報告
• Chatworkへの投稿自動化も可能なので試してみたい
修正が必要ならすぐに対応してリリース
• アプリをリリースを最小限に
• リポジトリが独立しているため、他APIへの影響はほぼゼロ
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。33
まとめ
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。34
マイクロサービス化を行ってみて
• アプリ専用APIとして独立
• 開発がアプリチームで完結
• 影響範囲の把握が容易
• リリースがアプリチームで完結
• エンジニアのスキル向上
• 数値関連の把握
高速・柔軟な開発サイクルの確立
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。35
告知など
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。36
May 17-19, 2017
@Shoreline Amphitheatre Mountain View, California
• Qiitaかエンジニアブログに参加レポート書きます!
• 社外向け勉強会(報告会)を開催します!
参加してきます!
Qiita(@etet-etet) LIFULL Creators Blog
Google I/O 2017

More Related Content

What's hot

JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作るJAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
Naoyuki Yamada
 
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのことDevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
Terui Masashi
 
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
Rikitake Oohashi
 

What's hot (20)

AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤
 
EC-CUBEによるECサイトの負荷対策
EC-CUBEによるECサイトの負荷対策EC-CUBEによるECサイトの負荷対策
EC-CUBEによるECサイトの負荷対策
 
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作るJAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
 
Building Scalable Application on the Cloud
Building Scalable Application on the CloudBuilding Scalable Application on the Cloud
Building Scalable Application on the Cloud
 
AWS re:invent振り返りServerlessでサーバコスト以外もいろいろ削減
AWS re:invent振り返りServerlessでサーバコスト以外もいろいろ削減AWS re:invent振り返りServerlessでサーバコスト以外もいろいろ削減
AWS re:invent振り返りServerlessでサーバコスト以外もいろいろ削減
 
Alexaスキルを作ろう
Alexaスキルを作ろうAlexaスキルを作ろう
Alexaスキルを作ろう
 
これからのインフラエンジニアについて考えていること
これからのインフラエンジニアについて考えていることこれからのインフラエンジニアについて考えていること
これからのインフラエンジニアについて考えていること
 
AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介
AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介
AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介
 
Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解
 
Jaws days2017-ops jaws-2
Jaws days2017-ops jaws-2Jaws days2017-ops jaws-2
Jaws days2017-ops jaws-2
 
Serverless Meetup Tokyo #1 オープニング
Serverless Meetup Tokyo #1 オープニングServerless Meetup Tokyo #1 オープニング
Serverless Meetup Tokyo #1 オープニング
 
Elasticsearch勉強会
Elasticsearch勉強会Elasticsearch勉強会
Elasticsearch勉強会
 
最近Preview公開されたAzure テストサービスを試してみた
最近Preview公開されたAzure テストサービスを試してみた最近Preview公開されたAzure テストサービスを試してみた
最近Preview公開されたAzure テストサービスを試してみた
 
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのことDevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
 
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
 
jaws-ug kansai-special_aurora_20150207
jaws-ug kansai-special_aurora_20150207jaws-ug kansai-special_aurora_20150207
jaws-ug kansai-special_aurora_20150207
 
Kubernetes on Alibaba Cloud
Kubernetes on Alibaba CloudKubernetes on Alibaba Cloud
Kubernetes on Alibaba Cloud
 
ネットワークエンジニアがWeb開発をやってみて思ったこと
ネットワークエンジニアがWeb開発をやってみて思ったことネットワークエンジニアがWeb開発をやってみて思ったこと
ネットワークエンジニアがWeb開発をやってみて思ったこと
 
クラウド入門(AWS編)
クラウド入門(AWS編)クラウド入門(AWS編)
クラウド入門(AWS編)
 

Similar to 【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について

Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
CData Software Japan
 
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
Kazuya Sugimoto
 
[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk
Amazon Web Services Japan
 
[AWSマイスターシリーズ] AWS OpsWorks
[AWSマイスターシリーズ] AWS OpsWorks[AWSマイスターシリーズ] AWS OpsWorks
[AWSマイスターシリーズ] AWS OpsWorks
Amazon Web Services Japan
 
Sharoid Service Menu
Sharoid Service MenuSharoid Service Menu
Sharoid Service Menu
sharoid
 
クラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へクラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へ
Cybozucommunity
 

Similar to 【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について (20)

Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
 
WordPress APIで作るモバイルアプリ
WordPress APIで作るモバイルアプリWordPress APIで作るモバイルアプリ
WordPress APIで作るモバイルアプリ
 
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
 
[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk[AWSマイスターシリーズ] AWS Elastic Beanstalk
[AWSマイスターシリーズ] AWS Elastic Beanstalk
 
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight
 
20201008 AWS独自設計推論チップInferentiaとInf1インスタンス
20201008 AWS独自設計推論チップInferentiaとInf1インスタンス20201008 AWS独自設計推論チップInferentiaとInf1インスタンス
20201008 AWS独自設計推論チップInferentiaとInf1インスタンス
 
オレ流クラウドデザイン
オレ流クラウドデザインオレ流クラウドデザイン
オレ流クラウドデザイン
 
WordPressAPI
WordPressAPIWordPressAPI
WordPressAPI
 
[AWSマイスターシリーズ] AWS OpsWorks
[AWSマイスターシリーズ] AWS OpsWorks[AWSマイスターシリーズ] AWS OpsWorks
[AWSマイスターシリーズ] AWS OpsWorks
 
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
 
Sharoid Service Menu
Sharoid Service MenuSharoid Service Menu
Sharoid Service Menu
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
 
AWSについて @ JAWS-UG 沖縄 CMS祭り!
AWSについて @ JAWS-UG 沖縄 CMS祭り!AWSについて @ JAWS-UG 沖縄 CMS祭り!
AWSについて @ JAWS-UG 沖縄 CMS祭り!
 
20180717 AWS Black Belt Online Seminar AWS大阪ローカルリージョンの活用とAWSで実現するDisaster Rec...
20180717 AWS Black Belt Online Seminar AWS大阪ローカルリージョンの活用とAWSで実現するDisaster Rec...20180717 AWS Black Belt Online Seminar AWS大阪ローカルリージョンの活用とAWSで実現するDisaster Rec...
20180717 AWS Black Belt Online Seminar AWS大阪ローカルリージョンの活用とAWSで実現するDisaster Rec...
 
UnityとAmazon Web Servicesで生み出す新しい価値
UnityとAmazon Web Servicesで生み出す新しい価値UnityとAmazon Web Servicesで生み出す新しい価値
UnityとAmazon Web Servicesで生み出す新しい価値
 
2018_02_01ヒカラボ登壇資料
2018_02_01ヒカラボ登壇資料2018_02_01ヒカラボ登壇資料
2018_02_01ヒカラボ登壇資料
 
DRIVE CHARTの裏側 〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
DRIVE CHARTの裏側  〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜DRIVE CHARTの裏側  〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
DRIVE CHARTの裏側 〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
 
AWS All Stars ~Lightning Talks x 13~
AWS All Stars ~Lightning Talks x 13~AWS All Stars ~Lightning Talks x 13~
AWS All Stars ~Lightning Talks x 13~
 
[Modern Cloud Day Tokyo 2019] 目指せコーディングレス!「繋げる」が実現するクラウド活用による高速アプリケーション開発の魅力
[Modern Cloud Day Tokyo 2019] 目指せコーディングレス!「繋げる」が実現するクラウド活用による高速アプリケーション開発の魅力[Modern Cloud Day Tokyo 2019] 目指せコーディングレス!「繋げる」が実現するクラウド活用による高速アプリケーション開発の魅力
[Modern Cloud Day Tokyo 2019] 目指せコーディングレス!「繋げる」が実現するクラウド活用による高速アプリケーション開発の魅力
 
クラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へクラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へ
 

More from LIFULL Co., Ltd.

趣味と仕事の違い、現場で求められるアプリケーションの可観測性
趣味と仕事の違い、現場で求められるアプリケーションの可観測性趣味と仕事の違い、現場で求められるアプリケーションの可観測性
趣味と仕事の違い、現場で求められるアプリケーションの可観測性
LIFULL Co., Ltd.
 
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
LIFULL Co., Ltd.
 

More from LIFULL Co., Ltd. (20)

20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
 
趣味と仕事の違い、現場で求められるアプリケーションの可観測性
趣味と仕事の違い、現場で求められるアプリケーションの可観測性趣味と仕事の違い、現場で求められるアプリケーションの可観測性
趣味と仕事の違い、現場で求められるアプリケーションの可観測性
 
Kubernetesセキュリティの歩き方
Kubernetesセキュリティの歩き方Kubernetesセキュリティの歩き方
Kubernetesセキュリティの歩き方
 
LIFULLの全社アプリケーション実行基盤 KEEL について
LIFULLの全社アプリケーション実行基盤 KEEL についてLIFULLの全社アプリケーション実行基盤 KEEL について
LIFULLの全社アプリケーション実行基盤 KEEL について
 
Kubernetesクラスタバージョンアップを支える技術
Kubernetesクラスタバージョンアップを支える技術Kubernetesクラスタバージョンアップを支える技術
Kubernetesクラスタバージョンアップを支える技術
 
LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷
 
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっているLIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
 
SaPID を導入するまでとそれから
SaPID を導入するまでとそれからSaPID を導入するまでとそれから
SaPID を導入するまでとそれから
 
3D間取りを支える技術
3D間取りを支える技術3D間取りを支える技術
3D間取りを支える技術
 
LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発
 
大企業でアジャイル開発を推進できる条件とその心構え
大企業でアジャイル開発を推進できる条件とその心構え大企業でアジャイル開発を推進できる条件とその心構え
大企業でアジャイル開発を推進できる条件とその心構え
 
スクラムを利用したアジャイルオフショア開発のとりくみ
スクラムを利用したアジャイルオフショア開発のとりくみスクラムを利用したアジャイルオフショア開発のとりくみ
スクラムを利用したアジャイルオフショア開発のとりくみ
 
実践 マーケティングテクノロジーエンジニア
実践 マーケティングテクノロジーエンジニア実践 マーケティングテクノロジーエンジニア
実践 マーケティングテクノロジーエンジニア
 
エンジニア × マーケティングテクノロジー が必要な理由
エンジニア × マーケティングテクノロジー が必要な理由エンジニア × マーケティングテクノロジー が必要な理由
エンジニア × マーケティングテクノロジー が必要な理由
 
「空飛ぶホームズくん」を実現するVR技術
「空飛ぶホームズくん」を実現するVR技術「空飛ぶホームズくん」を実現するVR技術
「空飛ぶホームズくん」を実現するVR技術
 
ニオイセンサで思索する街の新たな指標
ニオイセンサで思索する街の新たな指標ニオイセンサで思索する街の新たな指標
ニオイセンサで思索する街の新たな指標
 
Well-beingを測る「LIFE WILL」開発の舞台裏
Well-beingを測る「LIFE WILL」開発の舞台裏Well-beingを測る「LIFE WILL」開発の舞台裏
Well-beingを測る「LIFE WILL」開発の舞台裏
 
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
 
ウェブアクセシビリティ推進活動はじめました
ウェブアクセシビリティ推進活動はじめましたウェブアクセシビリティ推進活動はじめました
ウェブアクセシビリティ推進活動はじめました
 
大きめレガシープロジェクトのフロント行く末
大きめレガシープロジェクトのフロント行く末大きめレガシープロジェクトのフロント行く末
大きめレガシープロジェクトのフロント行く末
 

Recently uploaded

2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
 

Recently uploaded (10)

2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 

【 ヒカ☆ラボ 】LIFULL Home's androidアプリの開発の裏側について

  • 1. アプリAPIの マイクロサービス化 Amazon API Gateway + AWS Lambda 株式会社LIFULL 衛藤剛史
  • 2. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。2 自己紹介 • 衛藤 剛史(ETO TAKESHI) • 大分県大分市出身 • ~2014 SIerで開発経験 • 株式会社ネクスト(現 株式会社LIFULL)中途入社 • Androidアプリ・API(バックエンド)開発を担当
  • 3. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。3 本日お話すること • アプリAPIマイクロサービス化概要 • Amazon API Gateway / AWS Lambda • 実装環境詳細 • Testing • Deploy(APIリリース) • 運用・監視 • まとめ
  • 4. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。4 アプリAPI マイクロサービス化概要 より柔軟に・より高速に
  • 5. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。5 マイクロサービスとは 「個別に開発された小さなサービスを組み合わせ て、一つのサービスを提供する」 Service Salesforce Customer Success Blog https://www.salesforce.com/jp/blog/2016/03/microservices.html
  • 6. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。6 LIFULLとしてのマイクロサービス 「サービスごとに独立した環境を構築し、必要に 応じて連携してプロダクトを作る」 LIFULL HOME’S API
  • 7. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。7 マイクロサービス化の目的 • ネイティブアプリ専用のAPI • 高速な開発・リリース • 古いシステムからの脱却 • 新しい技術への挑戦 • 利用状況の可視化
  • 8. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。8 以前までの構成 common modules PC API Smart phone API Apps API Orchestration Layer DB / DAO
  • 9. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。9 マイクロサービス化 Apps API common modules Orchestration Layer DB / DAO PC API Smart phone API
  • 10. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。10 マイクロサービス構成 DB / DAO Lambda S3 Cloud Front API Gateway App AWS cloud Route53 Cognito
  • 11. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。11 Amazon API Gateway AWS Lambda サーバレスアーキテクチャにより運用いらず
  • 12. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。12 Amazon API Gateway アプリケーションの玄関 Touch • 最大で数十万の同時API呼び出し • 従量課金 • キャッシュ • Cloud Watchでロギング • クライアント側SDKが出力可能 • Lambda関数を指定
  • 13. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。13 AWS Lambda サーバー構築しなくてもコードを実行 • Lambda対応言語 • Node.js • Java • C# • Python • S3のイベントをフックしてコード実行 • API Gatewayと組み合わせてRESTful通信 Touch POINT 1関数1git repositoryで独立
  • 14. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。14 API GatewayとLambdaの制限 • スロットル制限1,000rps • アカウント当たりのAPI数 60 • Timeout 30秒 • Payloadサイズ 10MB • Etc… • ディスク容量 512MB • リクエスト本文のPayloadサイズ 6MB • 関数の同時実行数 • Etc… POINT 運用コストが減る代わりに、様々なデフォルト制限がある サービスの規模に応じてAWS Supportに上限緩和申請をする ※項目によっては緩和出来ないため、AWSのドキュメントを参照
  • 15. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。15 実装環境詳細 APIドキュメントの記載・使用しているツール・実装などについて
  • 16. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。16 Node.js サーバーサイドJavaScript環境 • 非同期型のイベント駆動 • 各接続ごとにコールバックが発火 • スレッドベースのモデルと対象的 • Non-blocking I/O • パッケージ管理はnpm(今回は使っていない※後述) function handler(event, context, callback) { // event => API Gatewayのパラメータ // context => Lambdaの状態 // callback => コールバック関数 }
  • 17. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。17 SWAGGER API I/Oドキュメントを作成・管理 http://swagger.io/ • THE WORLD’S MOST POPULAR API FRAMEWORK • Open Source Initiativeが採用 • RESTful APIドキュメントの管理 • Swagger SpecでI/Oを定義する(yaml/json) • Client用のSDKとサーバーコードの生成 • Electron化で社内用ツールとして使用
  • 18. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。18 SWAGGER
  • 19. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。19 SWAGGER POINT • 記述方式が統一されている • Editorが使いやすい • 一人三役 1. APIリファレンス 2. パラメータのValidation 3. API Gatewayデプロイ時の設定
  • 20. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。20 Yarn npmに変わるパッケージマネージャ • Facebookが2016/10にローンチ • Ultra Fast. • Mega Secure. • Super Reliable. • Offline Mode • Flat Mode • yarn.lockファイルでversion統一 • Qiita書きました $ npm install $ yarn (install) Ultra Fast!
  • 21. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。21 API実装方針 アプリ専用のAPIとして、自由自在にカスタマイズ • 1画面1~2APIコール • 解析に必要な情報は必須で送付 • OS / OS Version / App Version / Device Type • API Versioning • 画面に沿ったレスポンス構造 • 必要最低限なレスポンス Apart001 { "title": "Apart001", "overview": { "title": "概要", "label": "価格", "value": "3,000万円" }, "image": { "label": "外観" "url": "https://xxx" } } 概要 ■ 価格 3,000万円 外観
  • 22. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。22 Testing ユニットテスト、結合テスト、Lint
  • 23. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。23 Mocha テスティングフレームワーク • ユニットテスト • 結合テスト(APIテスト) • npm ライブラリrewireでprivate functionテスト • coverage計測 • CIサーバーでpush毎にnpm run test $ npm test Hoge #moge() ✔ should poge poge 1 passing (5ms) =========== Coverage summary =========== Statements : 100% ( 37/37 ) Branches : 100% ( 14/14 ) Functions : 100% ( 6/6 ) Lines : 100% ( 37/37 ) ========================================
  • 24. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。24 ESlint JavaScriptの静的検証ツール コーディング規約をすべて集約 • インデント幅 • スペーシング • var禁止(ES6) • スペルチェック • Etc… { "extends": "eslint:recommended”, "rules": { "indent": [2, 2, {"SwitchCase": 1, "VariableDeclarator": 2}], "quotes": [2, "single"], "space-before-blocks": [2, "always"], "comma-spacing": [1, {"before": false, "after": true}], "complexity": [2, 20], "no-var": 2, // etc "spellcheck/spell-checker": [1, {…} ] } }
  • 25. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。25 CircleCI 継続的インテグレーション(CI)サービス • ビルド毎にコンテナ起動 → 破棄 • 1コンテナは無料 • Github連携 • Slackにテスト結果通知 • yarnでも使える • Test前にlintも流す コードをpush CircleCIでテスト Github連携 Slackに結果通知
  • 26. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。26 CircleCIをyarnに対応させる ビルドからテストまでを高速化 machine: node: version: 4.2.2 post: - curl -o- -L https://yarnpkg.com/install.sh | bash dependencies: cache_directories: - "~/.cache/yarn" pre: - yarn --version override: - yarn install test: post: - yarn run lint deployment: master: … cache_directoriesの指定 POINT circle.yml
  • 27. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。27 Deploy(APIリリース)
  • 28. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。28 Gulp Node.jsベースのビルド自動化用ツールキット リリーススクリプトタスクの実行順序 1.Clean 2.lint実行 • Fail時はabort 3.UT実行 • Fail時はabort 4.zipに固める 5.AWS Lambdaへアップロード 6.Amazon API Gatewayにデプロイ
  • 29. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。29 リリース 毎日リリース • Web側のスケジュールを気にすることなくリリース • Web側への影響はほぼゼロレベル • Lambdaは切り戻しがすぐに行える • エンジニア全員がリリース作業を行える
  • 30. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。30 運用・監視 輪番体制で毎日監視 修正が必要であれば即修正・即リリース
  • 31. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。31 AWS CloudWatch AWSクラウドリソースとAWSで実行するアプリケー ションのモニタリングサービス デフォルトで使用可能なアラームの他、手動で様々なアラームを定義 • 5xxエラー • Lambdaの関数ごと • 任意の文字列(ログ内容から抽出) • Invocation Count • Count over limit • Throttles
  • 32. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。32 運用と監視 輪番体制でアプリエンジニアが監視 • アラームメールで検知 • Chatworkで報告 • Chatworkへの投稿自動化も可能なので試してみたい 修正が必要ならすぐに対応してリリース • アプリをリリースを最小限に • リポジトリが独立しているため、他APIへの影響はほぼゼロ
  • 33. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。33 まとめ
  • 34. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。34 マイクロサービス化を行ってみて • アプリ専用APIとして独立 • 開発がアプリチームで完結 • 影響範囲の把握が容易 • リリースがアプリチームで完結 • エンジニアのスキル向上 • 数値関連の把握 高速・柔軟な開発サイクルの確立
  • 35. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。35 告知など
  • 36. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。36 May 17-19, 2017 @Shoreline Amphitheatre Mountain View, California • Qiitaかエンジニアブログに参加レポート書きます! • 社外向け勉強会(報告会)を開催します! 参加してきます! Qiita(@etet-etet) LIFULL Creators Blog Google I/O 2017

Editor's Notes

  1. 開発の流れで
  2. ・タイトル話す ・より柔軟に より高速に  → この後話すが、マイクロサービス化の結果柔軟に・高速に対応が可能になった
  3. ・独立したコンポーネントが集まって1つのサービスになる
  4. ・同じレイヤーで動いていたアプリAPIを完全に切り離す
  5. これまで ・同じサーバー上でコンポーネント化されていた ・ライブラリの導入に時間がかかる&影響が大きい ・どこかで何か起こると全て引っ張られる可能性が
  6. ・アプリの部分をごっそり切り離し ・Web側とは依存がない => お互いに気にしなくても良い ・どちらかで何か起こったとしても影響が少なくなる
  7. ・おおまかな構成 図を使いながら話す ・次は、主にAPI GatewayとLambdaについて簡単に
  8. ・アプリからAPIを呼び出す部分 => アニメーション ・デフォルトの制限がある→後述する ・クライアント用SDKの出力(Android/iOS)→Androidは自作で行っている。クエリが多すぎると見通しが悪くなる 使うといいところ・・・リトライとか面倒くさい処理を実装しなくて済む
  9. ・Node.jsを使用 当初は0.1.36と4.3しかサポートされていなかった=>最近6.10がサポートされた ・POINT  1リポジトリで独立、1関数あたり1−2pathくらい  リリースする際のリスクを最小限に押さえている  開発時の影響も少なくて済む  全API共通な処理 => ライブラリとして共通モジュール化 => API自体はリポジトリが別になるため、version upはリポジトリ内で完結する
  10. ・Lambdaが制限超えた場合はステータス429を返すので、リトライなどが必要 ・Payloadサイズの上限があるため、(後ほど例が出てくるが)出来る限りレスポンスは少なくした方が良い
  11. ・HPからの転記事項 ・標準的にはnpmだが、LIFULLでは最近yarnに切り替えた ・サンプルコードはLambdaの呼び出し部分 ・コールバック地獄にならないように、Promiseとかasyncとかを使う
  12. ・Open Source Initiative: オープンソースソフトウェアを促進することを目的とする組織である。 ・書きやすいのはYaml ・EditorからYaml/jsonをDLすることが出来る
  13. ・左側にSwagger Specフォーマットで記述 ・右側に記載内容が即時にビジュアル化 ・左上のFileからyaml/jsonをexport可能 ・レスポンス部分はJSON Schemaで記述出来るため、jsライブラリ TV4を使って入力値のvalidationを行う ・APIドキュメントの記述+validationが出来る優れもの
  14. ・左側にSwagger Specフォーマットで記述 ・右側に記載内容が即時反映される ・yamlのポインターも使用可能  配列レスポンスがある場合・・・Modelを定義して配列のポインターとして指定すれば良い ・左上のFileからyaml/jsonをexport可能 ・レスポンス部分はJSON Schemaで記述出来るため、jsライブラリ TV4を使って入力値のvalidationを行う ・APIドキュメントの記述+validationが出来る優れもの
  15. ・目的 => 早くしたい ・場合によっては2倍 ・UltraFast ・yarn.lock ・Qiita
  16. ・1画面1−2API(UIのみ) ・API Versioning  大体どこでもやっているが、下位ver互換 ・画面に沿ったレスポンス / 必要最低限  OSも送信しているので、iOS/Androidで項目を出し分ける  画面の例:なるべくAPI側に情報をもたせることで、緊急時にアプリのリリースをしなくてもAPIだけ変えればよい
  17. ・ビルド毎にコンテナ起動 → 破棄 ・1コンテナは無料  増やすことで、並列実行が可能になる(実行の高速化)
  18. ・circle.ymlというファイルで定義する ・cache_directoriesを指定することで、一度インストールしたものがキャッシュされ、次からは高速になる  場合によっては2分とか短縮
  19. AWS側へのデプロイはAWS SDK for JavaScriptを使用
  20. ・祝日前は禁止など、若干の制約はある ・それでもAPIが独立したことで、変な依存がなくなり、サービスへの影響もほぼ0レベルにすることが可能
  21. ・アプリ専用API  Webチームはアプリを気にせず、アプリチームはWebを気にせず開発 ・影響範囲の把握  全てアプリチームで開発されているため、影響がどこに及ぶか分かる  リポジトリが独立しているため、そのAPIだけに集中して開発すれば良い ・リリースがアプリチームで完結  自分たちの裁量で決められる ・エンジニアのスキル向上  これまでは、iOS/Android専任が多かったが、どちらも出来るようになる ・数値関連の把握  季節要因等もあるため、自分たちで数値を把握し設計する