Featured image of post 単体テストは全部緑なのに締め処理が壊れる。1か所のテストで全体を守る【Pinch Point】

単体テストは全部緑なのに締め処理が壊れる。1か所のテストで全体を守る【Pinch Point】

部品ごとの単体テストは全部緑なのに、月末の締め処理を通すテストは1本も無い。影響が集まる1か所にテストを1本だけ置く締め所(Pinch Point)を、部品を1つずつわざと壊して確かめながら Perl で書きます。

連載 コード大工 (第12話 / 全12話)

第1幕: 検分 ── 夜明け前の帳場

今朝は、私のほうが先に帳場にいた。

素屋根の隙間は、まだ灰色だった。畳に、光の筋は落ちていない。柱の影と、柱と柱のあいだの暗さの区別が、つかないほどだ。夜のうちに冷えた畳の匂いが、足元から上がってくる。文机の上の灯りだけをつけて、私は野帳を開いた。クロベさんもナギさんも、来ていなかった。素屋根の下に、人の気配が無い時間は、一日のうちで、この朝の一時間ほどしかない。

この野帳は、工事が始まった日から付けてきた控えだ。工程ごとに節が分かれていて、一つの節の終わりには、その日の普請控を写してある。節の縁を、一つずつ折ってあった。頁を繰りながら、折った縁を数えた。十一あった。

昨日の夕方、店主さんに訊かれた。素屋根が外れたあと、勘定のことは、あなたに訊けばいいのですね、と。私は、はい、と答えた。答えてから、何を見て大丈夫だと言うのか、自分が言えないことに気づいた。

野帳の節ごとに、検めの置き場が一つずつある。端末の中で、工程の名前の付いた別々の置き場に分かれていて、走らせ方も、野帳の節の端に控えてあった。

1
2
3
$ prove -l t
$ prove -Iafter/lib t/settle_characterize.t t/settle_provision.t
$ prove -Ilib t

置き場ごとに、-Iの付け方が違う。私は端末を起こして、十一の置き場を、上から順に自分で走らせた。一つ走らせるたびに、出力の最後の行を目で追って、野帳の節の端に印を付ける。緑。緑。緑。端末の出力が流れるたびに、鉛筆が紙を擦る音がした。置き場を替えるたびに、置き場の名前を打ち直して、走らせ方を、野帳の端で確かめる。回り終えるまでに、灯りの下の影の向きが、少し変わった。二十四本が、全部緑だった。

そこで、手が止まった。

緑は十一あった。けれど、店主さんに、これを何と言って見せればいいのかが、私には分からなかった。

窓の外が白んで、素屋根の隙間から、細い筋が畳へ落ちた。鉋屑が、その中をゆっくり降りてくる。

クロベさんが、帳場の奥を抜けて、梁の下に立った。毎朝、建物全体を見上げる人だ。何も考えずにいられる、一日で唯一の時間なのだと、前に聞いたことがある。私は、その時間が終わるまで、声をかけなかった。ナギさんが道具箱を提げて来て、私の横を黙って通り、自分の場所に座った。

見上げが終わったところで、私は先に口を開いた。

「十一の置き場を、全部走らせました。二十四本、全部緑でした」

クロベさんは、頷かずに、私のほうを見た。

「日の締めの検めは、これまでも緑でした。それでも、店主さんに、大丈夫です、と言うのに、私は何を見たと言えばいいのか、分かりません」

クロベさんは、しばらく黙っていた。

「十一の検めは、十一の部品を、それぞれの棚の中で確かめています。部品を組んで、月末の締めを通した検めは、まだ一つもありません」

私は、野帳の頁を一枚繰った。

第2幕: 手が入らない ── 十行の頼み

私は、野帳の節を、上から順にめくっていった。各節の終わりに、その日に手を付けず、次へ送ると決めたことが書いてある。その欄を、読んだ。

「一月ぶんだけの検め。ずれが間違いか決まりかの判断。税率が変わったときの書き換え。値札の検め。コンストラクタが本物のファイルに触れるかの見極め。取り込む箇所が増えたときの手。先月の三角の書き方。大福帳が開けないときの振る舞い。待ち箱の先の印字機。手数料と報告の二段を割るかどうか」

