表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
魔力ゼロですが、魔法はぜんぶコードなので問題ありません 〜前世プログラマーの少女、キーボードで異世界をデバッグする〜  作者: せい | 健康優良不良プログラマ
第1部 ②眼を、隠す

この作品ページにはなろうチアーズプログラム参加に伴う広告が設置されています。詳細はこちら

PR
29/211

第29話 失敗の日

翠の月十四日。


朝、工房の戸を引いたわたしは、作業台に布をかぶせたままの試作を見つけた。

昨日と一昨日は家の手伝いで工房に来られず、前回の続きで少しずつ組み続けた水時計の原型が、布の下にそのまま眠っている。


「親方さん、お邪魔します」


「おう」


グスタフは火床の前で鎚を握り直したまま、こちらをちらりと見ただけだった。


わたしは作業台に近寄って、布を持ち上げた。

前回の自分が組んだ水時計の原型がそのまま残っている。

小瓶。木栓。銅の受け皿。


息を吸って、小瓶に水を満たした。


ぽつ——


最初の一滴が落ちた。

ぽつ、ぽつ、と続けて二滴。


それから——十秒近く、何も落ちなかった。


(……ん?)


そして、ぽつ、ぽつ、ぽつ。今度は連続で三滴。

また間が空いて、ぽつ。


(……不具合だ)


胸の奥がきゅっと冷たくなった。

前回の終わりには、ちゃんと一定間隔で落ちていたはずだった。


(……でも、どこの)


わたしは水滴を見つめながら、頭の中で変数を並べ始めた。


◇◇◇


——変数を一つずつ。


前世の長いデバッグ経験で、わたしが叩き込まれた原則だった。

原因が分からない不具合に出会ったら、一度に色々試してはいけない。

一つだけ変えて、結果がどう動くかを観察する。


頭の中に、思いつく要因を列挙していった。


一つ。木栓の穴の大きさ。

二つ。小瓶の中の水の量。減ると、水を押し出す力が変わるはずだ。

三つ。銅の受け皿の傾き。


(……三つ。前世なら五分で切り分けられる)


(——でも今のわたしには、ログがない。手と眼だけだ)


胸の奥がじわりと焦り始める。

焦りは、いけない。


(——焦るな)


自分に言い聞かせて、深く息を吸う。

一つずつ。順番に。


わたしは木栓を引き抜いて、まず予備の木栓と交換した。

水を注ぎ直す。


ぽつ、ぽつ。長い間。ぽつ、ぽつ、ぽつ。


(……変わらない)


木栓のせいではない。

そう判断するまでに、前世なら一瞬だったはずの確信が、今は何分もかかった。

焦りがまた頭をもたげそうになる。


(——焦るな。次)


二つ目に取り掛かろうとして、わたしは銅の受け皿に手を伸ばした。


その瞬間。


ぱしゃん——


肘が縁に当たった。

銅の受け皿が傾いて、中の水が作業台に広がった。


「あ……」


水は木の板に染み込んで、わたしの試作の足元まで届いた。

小瓶を慌てて持ち上げる。指先がふるえた。


(……今日のわたしは、なんでこんなに不器用なんだろう)


布で水を拭きながら、わたしは唇を噛んだ。

八歳児の腕は短い。肘の位置の感覚が、前世の身体とまるで違う。

頭では「右腕をここまで」と命令しているのに、実際の腕はそこより十センチ手前で何かに当たる。


ガン、ガン、と背中で鎚の音が続いていた。

グスタフは何も言わない。

ただ、わたしが拭き終えるのを待つように、鎚の間隔がほんの少しだけ長くなった気がした。


◇◇◇


午前のうちに、わたしは木栓を一度落とした。


小さな木の塊は工房の床を転がって、火床の脇の影の中に消えた。

わたしは膝をついて、暗がりに目を凝らした。

八歳児の視力でも、灰と煤の色に紛れた木栓は見つけにくい。


「これか」


グスタフの太い指が、わたしより先にそれをつまみ上げていた。

振り向くと、親方はいつの間にか火床の前を離れて、わたしの真横にしゃがんでいた。


