「チーム開発に役立つstubcell」ってタイトルでCodeGrid 2周年パーティでLTしてきた。
CodeGrid 2周年パーティでLTしてきました。
2周年おめでとうございます!!
TL;DR
発表資料
stubcell 概要
いわゆるJSONを返すことに特化したstubサーバーです。
チームで開発する時に、APIサーバー、クライアントサイド、websocketサーバーといった感じに複数の役割を複数の人数で請け負って同時並行開発することが多く、APIのエンドポイントがなくてもクライアントサイドやwebsocketでも開発できるようにするためにstubcellを作りました*1。
また複数人で同時並行的に開発するとAPIの仕様を決めるのにコミュニケーションコストがかかるため、Stub定義ファイルが仕様のエビデンスとして残ることでコミュニケーションの補助になることも担っています。
stubcell 特徴
stubcell 使い方
詳細な仕様はここに記述されています。
gulpから使うときの例を紹介します、もちろんgruntからも使えます。
事前にgulpはインストールしておくとして、下記のような感じでインストールします。
$ npm install gulp-stubcell -D
■ gulpでの使い方
以下の様な感じで使える。
var gulp = require('gulp'); var stubcell = require('gulp-stubcell'); var connect = require('gulp-connect'); var proxy = require('proxy-middleware'); var url = require('url'); gulp.task('connect', function() { connect.server({ root: ['build'], port: 9000, livereload: true, // gulpでmiddlewareを使う、/testに来たらstubcellに渡す。 middleware: function(connect, o) { return [ (function() { var options = url.parse('http://localhost:3000/test'); options.route = '/test'; return proxy(options); })() ]; } }); }); // stubcellは起動するだけ gulp.task('stubcell', function() { stubcell.start(); }); gulp.task('default', ['connect', 'stubcell']);
■ APIエンドポイントの書き方
entryポイントはyamlで書けます。
といってもほぼ最小限のことしか書きません。APIのURL、methodその時のstatusコードを書くだけで済みます。
- # 基本的にリクエストURLとmethod、statusコードを書くだけ # 期待するjsonはファイルパスで /test/greetings_get.json を勝手に読みに行く request: url: /test/greetings method: GET response: status: 200 - request: url: /test/yosuke method: GET response: status: 200 # 期待するjsonのファイルパスを明示するときはfileプロパティを作る。 file: test/aaa/bbb.json
stubbyと違い、JSONを返すことだけに特化してるので、設定が少なくて済みます。
■ jsonの例
test/greetings_get.jsonの例、stubで返すjsonにコメントが入れられる。
// お祝い用のjson { // お祝いの言葉を入れる "message" : "congrats 2nd anniversery!!!" }
JSONにコメントが書けることで視認性が上がりますし、APIの仕様を定義する時にもある程度このstubの定義ファイルが仕様の代わりになるので、APIサーバー開発者と他の開発者のコミュニケーションの補助にもなります。
実行結果
stubcell起動前:
stubcell起動後: