Perl と Moo で値オブジェクト(Value Object)を作り、Test2 を使ったテスト駆動開発(TDD)で仕上げていく全5回の連載です。題材は JSON-RPC 2.0 の仕様で、金額を表す Money から始めて、Request/Response、エラー処理と境界値テストまで順に積み上げます。
各回は単独でも読めますが、第2回で設計した値オブジェクトを第3回以降で実装していく作りなので、通して読むなら第1回からが早道です。このページは目次を兼ねた案内板です。入口は「どこから読むか」で、困りごとが決まっているなら「困りごとから探す」で、順に追うなら「全話一覧」で選んでください。
対象は、Perl の基本文法(変数・サブルーチン・リファレンス)が分かり、cpanm などでモジュールを入れられる方です。Moo・Test2・Type::Tiny の使い方は本文で説明するので、先に学んでおく必要はありません。
どこから読むか
- 第1回 — 値オブジェクトを初めて聞くなら。金額を数値のまま渡すと何が起きるかから始め、Money クラスを Moo で書く回
- 第3回 — 値オブジェクトは分かっていて、TDD の進め方を知りたいなら。失敗するテストを先に書き、最小の実装で通して整える流れを、1つのクラスで一巡する回
- 第5回 — エラー処理と境界値テストの書き方を知りたいなら。第4回までのコードを使うので、前の回は必要に応じて引きながら
困りごとから探す
数値や文字列のまま渡して、ありえない値が通ってしまう
仕様書をコードに落とすとき、何をどこで守るか決められない
テストを書いているのに、バグがすり抜ける
エラーのときだけ、おかしな値が紛れ込む
- 第5回 — エラー応答に result が混じる、範囲外のエラーコードが通る
全話一覧
- 第1回 金額をただの数値で渡すと、円とドルを足しても止まらない。値を型に包んで守る【値オブジェクト】
- 第2回 仕様書のMUSTを、コードのどこで守ればいいか決められない。仕様から値オブジェクトを設計する【JSON-RPC 2.0】
- 第3回 テストを後から書くと、実装に合わせた甘いテストになる。失敗するテストから書く【Red-Green-Refactor】
- 第4回 値を束ねたとたん、省略してよい項目の扱いが崩れる。値オブジェクトを組み合わせる【複合値オブジェクト】
- 第5回 エラー応答にresultが混じっていても作れてしまう。ありえない値を生成時に止める【境界値テスト】