「あ、ありがとうございます」


「ふん」


グスタフは木栓をわたしの手のひらに置いて、また火床に戻っていった。

それだけだった。


わたしは木栓を握り直して、作業台に戻った。

胸の奥が、ほんの少しだけ温かかった。


◇◇◇


昼を過ぎた。


わたしは小瓶の水の量を一定に保つ仕組みを考えていた。

小瓶の水が減ると、水滴を押し出す力が弱くなる。だから後半になるほど水滴が遅くなる。

これが不規則さの最大の原因に違いない——というのが、午前中の検証で絞り込んだ仮説だった。


(……前世のわたしなら、五分で結論)


(……ここでは、半日かかった)


それでも諦めなかった。

焦りは精度を下げる。早く済ませようとした作業ほど、あとで作り直しになる。


ふいに、背後でガランと音がした。

グスタフが鎚を作業台の縁に置いた音だった。


足音が近づいてきた。

親方は木の杯に水を一杯満たして、わたしの作業台の隅にことりと置いた。


「飲め」


「あ……ありがとうございます」


わたしは両手で杯を受け取って、ひと口飲んだ。

井戸の水は冷たくて、喉の奥がぴりっとした。


グスタフは作業台の縁に肘をついて、わたしの試作を見下ろした。


「お前さん、何時間もそれと睨めっこしてるな」


「うん。水滴が、うまく落ちない」


「ふん」


親方の太い指が、銅の受け皿の縁をとんと弾いた。


「俺の鍛冶もな」


そう言って、グスタフは少し間を置いた。


「最初の十年は、そんなもんだったぞ」


——十年。


その一言が、わたしの胸の奥にすとんと落ちた。


(……十年)


(……わたしは前世で、十年以上コードと向き合ってきた)


(……だから、デバッグができる。変数を一つずつ切り分けられる)


(……でも、この世界では)


(……わたしはまだ、何の経験もない子供だ)


杯の縁を指でなぞりながら、わたしは小さく頷いた。


「親方さん」


「ん」


「十年、長いね」


グスタフはふっと笑った。

口に出さずに、口の端だけで笑った。


「お前さんは、まだ始めたばかりだ」


それだけ言って、親方はまた火床に戻っていった。


◇◇◇


午後。


わたしは小瓶の上に、もう一つ小さな器を置く仕組みを考えた。

上の器から下の小瓶へ、細い導管で水を補給する。

そうすれば下の小瓶の水位はほぼ一定に保たれる——はずだった。


導管は工房の隅にあった、麦藁の切れ端を使った。

中が空洞になっている。差し込むと、ちょうど良い細さだった。


組み上げて、上の器に水を満たした。

下の小瓶の水位を麦藁が補い始める。


息を止めて、木栓の下の銅の受け皿を見つめた。


ぽつ。


ぽつ。


ぽつ。


ぽつ。


(——一定だ)


胸の奥に、じわりと温かいものが広がった。

派手な「やった」じゃない。

歓声を上げる気力もない。


ただ、静かな手応えだけが、指先まで沁みていった。


背中の方で、ガン、ガン、ガン、と鎚の音が続いている。

グスタフは振り向かなかった。

だがわたしは——親方の鎚の拍子が、ほんの一瞬だけ揺れた気がした。


◇◇◇


夕方になった。


わたしは作業台の上の試作を布で覆って、こぼした水の痕を拭き終えた。

銅の受け皿の中には、午後に溜まった水がまだ少し残っている。

朝の不規則だった水滴の痕が、底の方にうっすら模様を作っていた。


(……前世のわたしも、こんなふうに小さく勝ってきた)


(……派手な成功じゃない)


(……一日に一つ、原因を切り分けるだけ)


(……それを十年続けて、ようやくデバッグができるようになった)


(……今のわたしには、それで十分だ)


胸の奥が静かだった。

朝の冷たさは消えていた。


工房の戸の外で、父アルベルトの足音が近づいてきた。


「親方さん、お疲れさまでした」


「おう」


