SlideShare a Scribd company logo
1 of 24
Download to read offline
© 2015 Actcat, Inc. 1
API通信周りの継続的なテストの仕組み
SideCIでの実践
β
[Confidential] © 2013 Actcat, Inc.
軽く自己紹介
すみ です
n 「SideCI」というサービスを	
  
開発しているエンジニアです。	
  
言語歴:	
  Ruby	
  >	
  Obj-­‐C	
  >	
  	
  Java	
  >	
  PHP,	
  etc…	
  
	
  
n Twitter:	
  @sumyapp	
  
Facebook:	
  sumyapp
2
[Confidential] © 2013 Actcat, Inc.
What is SideCI?
Integration:	
  	
  
Open	
  Source	
  Software	
  
	
   	
  +	
  Docker	
  
	
   	
   	
  +	
  GitHub	
  	
  
>	
  
Automated	
  Code	
  Review	
  
and	
  
	
  Test	
  and	
  Delivery	
  
3
[Confidential] © 2013 Actcat, Inc.
How does it works?
4
hook
[Confidential] © 2013 Actcat, Inc. 5
GitHub上にSideCIがインラインコメント	
  
プログラムとコラボした開発が出来る	
  
[Confidential] © 2013 Actcat, Inc.
Jenkinsなどを使っている方に朗報!
6
Test	
  and	
  Deploy	
  
[Confidential] © 2013 Actcat, Inc. 7
	
  
	
  
使ってみてね!
[Confidential] © 2013 Actcat, Inc. 8
本題 API通信周りの継続的なテストの仕組み
[Confidential] © 2013 Actcat, Inc.
サービス構築にはAPIを作るのが一般的
9
API
API
{	
  
	
  	
  	
  	
  "properties":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "age":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "description":	
  "Age	
  in	
  years",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "minimum":	
  0,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "integer"	
  
	
  	
  	
  	
  	
  	
  	
  	
  },	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  "firstName":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "string”	
  
役割毎にサーバ	
  
分離パターン	
  
Server-­‐Client	
  
パターン	
  
{	
  
	
  	
  	
  	
  "properties":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "age":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "description":	
  "Age	
  in	
  years",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "minimum":	
  0,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "integer"	
  
	
  	
  	
  	
  	
  	
  	
  	
  },	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  "firstName":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "string”	
  
[Confidential] © 2013 Actcat, Inc.
APIのレスポンス値を変更すると…
10
API
API
{	
  
	
  	
  	
  	
  "properties":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "age":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "description":	
  "Age	
  in	
  years",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "minimum":	
  0,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  “min”:9,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "integer"	
  
	
  	
  	
  	
  	
  	
  	
  	
  },	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  "firstName":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "string”	
  
役割毎にサーバ	
  
分離パターン	
  
Server-­‐Client	
  
パターン	
  
{	
  
	
  	
  	
  	
  "properties":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "age":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "description":	
  "Age	
  in	
  years",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "minimum":	
  0,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  “min”:9,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "integer"	
  
	
  	
  	
  	
  	
  	
  	
  	
  },	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  "firstName":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "string”	
  
APIのデータ
のkeyを変更。	
  
短い方が良い
よね!
[Confidential] © 2013 Actcat, Inc.
APIのレスポンス値を変更すると…
11
API
API
{	
  
	
  	
  	
  	
  "properties":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "age":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "description":	
  "Age	
  in	
  years",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "minimum":	
  0,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  “min”:9,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "integer"	
  
	
  	
  	
  	
  	
  	
  	
  	
  },	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  "firstName":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "string”	
  
役割毎にサーバ	
  
分離パターン	
  
Server-­‐Client	
  
パターン	
  
{	
  
	
  	
  	
  	
  "properties":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  "age":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "description":	
  "Age	
  in	
  years",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "minimum":	
  0,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  “min”:9,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "integer"	
  
	
  	
  	
  	
  	
  	
  	
  	
  },	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  "firstName":	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "string”	
  
え、いきなり	
  
動かなくなっ
たんだけど…
[Confidential] © 2013 Actcat, Inc. 12
SOLUTION
[Confidential] © 2013 Actcat, Inc.
簡単な3 Step と CI で問題発生を防止
1.  API仕様を固める(JSONも)	
  