十行あった。

「工事が終わったあとに、私のところへ来る頼みです。これが建物のどこに届くのか、一枚に描いてもらえませんか」

ナギさんが、顔を上げた。

「描くのはナギに任せます」

そう言うと、クロベさんは砥石を取り上げ、窓のほうへ体を向けた。それきり、紙を一度も見なかった。砥石の音だけが、帳場に続いた。

ナギさんは、描く前に、一つ確かめた。税率の関数(Shop::Taxのrate)を八分に書き換えて、十一の置き場を、走らせ直した。赤になったのは、値札の置き場だけだった。ほかの十は、緑のままだった。

1
2
3
# Subtest: 通常の税率のとき
    not ok 1 - 税率10%で1000円の税込価格が1100円になる
not ok 1 - 通常の税率のとき

決算の置き場も、緑のままだ。私は、そこが気になった。

「税率が変わっても、月末の締めは、追いかけないんですか」

「追いません。呼ぶ側に、0.1と書いてあります」

窓に向けた背中のまま、クロベさんが短く答えた。ナギさんが、決算を呼んでいる行を画面に出した。

1
my ($net, $report) = Daikoku::Kessan::settle($sales, 0.1, 45);

税率が、税率の関数の値でなく、呼ぶ行に直接書いてある。関数の値を書き換えても、この行には影響しない。

ナギさんは、紙を一枚取って、鉛筆を持った。鉛筆の芯を、爪の先で一度整えてから、紙の左の端に当てた。

泡と矢印で描く。変わる所を泡で囲み、それが届く先へ矢印を引く。床板を上げた日に見たのと、同じ描き方だった。あの日の図は、今日動かす分だけを描いていた。今日の紙には、その絞りがない。

左の端に、十の頼みが並んだ。真ん中に、泡が五つ。税率の関数、運賃、決算、大福帳、知らせ。頼みから、その頼みが動かす泡へ、矢印が伸びる。泡からは、結果の出る所へ、右へ向かって矢印が伸びていく。

運賃、決算、大福帳、知らせ。四つの泡の矢印は、右へ向かううちに、だんだん紙の同じあたりへ寄っていった。月末の締めを一度通したとき、帳面の行と知らせの文が出てくる、右端の高さだ。

税率の関数の矢印だけが、寄らなかった。決算へは伸びず、下の隅へ向かう。ナギさんは、その隅に、値札の泡と、印字機の泡を、灰色の鉛筆で描き足した。税率の矢印は、値札の泡へ向かっていた。印字機は、待ち箱の先で紙になる所だ。寄っていく四つの矢印とは、別の方角にある。

十のうち、三つは矢印にならなかった。一月ぶんの検めと、ずれの判断と、取り込む箇所。ナギさんは、その三つを、紙の余白に書き留めた。

右端に、矢印が寄っていく。その先に、泡が無かった。

ナギさんは、泡の輪郭を引いた。紙の端から端まで、鉛筆が走る音が続いていたので、止まったときの静かさが、はっきり分かった。中に書く名前が、浮かばないのだ。月末の締めを一度通す所を指す名前が、帳場のコードのどこにも無い。帳面と決算と知らせは、別々の三本の口から呼ばれていて、それをまとめた口は、どこにも無かった。

ナギさんは、鉛筆を紙の上に置いた。

砥石の音が、止まった。それまで、一定の間を置いて続いていた音が、途中で切れた。

音の止んだ帳場で、ナギさんの紙を、野帳の一頁に写した。左の端に、十の頼みを並べた。矢印の出た七つは、細い墨の線で泡へ引いた。矢印にならなかった三つは、線を引かず、頁の余白に書き留めた。泡は実線にして、この図で線の寄らない値札と印字機だけを、薄い墨の破線にした。運賃と決算と大福帳と知らせから右へ引いた線は、太くした。税率の関数から出る線だけは、細く下の隅へ向けた。太い線が寄る先には、点線で輪郭だけを写した。