わたしが戸を開けると、父は夕陽を背負って立っていた。


「どうだった」


父の問いは、前と同じだった。


「うん。今日は、少し進んだ」


「そうか」


父はそれだけ言って、わたしの手を引いた。

父の手のひらは、相変わらず大きくて、ごつごつしていた。


家への道。

村の路地に夕陽が斜めに射し込んでいた。


◇◇◇


翌日と、そのまた翌日。

工房に通い、麦藁の導管の差し込み具合を細かく直し、上の補給器の水位を変えて何度も試した。

午前は手元の動きを揃え、午後は新しい組み合わせを試す。

失敗の数は減らなかったけれど、原因を切り分ける手順は少しずつ短くなった。


翠の月十六日の夕方。

工房の戸を閉めながら、わたしは胸の中で次の手順を確かめた。


(——次は)


(——水滴の間隔を、もう少し細かく調整する)


■あとがき・解説


第29話は、昨日まで動いていたはずの水時計が朝になって不規則になり、リナが一日かけて原因を切り分けていく回でした。プログラマーの世界では日常茶飯事のこの作業を「デバッグ」と呼びます。今回はその基本作法を解説します。


■この話で出てきた言葉


■「デバッグ」


プログラムの中の「バグ(虫)」、つまり不具合を探して取り除く作業のことです。プログラマーの仕事時間のかなりの割合が、新しいコードを書く時間ではなく、このデバッグに費やされています。


デバッグの厄介なところは、症状を見ただけでは原因が分からないことです。「水滴が不規則に落ちる」という症状一つにも、考えられる原因は山ほどあります。木栓の穴の問題かもしれない。水の量の問題かもしれない。受け皿の傾きかもしれない。


そして大事なのは、原因が一つとは限らないということ。複数の原因が絡み合っていることもあれば、本当の原因が思いもよらない場所にあることもあります。


■「変数を一つずつ確認する(切り分け)」


デバッグの最も基本的な作法です。リナが頭の中で「一つ。木栓の穴の大きさ。二つ。小瓶の中の水の量。三つ。銅の受け皿の傾き」と並べていた、あの作業のこと。


ルールは単純です。一度に複数のことを変えてはいけない。一つだけ変えて、結果がどう変わるかを観察する。これを変数一つずつ繰り返していくと、やがて本当の原因に辿り着けます。


これは現代のテスト手法でも使われている「A/B テスト」の考え方とも繋がっています。二つの選択肢を並べて、片方だけを変えて、結果の差を観察する。条件をできるだけ揃えることで、変化の正体を浮かび上がらせる手法です。


リナが木栓を予備のものと交換して試した瞬間、彼女は無意識に A/B テストをやっていたわけです。


■「焦りは精度を下げる(再掲)」


第28話の後書きでも触れた格言ですが、第29話ではさらに切実な意味を持ちました。原因不明の不具合に向き合うとき、人は本能的に「とにかく色々試そう」としてしまいます。


しかしこれをやると、何を変えて何が変わったのか分からなくなり、結局振り出しに戻ります。だから慌てない。一つずつ。順番に。これを何年も繰り返してきたから、前世のリナはデバッグができたのです。


■「十年」


グスタフ親方が口にした、この回の鍵となる一言。


専門技能を一人前にする目安として、よく出てくる数字です。プログラマーの世界でも、職人の世界でも、十年というのは「ようやくスタート地点に立てる長さ」と言われています。


リナはこの言葉を聞いて、自分の中の傲慢さに気付きます。前世で十年かけて積み上げた力を「持っていて当然」と思っていたけれど、この世界では自分はまだ八歳の何もない子供だ、と。


午前中の失敗。肘がぶつかって溢れた水。落とした木栓。一日のうちにいくつもの不器用が重なって、それでも午後にやっと水位を一定に保つ仕組みを思いつく。派手な勝利ではない、静かな「切り分け」の積み重ねでした。


グスタフが鎚の手を止めて杯の水を運んでくる場面、個人的にとても気に入っています。


次の話もお楽しみに。


評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
バグ(虫)の由来も説明あるとよいかも。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