2.  サーバとアプリでテスト通信、	
  
通信時のリクエスト・レスポンスを	
  
ファイルに記録する	
  
3.  記録したファイルを使った	
  
テストコードをサーバ側に書く	
  
+	
  上記のテストをCIでまわす	
  
13
[Confidential] © 2013 Actcat, Inc.
1. API仕様を固める(JSONも)
SideCI内での一例:
n URL:	
  
l POST	
  "/task/register"	
  
n Header:	
  
l 指定なし
n Body:	
  	
  
l JSONで下記を送付する	
  
l id:	
  タスクID(タスク識別用)
l type:	
  タスクタイプ(rubocop,	
  
rails_best_practice,	
  brakeman,	
  
bundle_outdated)
14
[Confidential] © 2013 Actcat, Inc.
2. サーバとアプリでテスト通信、
通信時のリクエスト・レスポンスを
ファイルに記録する
1.  サーバをローカルで起動(本番でも可)	
  
2.  アプリからのリクエストをログ等で確認	
  
3.  Header,	
  Request	
  Bodyなどを記録	
  
4.  Responseなどを記録	
  
15
[Confidential] © 2013 Actcat, Inc.
記録した一例
(SideCI<-GitHub)
{	
  
	
  	
  "sha":	
  "4e73f2ef6d3534b45bbdf220f060d2628c5952e5",	
  
	
  	
  "commit":	
  {	
  
	
  	
  	
  	
  "author":	
  {	
  
	
  	
  	
  	
  	
  	
  "name":	
  ”Koichiro	
  Sumi",	
  
	
  	
  	
  	
  	
  	
  "email":	
  ”koichiro.sumi@actcat.co.jp",	
  
	
  	
  	
  	
  	
  	
  "date":	
  "2014-­‐02-­‐14T09:46:50Z"	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  "committer":	
  {	
  
	
  	
  	
  	
  	
  	
  "name":	
  "Koichiro	
  Sumi",	
  
	
  	
  	
  	
  	
  	
  "email":	
  "koichiro.sumi@actcat.co.jp",	
  
	
  	
  	
  	
  	
  "date":	
  "2014-­‐02-­‐14T09:46:50Z”,	
  
16
JSONファイルとして保存
[Confidential] © 2013 Actcat, Inc.
記録した一例
(SideCI<-GitHub)
request.url	
  "/api/v1/github_repositories/hook/”	
  
request.headers['X-­‐GitHub-­‐Event']	
  =	
  'pull_request’	
  
request.headers['X-­‐GitHub-­‐Delivery']	
  =	
  'cd36a080-­‐
b5a8-­‐11e4-­‐9e0d-­‐q1024663ce0’	
  
request.headers['User-­‐Agent']	
  =	
  'GitHub-­‐Hookshot/e9dfd89’	
  
request.headers['content-­‐type']	
  =	
  'application/x-­‐www-­‐form-­‐
urlencoded’	
  
17
Requestをメモしておく。Responseも
[Confidential] © 2013 Actcat, Inc.
記録したファイルを使った
テストコードをサーバ側に書く
n APIはおそらくController?なので、その
Controllerのテストコードを書こう	
  
n リクエストに先ほどメモしたリクエストヘッ
ダーやボディを設定、クライアントを装って
Controllerにリクエストを送るコード	
  
n そのレスポンスが、サーバ・アプリ間で動作
確認を行った、正しく動作するレスポンスと
同一であることを確認する
18
[Confidential] © 2013 Actcat, Inc.
Rspecでどう書くか?
SideCIの一例
let(:params)	
  {	
  {	
  "payload"	
  =>	
  payload_basic	
  }	
  }	
  
let(:headers)	
  {	
  {	
  
	
  	
  	
  	
  	
  	
  "User-­‐Agent"	
  	
  	
  	
  	
  =>	
  "GitHub-­‐Hookshot/2e7s9",	
  
	
  	
  	
  	
  	
  	
  "Content-­‐Type"	
  	
  	
  =>	
  "application/x-­‐www-­‐form-­‐urlencoded",	
  
	
  	
  	
  	
  	
  	
  "Content-­‐Length"	
  =>	
  "10163",	
  
	
  	
  	
  	
  	
  	
  "X-­‐GitHub-­‐Event"	
  =>	
  "push"	
  
	
  	
  	
  	
  }	
  }	
  
let(:payload_basic	
  )	
  {	
  File.open('spec/basic.json').read	
  }	
  
describe	
  "POST	
  'hook'"	
  do	
  
…(一部省略)…
19
[Confidential] © 2013 Actcat, Inc.
テストをCIでまわす
n 作ったテストはデプロイ前にかならずテ
スト実行。面倒だったらCIで回しましょう	
  
n CIサービスの一例	
  
l Jenkins…はセットアップが面倒なので,	
  
l SideCI,	
  CircleCI,	
  Wercker,	
  Shippable,	
  
CodeShip,	
  TravisCI,	
  etc…
20
© 2015 Actcat, Inc. 21
CIサービスならGitHub上でテストステータスを確
認、安心してマージ出来ます	
  
© 2015 Actcat, Inc.
+ 可能ならコードレビューも
最後に頼りになるのは人力
n API変更時にはコードをプルリクエストでAPI
通信を行う先の担当のエンジニアにもレ
ビューして貰いましょう	
  
n うかつなAPI変更による障害防止には	
  
l 仕様をしっかり決めて、APIを変えられなく
する	
  
l 変えるとテストがFailedして気づくようにす
る	
  
l テスト・実装共変えた場合は人力レビュー	
  
この3つの手段がおすすめだと思います
22
© 2015 Actcat, Inc.
SideCI Customers
GitHub	
  +	
  Railsな開発体制のプロジェクトで	
  
ご利用頂いております	
  
	
  
n 50以上のプロジェクトが毎週ご利用	
  
n 1週間に500~1000回、SideCIがユーザの	
  
プロジェクトのコードにコメント	
  
23
© 2015 Actcat, Inc. 24
https://www.sideci.com/	
  

More Related Content

What's hot

NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)fisuda
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)fisuda
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
 
コンテナで作れるFaaS
コンテナで作れるFaaSコンテナで作れるFaaS
コンテナで作れるFaaS真吾 吉田
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 1.15.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 1.15.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 1.15.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 1.15.0対応)fisuda
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.4.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.4.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.4.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.4.0対応)fisuda
 
