第29話 失敗の日
翠の月十四日。
朝、工房の戸を引いたわたしは、作業台に布をかぶせたままの試作を見つけた。
昨日と一昨日は家の手伝いで工房に来られず、前回の続きで少しずつ組み続けた水時計の原型が、布の下にそのまま眠っている。
「親方さん、お邪魔します」
「おう」
グスタフは火床の前で鎚を握り直したまま、こちらをちらりと見ただけだった。
わたしは作業台に近寄って、布を持ち上げた。
前回の自分が組んだ水時計の原型がそのまま残っている。
小瓶。木栓。銅の受け皿。
息を吸って、小瓶に水を満たした。
ぽつ——
最初の一滴が落ちた。
ぽつ、ぽつ、と続けて二滴。
それから——十秒近く、何も落ちなかった。
(……ん?)
そして、ぽつ、ぽつ、ぽつ。今度は連続で三滴。
また間が空いて、ぽつ。
(……不具合だ)
胸の奥がきゅっと冷たくなった。
前回の終わりには、ちゃんと一定間隔で落ちていたはずだった。
(……でも、どこの)
わたしは水滴を見つめながら、頭の中で変数を並べ始めた。
◇◇◇
——変数を一つずつ。
前世の長いデバッグ経験で、わたしが叩き込まれた原則だった。
原因が分からない不具合に出会ったら、一度に色々試してはいけない。
一つだけ変えて、結果がどう動くかを観察する。
頭の中に、思いつく要因を列挙していった。
一つ。木栓の穴の大きさ。
二つ。小瓶の中の水の量。減ると、水を押し出す力が変わるはずだ。
三つ。銅の受け皿の傾き。
(……三つ。前世なら五分で切り分けられる)
(——でも今のわたしには、ログがない。手と眼だけだ)
胸の奥がじわりと焦り始める。
焦りは、いけない。
(——焦るな)
自分に言い聞かせて、深く息を吸う。
一つずつ。順番に。
わたしは木栓を引き抜いて、まず予備の木栓と交換した。
水を注ぎ直す。
ぽつ、ぽつ。長い間。ぽつ、ぽつ、ぽつ。
(……変わらない)
木栓のせいではない。
そう判断するまでに、前世なら一瞬だったはずの確信が、今は何分もかかった。
焦りがまた頭をもたげそうになる。
(——焦るな。次)
二つ目に取り掛かろうとして、わたしは銅の受け皿に手を伸ばした。
その瞬間。
ぱしゃん——
肘が縁に当たった。
銅の受け皿が傾いて、中の水が作業台に広がった。
「あ……」
水は木の板に染み込んで、わたしの試作の足元まで届いた。
小瓶を慌てて持ち上げる。指先がふるえた。
(……今日のわたしは、なんでこんなに不器用なんだろう)
布で水を拭きながら、わたしは唇を噛んだ。
八歳児の腕は短い。肘の位置の感覚が、前世の身体とまるで違う。
頭では「右腕をここまで」と命令しているのに、実際の腕はそこより十センチ手前で何かに当たる。
ガン、ガン、と背中で鎚の音が続いていた。
グスタフは何も言わない。
ただ、わたしが拭き終えるのを待つように、鎚の間隔がほんの少しだけ長くなった気がした。
◇◇◇
午前のうちに、わたしは木栓を一度落とした。
小さな木の塊は工房の床を転がって、火床の脇の影の中に消えた。
わたしは膝をついて、暗がりに目を凝らした。
八歳児の視力でも、灰と煤の色に紛れた木栓は見つけにくい。
「これか」
グスタフの太い指が、わたしより先にそれをつまみ上げていた。
振り向くと、親方はいつの間にか火床の前を離れて、わたしの真横にしゃがんでいた。
「あ、ありがとうございます」
「ふん」
グスタフは木栓をわたしの手のひらに置いて、また火床に戻っていった。
それだけだった。
わたしは木栓を握り直して、作業台に戻った。
胸の奥が、ほんの少しだけ温かかった。
◇◇◇
昼を過ぎた。
わたしは小瓶の水の量を一定に保つ仕組みを考えていた。
小瓶の水が減ると、水滴を押し出す力が弱くなる。だから後半になるほど水滴が遅くなる。
これが不規則さの最大の原因に違いない——というのが、午前中の検証で絞り込んだ仮説だった。
(……前世のわたしなら、五分で結論)
(……ここでは、半日かかった)
それでも諦めなかった。
焦りは精度を下げる。早く済ませようとした作業ほど、あとで作り直しになる。
ふいに、背後でガランと音がした。
グスタフが鎚を作業台の縁に置いた音だった。
足音が近づいてきた。
親方は木の杯に水を一杯満たして、わたしの作業台の隅にことりと置いた。
「飲め」
「あ……ありがとうございます」
わたしは両手で杯を受け取って、ひと口飲んだ。
井戸の水は冷たくて、喉の奥がぴりっとした。
グスタフは作業台の縁に肘をついて、わたしの試作を見下ろした。
「お前さん、何時間もそれと睨めっこしてるな」
「うん。水滴が、うまく落ちない」
「ふん」
親方の太い指が、銅の受け皿の縁をとんと弾いた。
「俺の鍛冶もな」
そう言って、グスタフは少し間を置いた。
「最初の十年は、そんなもんだったぞ」
——十年。
その一言が、わたしの胸の奥にすとんと落ちた。
(……十年)
(……わたしは前世で、十年以上コードと向き合ってきた)
(……だから、デバッグができる。変数を一つずつ切り分けられる)
(……でも、この世界では)
(……わたしはまだ、何の経験もない子供だ)
杯の縁を指でなぞりながら、わたしは小さく頷いた。
「親方さん」
「ん」
「十年、長いね」
グスタフはふっと笑った。
口に出さずに、口の端だけで笑った。
「お前さんは、まだ始めたばかりだ」
それだけ言って、親方はまた火床に戻っていった。
◇◇◇
午後。
わたしは小瓶の上に、もう一つ小さな器を置く仕組みを考えた。
上の器から下の小瓶へ、細い導管で水を補給する。
そうすれば下の小瓶の水位はほぼ一定に保たれる——はずだった。
導管は工房の隅にあった、麦藁の切れ端を使った。
中が空洞になっている。差し込むと、ちょうど良い細さだった。
組み上げて、上の器に水を満たした。
下の小瓶の水位を麦藁が補い始める。
息を止めて、木栓の下の銅の受け皿を見つめた。
ぽつ。
ぽつ。
ぽつ。
ぽつ。
(——一定だ)
胸の奥に、じわりと温かいものが広がった。
派手な「やった」じゃない。
歓声を上げる気力もない。
ただ、静かな手応えだけが、指先まで沁みていった。
背中の方で、ガン、ガン、ガン、と鎚の音が続いている。
グスタフは振り向かなかった。
だがわたしは——親方の鎚の拍子が、ほんの一瞬だけ揺れた気がした。
◇◇◇
夕方になった。
わたしは作業台の上の試作を布で覆って、こぼした水の痕を拭き終えた。
銅の受け皿の中には、午後に溜まった水がまだ少し残っている。
朝の不規則だった水滴の痕が、底の方にうっすら模様を作っていた。
(……前世のわたしも、こんなふうに小さく勝ってきた)
(……派手な成功じゃない)
(……一日に一つ、原因を切り分けるだけ)
(……それを十年続けて、ようやくデバッグができるようになった)
(……今のわたしには、それで十分だ)
胸の奥が静かだった。
朝の冷たさは消えていた。
工房の戸の外で、父アルベルトの足音が近づいてきた。
「親方さん、お疲れさまでした」
「おう」
わたしが戸を開けると、父は夕陽を背負って立っていた。
「どうだった」
父の問いは、前と同じだった。
「うん。今日は、少し進んだ」
「そうか」
父はそれだけ言って、わたしの手を引いた。
父の手のひらは、相変わらず大きくて、ごつごつしていた。
家への道。
村の路地に夕陽が斜めに射し込んでいた。
◇◇◇
翌日と、そのまた翌日。
工房に通い、麦藁の導管の差し込み具合を細かく直し、上の補給器の水位を変えて何度も試した。
午前は手元の動きを揃え、午後は新しい組み合わせを試す。
失敗の数は減らなかったけれど、原因を切り分ける手順は少しずつ短くなった。
翠の月十六日の夕方。
工房の戸を閉めながら、わたしは胸の中で次の手順を確かめた。
(——次は)
(——水滴の間隔を、もう少し細かく調整する)
■あとがき・解説
第29話は、昨日まで動いていたはずの水時計が朝になって不規則になり、リナが一日かけて原因を切り分けていく回でした。プログラマーの世界では日常茶飯事のこの作業を「デバッグ」と呼びます。今回はその基本作法を解説します。
■この話で出てきた言葉
■「デバッグ」
プログラムの中の「バグ(虫)」、つまり不具合を探して取り除く作業のことです。プログラマーの仕事時間のかなりの割合が、新しいコードを書く時間ではなく、このデバッグに費やされています。
デバッグの厄介なところは、症状を見ただけでは原因が分からないことです。「水滴が不規則に落ちる」という症状一つにも、考えられる原因は山ほどあります。木栓の穴の問題かもしれない。水の量の問題かもしれない。受け皿の傾きかもしれない。
そして大事なのは、原因が一つとは限らないということ。複数の原因が絡み合っていることもあれば、本当の原因が思いもよらない場所にあることもあります。
■「変数を一つずつ確認する(切り分け)」
デバッグの最も基本的な作法です。リナが頭の中で「一つ。木栓の穴の大きさ。二つ。小瓶の中の水の量。三つ。銅の受け皿の傾き」と並べていた、あの作業のこと。
ルールは単純です。一度に複数のことを変えてはいけない。一つだけ変えて、結果がどう変わるかを観察する。これを変数一つずつ繰り返していくと、やがて本当の原因に辿り着けます。
これは現代のテスト手法でも使われている「A/B テスト」の考え方とも繋がっています。二つの選択肢を並べて、片方だけを変えて、結果の差を観察する。条件をできるだけ揃えることで、変化の正体を浮かび上がらせる手法です。
リナが木栓を予備のものと交換して試した瞬間、彼女は無意識に A/B テストをやっていたわけです。
■「焦りは精度を下げる(再掲)」
第28話の後書きでも触れた格言ですが、第29話ではさらに切実な意味を持ちました。原因不明の不具合に向き合うとき、人は本能的に「とにかく色々試そう」としてしまいます。
しかしこれをやると、何を変えて何が変わったのか分からなくなり、結局振り出しに戻ります。だから慌てない。一つずつ。順番に。これを何年も繰り返してきたから、前世のリナはデバッグができたのです。
■「十年」
グスタフ親方が口にした、この回の鍵となる一言。
専門技能を一人前にする目安として、よく出てくる数字です。プログラマーの世界でも、職人の世界でも、十年というのは「ようやくスタート地点に立てる長さ」と言われています。
リナはこの言葉を聞いて、自分の中の傲慢さに気付きます。前世で十年かけて積み上げた力を「持っていて当然」と思っていたけれど、この世界では自分はまだ八歳の何もない子供だ、と。
午前中の失敗。肘がぶつかって溢れた水。落とした木栓。一日のうちにいくつもの不器用が重なって、それでも午後にやっと水位を一定に保つ仕組みを思いつく。派手な勝利ではない、静かな「切り分け」の積み重ねでした。
グスタフが鎚の手を止めて杯の水を運んでくる場面、個人的にとても気に入っています。
次の話もお楽しみに。




