読者です 読者をやめる 読者になる 読者になる

「チーム開発に役立つstubcell」ってタイトルでCodeGrid 2周年パーティでLTしてきた。

CodeGrid 2周年パーティでLTしてきました。
2周年おめでとうございます!!

TL;DR

  • stubcellというjsonを返すことに特化したstubサーバーを作りました
  • 内部的にjson5を使うことで定義ファイルにコメントを書くことができ、開発者間のコミュニケーションの補助になる
  • grunt, gulpからstubサーバーを使うことができるため、フロントエンドタスクランナーと相性が良い

発表資料

stubcell 概要

いわゆるJSONを返すことに特化したstubサーバーです。

チームで開発する時に、APIサーバー、クライアントサイド、websocketサーバーといった感じに複数の役割を複数の人数で請け負って同時並行開発することが多く、APIのエンドポイントがなくてもクライアントサイドやwebsocketでも開発できるようにするためにstubcellを作りました*1

また複数人で同時並行的に開発するとAPIの仕様を決めるのにコミュニケーションコストがかかるため、Stub定義ファイルが仕様のエビデンスとして残ることでコミュニケーションの補助になることも担っています。

stubcell 特徴

  • JSONを返すことに特化しているので、設定が簡易的。
  • APIのレスポンスファイルとしてJSON5を使える。
  • grunt, gulpのpluginがあり、フロントエンドのタスクランナーと相性が良い。

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起動前:
f:id:yosuke_furukawa:20140511213146p:plain

stubcell起動後:
f:id:yosuke_furukawa:20140511213059p:plain

stubcell examples

上で書いたstubcellの例は以下に置いておきます。

gulp-stubcellの利用例

*1:万能細胞(STAP細胞)のように使いやすく簡単になるようにという思いを込めました :P