AWSで実現するクラウドネイティブなアプリ開発のポイント
AWSで実現するクラウドネイティブなアプリ開発のポイントAWSで実現するクラウドネイティブなアプリ開発のポイント
AWSで実現するクラウドネイティブなアプリ開発のポイントKeisuke Nishitani
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractTakeshi Ogawa
 

What's hot (9)

OpenStack API
OpenStack APIOpenStack API
OpenStack API
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.1.0対応)
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
コンテナで作れるFaaS
コンテナで作れるFaaSコンテナで作れるFaaS
コンテナで作れるFaaS
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 1.15.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 1.15.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 1.15.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 1.15.0対応)
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.4.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.4.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.4.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 2.4.0対応)
 
AWSで実現するクラウドネイティブなアプリ開発のポイント
AWSで実現するクラウドネイティブなアプリ開発のポイントAWSで実現するクラウドネイティブなアプリ開発のポイント
AWSで実現するクラウドネイティブなアプリ開発のポイント
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
 

Viewers also liked

PHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェック
PHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェックPHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェック
PHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェックKoichiro Sumi
 
管理画面の作り方ディスカス 新宿.rb 36th #shinjukurb
管理画面の作り方ディスカス 新宿.rb 36th #shinjukurb管理画面の作り方ディスカス 新宿.rb 36th #shinjukurb
管理画面の作り方ディスカス 新宿.rb 36th #shinjukurbKoichiro Sumi
 
CIを取り入れ始めて超楽になったこと
CIを取り入れ始めて超楽になったことCIを取り入れ始めて超楽になったこと
CIを取り入れ始めて超楽になったことKoichiro Sumi
 
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurbSidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurbKoichiro Sumi
 