野帳に描いた影響の図。左の端に、工事が終わったあとに来る十の頼みが並ぶ。そのうち七つからは細い線の矢印が泡へ伸び、一月ぶんの検め・ずれの判断・取り込む箇所の三つは、線を持たず余白に書き留められている。真ん中の泡は五つで、税率の関数、運賃、決算、大福帳、知らせ。運賃・決算・大福帳・知らせの四つから太い線が右へ伸び、紙の右端の同じ高さへ寄っていく。税率の関数の線だけは細く、下の隅の値札の泡へ向かう。値札と、別方角にある待ち箱の先の印字機の泡は、灰色の破線で描かれている。太い線が寄る先には、点線の輪郭だけの泡があり、中は空で、何も書かれていない。細い点線の引き出しで、月末の締めを一度通したときに帳面の行と知らせの文が出てくる高さだと注記されている。

第3幕: 手立て ── 一か所に置く

クロベさんが、砥石を置いて、卓のほうへ向き直った。

「工事が終わったあとに来る頼みの届く先が、細く集まっている所があります。そこに検めを一つ置けば、集まる分については、少ない検めで、広い範囲の変化に気づけます。本では、Pinch Pointと呼ばれています。日本語の本では、絞り込み点と訳されています」

本が言っているのは、三つだと、クロベさんは続けた。集まる所は、頼みの組で決まる。組が変われば、その一か所も変わる。広く集めすぎると、行き詰まる。もう一つ、そこに置いた検めは、あとで部品ごとの検めが揃えば、消えてよい足場だということ。

「変更の近くに置く検めは、原因に近い。集まる所に置く検めは、少なくて済みますが、原因からは遠いです」

「その一か所は、どうやって決めるんですか」

私が訊ねると、クロベさんの視線が、野帳に落ちた。

「あなたの野帳の十行です。工事が終わったあとに来る頼みの組で決まります」

十行は、私が自分の手で書いてきた欄の写しだった。

「ナギ。月末の締めの手順を、一本の口に書き写してください。新しい計算は、持たせません」

ナギさんは、端末に向かった。書き終えるのに、長くはかからなかった。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package Choba::Shime;
use strict;
use warnings;
use Shop::Tax;
use Delivery;
use Daikoku::Kessan;
use Nikai::Daifuku;
use Omote::Shirase;

# 月末の締めの入口。新しい計算は持たない。店主の手順(部品を呼ぶ順番)を書き写しただけ。
# 書き写しでなく決めたことは一つだけ: 税率は kessan_run.pl のように 0.1 と手で書かず、税率の関数(Shop::Tax の rate)から取る。
sub run {
    my (%arg) = @_;
    my $rate = Shop::Tax::rate();
    my $fee  = Delivery::calc_fee(@{ $arg{parcel} });
    # settle は list 文脈で受ける(scalar だと report だけが返る)
    my ($net, $report) = Daikoku::Kessan::settle($arg{sales}, $rate, $arg{day});
    my $daifuku = Nikai::Daifuku->new(path => $arg{path}, ledger => $arg{ledger});
    $daifuku->post($arg{date}, '日計', $net);
    $daifuku->post($arg{date}, '配達', $fee);
    my $shirase = Omote::Shirase->new(line => $arg{line});
    $shirase->close_month($report);
    return { net => $net, report => $report, fee => $fee };
}

1;

運賃、決算、大福帳、知らせ。部品を呼ぶ順に、行が並んでいるだけだ。パッケージ名のShimeは、勘定の締めのローマ字で、この口は、月末の締めを一本にしたものだ。ここでいう入口は、この口のことを指す。本番の組み立てで呼ぶ書き方も、一つの呼び出しで済む。