ActiveResourceモデルによるAPIの隠蔽の怖い話 ~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurbActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話 ~レスポンスタイムへの致命的影響~ at #shinjukurbKoichiro Sumi
 
rablについてざっくりだけ調べてみた #shinjukurb 新宿rb 41th
rablについてざっくりだけ調べてみた #shinjukurb 新宿rb 41thrablについてざっくりだけ調べてみた #shinjukurb 新宿rb 41th
rablについてざっくりだけ調べてみた #shinjukurb 新宿rb 41thKoichiro Sumi
 
Sansan x ESM Ruby合同勉強会 2015.05.15
Sansan x ESM Ruby合同勉強会 2015.05.15Sansan x ESM Ruby合同勉強会 2015.05.15
Sansan x ESM Ruby合同勉強会 2015.05.15Tetsuya Mase
 
プロトタイプとMVPの開発上のギャップの大きさ。リンスタ関ヶ原 東軍先鋒 #devlove
プロトタイプとMVPの開発上のギャップの大きさ。リンスタ関ヶ原 東軍先鋒 #devloveプロトタイプとMVPの開発上のギャップの大きさ。リンスタ関ヶ原 東軍先鋒 #devlove
プロトタイプとMVPの開発上のギャップの大きさ。リンスタ関ヶ原 東軍先鋒 #devloveKoichiro Sumi
 
スタートアップの開発体制、流れのBASIC PATTERN
スタートアップの開発体制、流れのBASIC PATTERNスタートアップの開発体制、流れのBASIC PATTERN
スタートアップの開発体制、流れのBASIC PATTERNKoichiro Sumi
 
どうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIどうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIKoichiro Sumi
 
スタートアップの開発体制、流れ POPULAR PATTERN
スタートアップの開発体制、流れ POPULAR PATTERNスタートアップの開発体制、流れ POPULAR PATTERN
スタートアップの開発体制、流れ POPULAR PATTERNKoichiro Sumi
 
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話Koichiro Sumi
 
Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb
Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorbRuby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb
Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorbKoichiro Sumi
 
CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡Koichiro Sumi
 

Viewers also liked (15)

About SideCI
About SideCIAbout SideCI
About SideCI
 
PHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェック
PHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェックPHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェック
PHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェック
 
管理画面の作り方ディスカス 新宿.rb 36th #shinjukurb
管理画面の作り方ディスカス 新宿.rb 36th #shinjukurb管理画面の作り方ディスカス 新宿.rb 36th #shinjukurb
管理画面の作り方ディスカス 新宿.rb 36th #shinjukurb
 
CIを取り入れ始めて超楽になったこと
CIを取り入れ始めて超楽になったことCIを取り入れ始めて超楽になったこと
CIを取り入れ始めて超楽になったこと
 
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurbSidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
 
ActiveResourceモデルによるAPIの隠蔽の怖い話 ~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurbActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話 ~レスポンスタイムへの致命的影響~ at #shinjukurb
 
rablについてざっくりだけ調べてみた #shinjukurb 新宿rb 41th
rablについてざっくりだけ調べてみた #shinjukurb 新宿rb 41thrablについてざっくりだけ調べてみた #shinjukurb 新宿rb 41th
rablについてざっくりだけ調べてみた #shinjukurb 新宿rb 41th
 
Sansan x ESM Ruby合同勉強会 2015.05.15
Sansan x ESM Ruby合同勉強会 2015.05.15Sansan x ESM Ruby合同勉強会 2015.05.15
Sansan x ESM Ruby合同勉強会 2015.05.15
 
プロトタイプとMVPの開発上のギャップの大きさ。リンスタ関ヶ原 東軍先鋒 #devlove
プロトタイプとMVPの開発上のギャップの大きさ。リンスタ関ヶ原 東軍先鋒 #devloveプロトタイプとMVPの開発上のギャップの大きさ。リンスタ関ヶ原 東軍先鋒 #devlove
プロトタイプとMVPの開発上のギャップの大きさ。リンスタ関ヶ原 東軍先鋒 #devlove
 
スタートアップの開発体制、流れのBASIC PATTERN
スタートアップの開発体制、流れのBASIC PATTERNスタートアップの開発体制、流れのBASIC PATTERN
スタートアップの開発体制、流れのBASIC PATTERN
 
どうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIどうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCI
 
スタートアップの開発体制、流れ POPULAR PATTERN
スタートアップの開発体制、流れ POPULAR PATTERNスタートアップの開発体制、流れ POPULAR PATTERN
スタートアップの開発体制、流れ POPULAR PATTERN
 
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
 
Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb
Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorbRuby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb
Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb
 
CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡
 

Similar to API通信周りの継続的なテストの仕組み~SideCIでの実践~

JAWSDAYS2016 Technical Deep DIVE
JAWSDAYS2016 Technical Deep DIVE JAWSDAYS2016 Technical Deep DIVE
JAWSDAYS2016 Technical Deep DIVE 陽平 山口
 
DevOps on azure 高品質クラウドデザインを求めて
DevOps on azure 高品質クラウドデザインを求めてDevOps on azure 高品質クラウドデザインを求めて
DevOps on azure 高品質クラウドデザインを求めてAtsushi Kojima
 
進化する Web ~ Progressive Web Apps の実装と応用 ~
進化する Web  ~ Progressive Web Apps の実装と応用 ~進化する Web  ~ Progressive Web Apps の実装と応用 ~
進化する Web ~ Progressive Web Apps の実装と応用 ~Microsoft Azure Japan
 
show コマンド結果をパースする方法あれこれ #npstudy
show コマンド結果をパースする方法あれこれ #npstudyshow コマンド結果をパースする方法あれこれ #npstudy
show コマンド結果をパースする方法あれこれ #npstudyakira6592
 
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回- CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回- SORACOM, INC
 
クラウドネイティブ化する未来
クラウドネイティブ化する未来クラウドネイティブ化する未来
クラウドネイティブ化する未来Keisuke Nishitani
 
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンAWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンEiji KOMINAMI
 
Scala が支える医療系ウェブサービス #jissenscala
Scala が支える医療系ウェブサービス #jissenscalaScala が支える医療系ウェブサービス #jissenscala
Scala が支える医療系ウェブサービス #jissenscalaKazuhiro Sera
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加するYuto Takei
 
本気で使うStack storm
本気で使うStack storm本気で使うStack storm
本気で使うStack stormtyamane
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUehara Junji
 
Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013Yasuhiro Horiuchi
 
Karateによる UI Test Automation 革命
Karateによる UI Test Automation 革命Karateによる UI Test Automation 革命
Karateによる UI Test Automation 革命Takanori Suzuki
 
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignSmart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignRyuji TAKEHARA
 
Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...
Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...
Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...Shotaro Suzuki
 
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライAzure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライMasanobu Sato
 
AWS SDK for Smalltalk
AWS SDK for SmalltalkAWS SDK for Smalltalk
AWS SDK for SmalltalkSho Yoshida
 
20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formationAmazon Web Services Japan
 
AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)Akio Katayama
 

Similar to API通信周りの継続的なテストの仕組み~SideCIでの実践~ (20)

JAWSDAYS2016 Technical Deep DIVE
JAWSDAYS2016 Technical Deep DIVE JAWSDAYS2016 Technical Deep DIVE
JAWSDAYS2016 Technical Deep DIVE
 
DevOps on azure 高品質クラウドデザインを求めて
DevOps on azure 高品質クラウドデザインを求めてDevOps on azure 高品質クラウドデザインを求めて
DevOps on azure 高品質クラウドデザインを求めて
 
進化する Web ~ Progressive Web Apps の実装と応用 ~
進化する Web  ~ Progressive Web Apps の実装と応用 ~進化する Web  ~ Progressive Web Apps の実装と応用 ~
進化する Web ~ Progressive Web Apps の実装と応用 ~
 
show コマンド結果をパースする方法あれこれ #npstudy
show コマンド結果をパースする方法あれこれ #npstudyshow コマンド結果をパースする方法あれこれ #npstudy
show コマンド結果をパースする方法あれこれ #npstudy
 
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回- CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
 
クラウドネイティブ化する未来
クラウドネイティブ化する未来クラウドネイティブ化する未来
クラウドネイティブ化する未来
 
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンAWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
 