1
2
3
4
5
6
7
8
my $r = Choba::Shime::run(
    sales  => $sales,
    day    => 45,
    parcel => [6, 12, 1],
    date   => '2026-09-30',
    path   => (shift // 'daifuku.txt'),
    line   => Omote::Fumi->new,
);

「税率だけ、書き写しではありません」

ナギさんが、自分から言った。

「呼ぶ行に0.1と手で書いてあったところを、税率の関数から取ります。今日の値は、同じです。税率の関数の値を変えたら、月末の締めも、一緒に変わります」

決算の呼び出しだけが、八分に追いかけなかった。入口が取るようになれば、追いかける。

私は、野帳に二行を分けて書いた。書き写したこと。決めたこと。

「書き写しと、決めたことは、分けて控えてください」

クロベさんが、頷いた。

部品は、元の置き場から写しただけで、一字も変えていない。大福帳の一つだけは、手を入れた後の形を本体の名前に戻したので、packageの一行が違う。

1
2
3
4
5
$ diff DaifukuAfter.pm lib/Nikai/Daifuku.pm
1c1
< package Nikai::DaifukuAfter;
---
> package Nikai::Daifuku;

入口に置く検めは、最初の工程と同じ手順で、今の出力をそのまま書き取る形で書いた。違うのは、期待値を、入口を通さずに採ったことだ。部品を、店主さんの手順のとおりに手で順に呼んで、出てきた結果を書き取った。入口の結果が、それと一致するかを見る。

入力は九件。決算の日に使った普通の日の明細に、境目を踏む入力を足した。三件を並べる。

名前日数荷(重さ・距離・繁忙期か)戻り値(net/fee)
普通の日(現金500・掛800・掛900は取消し・掛400)456, 12, 11431 / 1000
日数31・距離10の境目316, 10, 15247 / 750
空の明細100, 0, 00 / 300

残りの六件は、日数30と31、重さ5、距離3と10の境目を踏む入力と、掛売りの上乗せと引当の上限の入力だ。見る所は三つ。戻り値、大福帳に書かれた行、知らせの名前と文面。大福帳には、検め用の帳面(書き先が文字列になる、メモリ上のファイルハンドル)を入れた。知らせの文面まで検めるので、名前と引数を控える代役Spy::Lineを入れた。前に使ったStub::Lineは、名前しか控えないからだ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
for my $i (0 .. $n - 1) {
    my ($name, $sales, $day, $parcel) = @{ $in[$i] };
    my $e = $expected->[$i];
    open my $mem, '>>', \my $buf or die $!;
    my $spy = Spy::Line->new;
    my $r = Choba::Shime::run(sales => $sales, day => $day, parcel => $parcel, date => '2026-09-30', ledger => $mem, line => $spy);
    close $mem;
    is_deeply($r, $e->{ret}, "$i $name: 戻り値");
    is($buf, $e->{ledger}, "$i $name: 帳面");
    is_deeply([ $spy->calls ], $e->{spy}, "$i $name: 知らせ(名前と文面)");
}

$nは入力の件数で、ふだんは九だ。このほかに、税率の関数をlocalで検めのあいだだけ八分に差し替えた入力を、九件分、戻り値と帳面の二つの見方で通す。値札の日に覚えた手だ。検めの先頭の一行で、この代役が知らせ口の三つの名前を全部持つことを、Omote::Sunpo::missingに通して確かめてある。寸法を定めた日に書いた検めが、ここでも効いた。

1
2
3
4
5
$ prove -Ilib t/shime.t
t/shime.t .. ok
All tests successful.
Files=1, Tests=50,  0 wallclock secs
Result: PASS

五十本の主は、九件に三つの見方で通す二十七本だ。残りは、税率を八分に差し替えた入力、帳面が開けないとき、代役と読み込みの確認になる。緑だった。

「宮大工の言い方では、締め所です」

クロベさんが言った。この入口が、締め所になる。勘定の締めとは字が同じだが、別の語だ。ここでは、工事が終わったあとに来る頼みの届く先が、細く絞られて集まる所のことを指す。これからは、この入口に置いた検めを、入口の検めと呼ぶ。

私は、野帳の「次の工程へ送ること」の欄に、手を置いた。

「一か所だけ検めて、全部を確かめたことになるんですか」

引き受ける側として、店主さんに大丈夫と答えられるのは、確かめた範囲だけだ。この入口を検めて緑になったとして、確かめたことになるのは、どこまでなのか。

「なりません」

クロベさんは、短く答えた。

「だから、壊して確かめます」

ナギさんは、手を伸ばしかけて、止まった。クロベさんの顔を見て、頷かれてから、手を伸ばした。

第4幕: 検め ── 壊して、赤になるかを見る

壊して確かめる、とは、部品を一か所だけわざと壊して、検めがそれに気づくかを見ることだ。壊した版は、コピーしたツリーの中で作る。本物のlibには、触れない。同じ壊し方を、その部品の元の置き場の検めにも当てて、結果を並べる。

ナギさんが、四十七の壊し方を、一つずつ入れて走らせた。同じ結果になるはずの書き換え(//を||に替えるなど)が三つ混ざっている。残る四十四が、本当の壊しだ。そのうち八つを、表にした。壊して確かめるのは、検めが本当に何かを守っているかを、検める側から確かめるためだ。

壊し方入口の検めその部品の元の検め読み方
税率の関数を八分に書き換える赤赤(値札の置き場だけ)税率の書き換えを、入口の検めが見張っている
30日超の境目の>を>=に九件なら赤、先頭の一件だけなら緑赤境目を踏む入力が要る
手数料と報告の順を、誤って割る赤赤割る作業の見張りになる
入口が知らせを、帳面より先に出す赤(帳面が開けないときの検めで)部品側に検めが無い入口の配線は、入口の検めだけが見張る
重さの境目の> 5を>= 5に赤緑部品の検めが足りない
負の金額の△を-に緑赤入口が入れない値
close_dayの知らせを消す緑赤入口が呼ばない関数
値札が税を足さない緑赤入口を通らない部品

四十四のうち、入口の検めが赤にしたのは三十四。赤にしなかったのは十だった。

入口は、部品を呼ぶ順を書き写しただけだ。だから、部品を壊せば赤になるのは、当たり前に見える。当たり前でないのは、二つある。部品の検めが緑のままなのに、入口の検めだけが赤になる壊し方。それから、入口の配線そのものを壊したとき、元の置き場の検めには、見張る相手がいない。表の四行目と五行目が、それだ。

二行目は、件数の実演だ。検めを日数45の一件だけにすると、30日超の境目は、踏まれないので緑のままだ。九件に戻すと赤になる。こういう壊し方は、全部で九つあった。30日超の境目、重さの境目、距離の境目、遠方の境目、税の端数、期日の二つの率、上乗せの条件と額。件数ではなく、境目を踏む入力が効く。

六行目から八行目が、赤にならなかった所だ。理由は三つに分かれた。入口が入れない値域(負の金額は、入口から一度も入ってこない)。入口が捨てる値(大福帳のpostの戻り値、知らせの控え)。入口が呼ばない関数と、入口を通らない部品(close_day、値札)。つまり、赤にならなかった十は、入口の検めの穴ではなく、入口の検めの範囲の外だ。

「赤にならない所が、あるんですね」

私が言うと、クロベさんは、一度だけ頷いた。

「あります。それを先に言うのが、締め所の仕事の半分です」

五行目は、別の話だった。入口の検めは赤なのに、その部品の元の検めは、緑のままだった。ナギさんが、運賃の置き場の検めを開いた。境目を踏む入力が、そこには無かった。重さの境目のほか、距離の境目、知らせの文面、帳面が開けないときの言葉の三つが、同じように、元の検めには引っかからなかった。

入口の検めが赤になって、部品の検めへ降りても、緑のまま、原因が見つからない。そういうことが、この四つで起きた。入口の赤は、部品の検めが足りない、という知らせにもなる。

だから、検めは二段になる。一段目は、入口の検めで、全体に届いたかを見る。赤なら、二段目の部品の検めへ降りて、どの部品かを探す。二段目が、緑のまま空振りするときは、その部品の検めが足りない。表の五行目が、それだ。

次に、この検めが言えることと、言えないことを、野帳の十行に当てた。

入口を通って、出力に載り、固定入力が踏む変化には、気づける。それが、入口の検めが言えることだ。

持ち越し入口の検めは根拠
一月ぶんだけの検め肩代わりしない(野帳へ送る)九件の入力しか見ない。足した分だけ広がる
ずれが間違いか決まりかの判断野帳へ送る赤は、変わった、としか言えない。判断は人
税率の書き換え肩代わりする入口が税率の関数から取るので、八分で赤になる
値札の検め野帳へ送る値札は入口に載らない
本物のファイルに触れるか肩代わりする帳面を見る検めで、触れる壊し方が赤になる
取り込む箇所が増えたとき野帳へ送る入口は取り込みの箇所を数えない
先月の三角の書き方野帳へ送る入口は正の金額しか積まない
大福帳が開けないとき肩代わりする(止まり方と順序)何と言って止まるべきかは野帳
待ち箱の先の印字機野帳へ送る入口が読み込まない
手数料と報告の二段割る作業の見張りは肩代わり、割るか否かは野帳へ誤った割り方は赤になる

範囲の外も、先に言っておかなければならない。日の締めは、入口が写していない。九件以外の入力は、見ていない。入口を通らない部品と、入口が捨てる値は、見えない。本物の大福帳、書状が店主に実際に届くかも、見ていない。これは、九件を一度動かした話だ。毎日使い続けている店の中で何が起きるかは、この九件からは分からない。

私は、野帳の六つ目の節を開いた。前に私が書き残した宿題が、そこにある。通る場所が本当に一つと言えるのはどんなときか、というものだ。ここでは、部品を呼ぶ所が、入口だけと言えるのか、という問いに引き直せる。

「呼ぶ所は、一つ、と言ってよいんですか」

ナギさんが、素の名前で、探した。

1
2
3
4
5
6
$ grep -rn 'Shop::Tax::rate' lib bin | grep -v '^lib/Shop/Tax.pm'
lib/Choba/Shime.pm:14:    my $rate = Shop::Tax::rate();
lib/PriceTag.pm:8:    my $tax = int($base_price * Shop::Tax::rate());
$ grep -rn 'Nikai::Daifuku->new' lib bin
lib/Choba/Shime.pm:18:    my $daifuku = Nikai::Daifuku->new(path => $arg{path}, ledger => $arg{ledger});
bin/nikai_close.pl:7:my $daifuku = Nikai::Daifuku->new(path => $DAIFUKU_PATH);

検めの側を除けば、どちらも呼ぶ所は二つだった。税率の関数は、入口と値札から。大福帳は、入口と、帳面だけを書くbinの一本から。

クロベさんが答えた。

「言えません。言えるのは、木の中の全部を素の名前で探して、呼ぶ所が入口だけだったときです。それでも、名前を組み立てて呼ぶ所は、探しても出てきません。木の外のものは、数えられません」

私は、野帳に、二行足した。入口のほかに、呼ぶ所が二つあること。木の外は、外に聞くしかないこと。

最後に、消し方の話があった。

「この検めは、重さと距離の境目、知らせの文面、帳面が開けないときの言葉、この四つの部品の検めが揃うまで、消さないでください。元の検めに引っかからなかった四つです。それが揃えば、入口の検めの重なる分は、消せます。入口の配線の検めは、入口がある限り残します。入口が部品を正しく呼んでいるかは、部品の検めには見えないからです」

そのあと、クロベさんは、何も言わなかった。ナギさんが、端末の席から立った。空いた席に、私が座った。

私は、税率の関数を、八分に書き換えた。入口の検めを走らせる。赤だった。帳面の行と、戻り値の数が、期待と違う。値札の検めも、赤。決算の置き場は、緑のままだ。関数を元に戻して、走らせ直した。緑だった。

野帳に、赤になったときの順を、書いた。

クロベさんが、一度だけ訊いた。

「赤になったら、どうしますか」

私は、野帳の行を見ながら、答えた。

「入口の検めが赤になったら、何が変わったかを読みます。戻り値か、帳面か、知らせか。次に、部品の検めを順に走らせて、赤の部品を探します。部品が全部緑なのに、入口だけが赤なら、入口の配線か、部品の検めが足りません。意図した変更なら、期待値を書き換える前に、店主さんに確かめます」

「それでも、どの部品か特定できなかったら」

「外へ頼みます。野帳と控えを添えて。野帳を見せれば、別の大工さんにも、今日までのことが伝わります」

クロベさんは、答えなかった。砥石を持った手を、膝の上に置いた。ナギさんは、立ったまま、道具箱の蓋の留め金に指をかけて、動かなかった。

翌朝は、昨日より早く起きた。

素屋根の隙間は、まだ灰色だった。梁の下に、クロベさんが立っていた。私は、梁の下の、クロベさんの隣に立った。これまで、見上げる背中を、後ろから見ていた。同じ高さから見上げるのは、初めてだった。

隙間の筋が、畳の上を、ゆっくり渡っていく。梁の継手に、細い光が斜めに当たる。鉋屑が、その中を降りてくる。

「今日の形は、このまま残しておいてください。直す前の形を残しておかんと、直ったかどうかが言えません」

クロベさんが、見上げたまま言った。

最初の日に、この帳場で聞いたのと、同じ言葉だった。

二人は、道具箱を土間へ運び出した。鉋と鑿と墨壺が、箱に収まっていく。蓋を閉じるたびに、留め金が、短く鳴った。ナギさんは、運び出す前に、端末の脇へ、紙を一枚貼っていった。土間の石を、箱を提げた足音が、遠ざかっていく。二人の口から、言葉は出なかった。

足音が聞こえなくなってから、私は端末の脇の紙を見た。一行だけ、書いてある。

1
prove -Ilib t/shime.t

私は、その一行を、端末に打って、走らせた。

1
2
3
4
5
$ prove -Ilib t/shime.t
t/shime.t .. ok
All tests successful.
Files=1, Tests=50,  0 wallclock secs
Result: PASS

緑だった。店主さんに訊かれたら、今日からは、この一行を走らせて、答える。野帳を閉じた。素屋根の下に、鉋屑の匂いが、薄く残っていた。隙間の筋が、畳に落ちていた。私は、灯りを消した。

普請控

  • 見立て: 十一の置き場の検めは、部品ごとには緑でも、月末の締めを通した全体を一度に確かめる手立てが無かった。税率の関数を書き換えても、決算の検めは赤にならなかった。
  • 手を入れた所: 締め所(Pinch Point。邦訳では絞り込み点)に検めを一つ置いた。月末の締めの手順を一本の入口Choba::Shime::runに書き写し、九件の入力で、戻り値と大福帳の行と知らせを書き取った。部品を四十四通りに壊して、その検めが気づくかを確かめた。
  • 触っていない所: Shop::Tax・Delivery・Daikoku::Kessan・Nikai::Daifuku・Omote::Shiraseの五つの部品は、元の置き場から写しただけで、一字も変えていない(大福帳だけ、手を入れた後の形を本体の名前に戻したpackageの一行のみ)。binの三本、値札PriceTag、日の締めのclose_day、待ち箱の先の印字機、先月までの帳面の中身、書状が店主に実際に届くか、十一の置き場の検めそのもの。
  • 次の工程へ送ること: 野帳へ送った七つ(一月ぶんだけの検め、ずれの判断、値札、取り込む箇所、先月の三角、印字機、二段を割るか)。重さと距離の境目、知らせの文面、帳面が開けないときの言葉の部品の検めを足すまで、入口の検めは消さない。税率が変わるとき、値札と月末の締めを一緒に動かしてよいかは、店主さんと決める。
  • 私が引き受けたこと: 入口の検め一本を自分で走らせ、赤なら部品の検めへ降りて原因を探し、特定できないときだけ、野帳と控えを添えて外へ頼む。棟梁を呼ばなくてよい。自分の手で税率の関数を書き換えて赤を出し、赤を読んで順を書き、訊かれて答えた。
comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。