Scala が支える医療系ウェブサービス #jissenscala
Scala が支える医療系ウェブサービス #jissenscalaScala が支える医療系ウェブサービス #jissenscala
Scala が支える医療系ウェブサービス #jissenscala
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
 
本気で使うStack storm
本気で使うStack storm本気で使うStack storm
本気で使うStack storm
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 
Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013Programming AWS with Perl at YAPC::Asia 2013
Programming AWS with Perl at YAPC::Asia 2013
 
Karateによる UI Test Automation 革命
Karateによる UI Test Automation 革命Karateによる UI Test Automation 革命
Karateによる UI Test Automation 革命
 
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless DesignSmart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless Design
 
GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)
 
Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...
Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...
Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...
 
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライAzure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
 
AWS SDK for Smalltalk
AWS SDK for SmalltalkAWS SDK for Smalltalk
AWS SDK for Smalltalk
 
20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation
 
AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)
 

More from Koichiro Sumi

Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会
Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会
Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会Koichiro Sumi
 
エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...
エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...
エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...Koichiro Sumi
 
ベトナムのホーチミン・ハノイ・ ダナンを1週間見て回った話
ベトナムのホーチミン・ハノイ・ダナンを1週間見て回った話ベトナムのホーチミン・ハノイ・ダナンを1週間見て回った話
ベトナムのホーチミン・ハノイ・ ダナンを1週間見て回った話Koichiro Sumi
 
IVS CTO Night 2015 Winter LT資料 / SideCI
IVS CTO Night 2015 Winter LT資料 / SideCIIVS CTO Night 2015 Winter LT資料 / SideCI
IVS CTO Night 2015 Winter LT資料 / SideCIKoichiro Sumi
 
開発メンバーを増やすときの 秩序だったプラクティス with SideCI
開発メンバーを増やすときの秩序だったプラクティス with SideCI開発メンバーを増やすときの秩序だったプラクティス with SideCI
開発メンバーを増やすときの 秩序だったプラクティス with SideCIKoichiro Sumi
 
Git plus something / Git+何かで更にGitを使いこなす
Git plus something / Git+何かで更にGitを使いこなすGit plus something / Git+何かで更にGitを使いこなす
Git plus something / Git+何かで更にGitを使いこなすKoichiro Sumi
 
ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9
ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9
ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9Koichiro Sumi
 
Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07
Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07
Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07Koichiro Sumi
 
Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420
Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420
Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420Koichiro Sumi
 
Spath for enterprise
Spath for enterpriseSpath for enterprise
Spath for enterpriseKoichiro Sumi
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップKoichiro Sumi
 
スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果Koichiro Sumi
 
スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜
スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜
スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜Koichiro Sumi
 
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~Koichiro Sumi
 

More from Koichiro Sumi (15)

Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会
Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会
Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会
 
エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...
エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...
エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...
 
ベトナムのホーチミン・ハノイ・ ダナンを1週間見て回った話
ベトナムのホーチミン・ハノイ・ダナンを1週間見て回った話ベトナムのホーチミン・ハノイ・ダナンを1週間見て回った話
ベトナムのホーチミン・ハノイ・ ダナンを1週間見て回った話
 
IVS CTO Night 2015 Winter LT資料 / SideCI
IVS CTO Night 2015 Winter LT資料 / SideCIIVS CTO Night 2015 Winter LT資料 / SideCI
IVS CTO Night 2015 Winter LT資料 / SideCI
 
開発メンバーを増やすときの 秩序だったプラクティス with SideCI
開発メンバーを増やすときの秩序だったプラクティス with SideCI開発メンバーを増やすときの秩序だったプラクティス with SideCI
開発メンバーを増やすときの 秩序だったプラクティス with SideCI
 
Git plus something / Git+何かで更にGitを使いこなす
Git plus something / Git+何かで更にGitを使いこなすGit plus something / Git+何かで更にGitを使いこなす
Git plus something / Git+何かで更にGitを使いこなす
 
ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9
ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9
ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9
 
Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07
Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07
Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07
 
Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420
Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420
Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420
 
Spath for enterprise
Spath for enterpriseSpath for enterprise
Spath for enterprise
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
 
スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果
 
スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜
スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜
スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜
 
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
 
Smadd概要資料
Smadd概要資料Smadd概要資料
Smadd概要資料
 

API通信周りの継続的なテストの仕組み~SideCIでの実践~

  • 1. © 2015 Actcat, Inc. 1 API通信周りの継続的なテストの仕組み SideCIでの実践 β
  • 2. [Confidential] © 2013 Actcat, Inc. 軽く自己紹介 すみ です n 「SideCI」というサービスを   開発しているエンジニアです。   言語歴:  Ruby  >  Obj-­‐C  >    Java  >  PHP,  etc…     n Twitter:  @sumyapp   Facebook:  sumyapp 2
  • 3. [Confidential] © 2013 Actcat, Inc. What is SideCI? Integration:     Open  Source  Software      +  Docker        +  GitHub     >   Automated  Code  Review   and    Test  and  Delivery   3
  • 4. [Confidential] © 2013 Actcat, Inc. How does it works? 4 hook
  • 5. [Confidential] © 2013 Actcat, Inc. 5 GitHub上にSideCIがインラインコメント   プログラムとコラボした開発が出来る  
  • 6. [Confidential] © 2013 Actcat, Inc. Jenkinsなどを使っている方に朗報! 6 Test  and  Deploy  
  • 7. [Confidential] © 2013 Actcat, Inc. 7     使ってみてね!
  • 8. [Confidential] © 2013 Actcat, Inc. 8 本題 API通信周りの継続的なテストの仕組み
  • 9. [Confidential] © 2013 Actcat, Inc. サービス構築にはAPIを作るのが一般的 9 API API {          "properties":  {                  "age":  {                          "description":  "Age  in  years",                            "minimum":  0,                            "type":  "integer"                  },                    "firstName":  {                          "type":  "string”   役割毎にサーバ   分離パターン   Server-­‐Client   パターン   {          "properties":  {                  "age":  {                          "description":  "Age  in  years",                            "minimum":  0,                            "type":  "integer"                  },                    "firstName":  {                          "type":  "string”  
  • 10. [Confidential] © 2013 Actcat, Inc. APIのレスポンス値を変更すると… 10 API API {          "properties":  {                  "age":  {                          "description":  "Age  in  years",                            "minimum":  0,                            “min”:9,                          "type":  "integer"                  },                    "firstName":  {                          "type":  "string”   役割毎にサーバ   分離パターン   Server-­‐Client   パターン   {          "properties":  {                  "age":  {                          "description":  "Age  in  years",                            "minimum":  0,                            “min”:9,                          "type":  "integer"                  },                    "firstName":  {                          "type":  "string”   APIのデータ のkeyを変更。   短い方が良い よね!
  • 11. [Confidential] © 2013 Actcat, Inc. APIのレスポンス値を変更すると… 11 API API {          "properties":  {                  "age":  {                          "description":  "Age  in  years",                            "minimum":  0,                            “min”:9,                          "type":  "integer"                  },                    "firstName":  {                          "type":  "string”   役割毎にサーバ   分離パターン   Server-­‐Client   パターン   {          "properties":  {                  "age":  {                          "description":  "Age  in  years",                            "minimum":  0,                            “min”:9,                          "type":  "integer"                  },                    "firstName":  {                          "type":  "string”   え、いきなり   動かなくなっ たんだけど…
  • 12. [Confidential] © 2013 Actcat, Inc. 12 SOLUTION
  • 13. [Confidential] © 2013 Actcat, Inc. 簡単な3 Step と CI で問題発生を防止 1.  API仕様を固める(JSONも)   2.  サーバとアプリでテスト通信、   通信時のリクエスト・レスポンスを   ファイルに記録する   3.  記録したファイルを使った   テストコードをサーバ側に書く   +  上記のテストをCIでまわす   13
  • 14. [Confidential] © 2013 Actcat, Inc. 1. API仕様を固める(JSONも) SideCI内での一例: n URL:   l POST  "/task/register"   n Header:   l 指定なし n Body:     l JSONで下記を送付する   l id:  タスクID(タスク識別用) l type:  タスクタイプ(rubocop,   rails_best_practice,  brakeman,   bundle_outdated) 14
  • 15. [Confidential] © 2013 Actcat, Inc. 2. サーバとアプリでテスト通信、 通信時のリクエスト・レスポンスを ファイルに記録する 1.  サーバをローカルで起動(本番でも可)   2.  アプリからのリクエストをログ等で確認   3.  Header,  Request  Bodyなどを記録   4.  Responseなどを記録   15
  • 16. [Confidential] © 2013 Actcat, Inc. 記録した一例 (SideCI<-GitHub) {      "sha":  "4e73f2ef6d3534b45bbdf220f060d2628c5952e5",      "commit":  {          "author":  {              "name":  ”Koichiro  Sumi",              "email":  ”koichiro.sumi@actcat.co.jp",              "date":  "2014-­‐02-­‐14T09:46:50Z"          },          "committer":  {              "name":  "Koichiro  Sumi",              "email":  "koichiro.sumi@actcat.co.jp",            "date":  "2014-­‐02-­‐14T09:46:50Z”,   16 JSONファイルとして保存
  • 17. [Confidential] © 2013 Actcat, Inc. 記録した一例 (SideCI<-GitHub) request.url  "/api/v1/github_repositories/hook/”   request.headers['X-­‐GitHub-­‐Event']  =  'pull_request’   request.headers['X-­‐GitHub-­‐Delivery']  =  'cd36a080-­‐ b5a8-­‐11e4-­‐9e0d-­‐q1024663ce0’   request.headers['User-­‐Agent']  =  'GitHub-­‐Hookshot/e9dfd89’   request.headers['content-­‐type']  =  'application/x-­‐www-­‐form-­‐ urlencoded’   17 Requestをメモしておく。Responseも
  • 18. [Confidential] © 2013 Actcat, Inc. 記録したファイルを使った テストコードをサーバ側に書く n APIはおそらくController?なので、その Controllerのテストコードを書こう   n リクエストに先ほどメモしたリクエストヘッ ダーやボディを設定、クライアントを装って Controllerにリクエストを送るコード   n そのレスポンスが、サーバ・アプリ間で動作 確認を行った、正しく動作するレスポンスと 同一であることを確認する 18
  • 19. [Confidential] © 2013 Actcat, Inc. Rspecでどう書くか? SideCIの一例 let(:params)  {  {  "payload"  =>  payload_basic  }  }   let(:headers)  {  {              "User-­‐Agent"          =>  "GitHub-­‐Hookshot/2e7s9",              "Content-­‐Type"      =>  "application/x-­‐www-­‐form-­‐urlencoded",              "Content-­‐Length"  =>  "10163",              "X-­‐GitHub-­‐Event"  =>  "push"          }  }   let(:payload_basic  )  {  File.open('spec/basic.json').read  }   describe  "POST  'hook'"  do   …(一部省略)… 19
  • 20. [Confidential] © 2013 Actcat, Inc. テストをCIでまわす n 作ったテストはデプロイ前にかならずテ スト実行。面倒だったらCIで回しましょう   n CIサービスの一例   l Jenkins…はセットアップが面倒なので,   l SideCI,  CircleCI,  Wercker,  Shippable,   CodeShip,  TravisCI,  etc… 20
  • 21. © 2015 Actcat, Inc. 21 CIサービスならGitHub上でテストステータスを確 認、安心してマージ出来ます  
  • 22. © 2015 Actcat, Inc. + 可能ならコードレビューも 最後に頼りになるのは人力 n API変更時にはコードをプルリクエストでAPI 通信を行う先の担当のエンジニアにもレ ビューして貰いましょう   n うかつなAPI変更による障害防止には   l 仕様をしっかり決めて、APIを変えられなく する   l 変えるとテストがFailedして気づくようにす る   l テスト・実装共変えた場合は人力レビュー   この3つの手段がおすすめだと思います 22
  • 23. © 2015 Actcat, Inc. SideCI Customers GitHub  +  Railsな開発体制のプロジェクトで   ご利用頂いております     n 50以上のプロジェクトが毎週ご利用   n 1週間に500~1000回、SideCIがユーザの   プロジェクトのコードにコメント   23
  • 24. © 2015 Actcat, Inc. 24 https://www.sideci.com/