第72話「桐谷、引き受ける夜」
この物語はフィクションであり、登場する人物、団体、地名、企業名等はすべて架空のものです。実在のいかなる存在とも関係ありません。
八月の第二週、月曜日の午後二時。
鈴木未來さんがインターンに入って、一ヶ月半が経っていた。
二ヶ月の終わりまで、あと二週間半。
この一ヶ月半で、鈴木さんは三つほどの小さな改修を僕と香織さんの脇で組んだ。最初は手順書通りの単純な置換から、次にCSVのバッチ処理の入出力ロジック、そして三つめが、業務システムの管理画面の中の検索フィルターの追加。
三つめの検索フィルターは、本番環境にデプロイした初日に、小さなバグを出した。
バグの内容は、フィルターの初期値が空のとき、内部で「null」ではなく文字列「'null'」として扱われてしまう、というものだった。
顧客への影響は軽微だった。
管理画面側で「該当データなし」と表示が出るだけで、データ自体は壊れていない。検索条件を一度変えればすぐに正常な結果が返る。
報告メールが顧客先のシステム担当者から朝の十時十五分に届いた。
メールの文面は丁寧だった。
「検索結果がおかしいので確認してください」。
その一行と、再現手順のスクリーンショット。
白瀬さんがメールを最初に開いて、原因をその場で五分で特定した。
「鈴木さんが先週デプロイしたフィルターのフラグの初期値の置き方」
白瀬さんは僕に短くSlackで伝えてくれた。
僕はSlackの通知を朝の十時二十分に開いた。
画面の文字を二度、目で追った。
……鈴木さん。
心の中でその三文字をつぶやいた。
ホットフィックスの修正を、白瀬さんが午前のうちに当ててくれた。
昼前に本番のフィルターの初期値が「null」に直って、顧客先からは「直りました、ありがとうございました」という短い返信が届いた。
修正そのものは、ほんの数行だった。
問題はコードの数行ではなかった。
問題は、鈴木さんが一人目の本番のバグを、自分の名前のついた変更で出してしまった、ということだった。
昼休み、鈴木さんはお弁当を半分ほど残して、午後の島に戻ってきた。
目元が薄く赤かった。
「鈴木さん」
短く声をかけた。
「すいません、私のせいで」
鈴木さんはそう置いた。
声は、いつもの鈴木さんよりも低かった。
肩のあたりが、固くなっていた。
「すいません、私のせいで、白瀬さんに修正、させて」
二度目の「すいません」がノートの上に書き留めるように落ちた。
僕は息を整えた。
三年前の自分の最初のバグの日を思い返した。
あの日の自分の手のひらの湿気を、いま、鈴木さんが同じ温度で握っていた。
僕は声を低く整えてから口を開いた。
「鈴木さん、まず、顔を上げて」
「はい」
鈴木さんが顔を上げた。
目が赤かった。
「修正は、白瀬さんがもう当ててくれた。本番、もう直ってる」
「はい……」
「いま、何が起きたかは、午後、振り返り会議で諏訪さんも交えて、ちゃんと整理する」
「はい」
「それまでは、一回、深呼吸して、午後の業務にいったん戻ってほしい」
鈴木さんはノートを開いて、ペンを構えた。
書き留めようとしている手が、少し震えていた。
しかし最後までちゃんとノートの上にペンを置いた。
午後二時、会議室Bを諏訪マネージャーが押さえた。
諏訪さん、僕、鈴木さん、三人で会議室に入った。
白瀬さんは修正対応の余波で別の打ち合わせに入っていて、会議には同席しなかった。
会議室の机を挟んで、諏訪さんが正面、僕と鈴木さんが並んで向かいに座った。
諏訪さんはMacBookを開かなかった。
いつもの諏訪さんのその所作だった。話に向き合うときに、MacBookの画面を間に置かない。
「鈴木さん、桐谷くん、お疲れさま」
諏訪さんはまずそう置いた。
いつもの声の温度。フロア全体の音量を一段だけ下げる、あの落ち着いた一行。
「鈴木さん、まず、午前中の経緯を、桐谷くんからもう一度、整理してほしい」
諏訪さんは僕のほうを軽く見た。
息を整えた。
心の中で、一行を選んだ。
その一行を、僕は最初に置いた。
「諏訪さん、これは私の指導の問題です」
短く運んだ。
会議室の中の空気が、一瞬、止まった。
諏訪さんが目を僕のほうに上げた。
いつもの諏訪さんの落ち着いた目だった。
しかし最後のところだけ、確かに何かを受け取った目だった。
鈴木さんが、隣で驚いた顔をして、僕のほうを見た。
「桐谷くん」
諏訪さんが短く置いた。
「君が引き受けるのか」
「はい」
短く返した。
「あのフィルターのコードは、僕がレビューを通したものです。鈴木さんが書いて、僕がレビューで一度通した。フラグの初期値の置き方を、僕がレビューの段階で見抜けなかった。だから、今回の本番のバグは、僕の指導の問題、僕のレビューの問題、僕の責任です」
間を置いた。
「鈴木さんが書いた、というのは、もちろん事実です。でも、本番に流れるところまでで言えば、僕が止められた段階で止められなかった、というほうが、構造として、正しい」
諏訪さんはその一行を、頭の中で並べ直していた。
会議室の中で、しばらく間が空いた。
「分かった」
諏訪さんはそう置いた。
「じゃあ、私の管理責任でもある」
短く運んだ。
「桐谷くんがレビューを通した責任を引き受けるなら、私はそのレビュー体制を組んだ責任を引き受ける」
諏訪さんはそう置いた。
僕は諏訪さんの目を見た。
諏訪さんの目は、いつもの諏訪さんの目だった。
しかしいまの一行の中に、確かに僕への信頼の温度が乗っていた。
諏訪さんは僕の引き受けを一瞬も否定しなかった。引き受けた上で、自分のもう一段上の責任を隣に置いてくれた。
……諏訪さんの引き受け方、一年目のあの頃から、少しもぶれない。
胸の奥で、その温度を確かめた。
諏訪さんは続けた。
「鈴木さん」
「はい」
鈴木さんが顔を上げた。
目はまだ赤かった。
しかしさっきよりも、落ち着いていた。
「鈴木さんは、新人インターンとして、ちゃんとやるべきことをやってくれた。コードを書いて、レビューに出して、本番に流した。その一連の流れの中で、君が止められなかった失敗は、君一人の責任ではない」
「はい……」
「失敗の責任の置き場所は、君のいちばん上のレビュー者、その上のチームのマネージャー。今回で言えば、桐谷くんと、私だ」
諏訪さんはそう短く運んだ。
鈴木さんがノートを開いてペンを構えた。
しかし書く前に、目で諏訪さんを見つめた。
「鈴木さん、今日は、ノートに書き留めてもいい」
諏訪さんは口の端でほんの少しだけ笑った。
「ただ、書き留める前に、まず一回、ちゃんと聞いてほしい」
「はい」
鈴木さんはペンを置いた。
目を諏訪さんに向け直した。
「失敗から学ぶというのは、たぶん、自分の手の中で『次にどうやって防ぐか』を組み立てることだ」
諏訪さんはそう置いた。
「責任は上が引き受ける。けれど、防ぎ方を組み立てる手は、本人の手の中にある。その手を、桐谷くんと私とで、隣で支える」
「はい」
「だから次の半時間、桐谷くんと鈴木さんで、再発防止策を一緒に考えてください。私は最後の半時間で、それを聞きに戻ってきます」
諏訪さんはそう運んでから、軽く頭を下げて、会議室を出ていった。
会議室に、僕と鈴木さんが残った。
机の上の白いノートの紙面を、二人で見つめた。
鈴木さんが先に口を開いた。
「桐谷さん」
「うん」
「さっき、ありがとうございました」
鈴木さんの声は、落ち着きを取り戻していた。
「諏訪さんの前で、私の代わりに『私の指導の問題です』って」
「うん」
「あれ、私、ちょっとびっくりして」
「うん」
「私の責任なのに、桐谷さんが、先に引き受けてくれて」
僕は息を整えた。
胸の奥で三つの温度を並べた。白瀬さんの一年目の僕に対するレビューの温度。諏訪さんの二年目のいつかの一行。間宮先輩の構造の本質の渡し方。
「鈴木さん」
「はい」
「責任は、上が引き受ける」
短く置いた。
「それは、僕が三年前、入社した最初の年に、いまの諏訪さんから受け継いだ言葉です」
鈴木さんがノートを開いた。
ペンを構えた。
「諏訪さんは、三年前の夏、僕のコードが原因で最初の障害が起きた時にも、今日と同じ温度で引き受けてくれた。先方の部長に『当社側のコードの問題でもあります』って、自分から。あの一年目の僕は、たぶん、その一行を内心で貯金していた」
「うん」
「その貯金が、今日、僕の口から鈴木さんに対して、自然に出ました」
ペンの音が鈴木さんのノートの上で動いた。
「桐谷さん、それ」
鈴木さんが顔を上げた。
「諏訪さんがいつも言われていたこと、なのですよね?」
短く聞いた。
僕は頷いた。
「うん」
「諏訪さんから受け継いだ言葉です」
短く返した。
鈴木さんはノートに、二行、書いた。
「責任は、上が引き受ける」
「諏訪マネージャー → 桐谷さん → 私」
ペンを止めた。
ノートの上の二行を、目で追った。
「私」という最後の一文字に、鈴木さんの目がかすかに揺れた。
しかし最後まで、目を伏せなかった。
再発防止策の整理を、二人で半時間、やった。
ホワイトボードに、鈴木さんがマーカーで書いた。
ひとつ。
フィルター系の初期値は、必ずユニットテストで「null」と空文字を分けて確認する。
ふたつ。
フィルター系の変更は、本番デプロイ前に、ステージング環境で実際の検索を一度通す。
みっつ。
レビュー者は、フィルター系のコードを見るときに、初期値のチェックを必ず明示的にコメントで聞く。
四つめは、僕が一行、付け足した。
「ペアプロを増やす。鈴木さんが書く重要な箇所は、半時間でいいから、僕か香織さんが横に座る時間を作る」
四行をホワイトボードに並べてから、鈴木さんがその四行を目で追った。
「桐谷さん」
「うん」
「私、勉強になりました」
鈴木さんは短く置いた。
声はもう、午前中の沈んだ声ではなかった。
元の鈴木さんの声よりも、一段、深くなっていた。
「うん」
短く返した。
「失敗から学ぼう。責任は、上が引き受ける」
短く置いた。
鈴木さんはノートに、もう一行、書いた。
「失敗から学ぶ」
「責任は上が引き受ける」
二行が、ノートの上にきれいに並んだ。
諏訪さんが半時間後、戻ってきた。
ホワイトボードの四行を見て、軽く頷いた。
「いいですね、これで」
諏訪さんは短く置いた。
「ホワイトボードの内容、写真に撮って、チームAの共有ドキュメントに上げてください。今後、似たケースの時にここに戻れるように」
「はい」
鈴木さんがスマートフォンを取り出した。
ホワイトボードを撮影した。
撮影が終わってから、諏訪さんがもう一段、口を開いた。
「鈴木さん」
「はい」
「今日のことは、二ヶ月のインターンの中で、たぶん、いちばん大きな学びになる」
諏訪さんはそう置いた。
「コードのバグを出した、ということではなく、バグが出た時の引き受けの構造を、桐谷くんが迷わず君の代わりに置いた、その温度のほうが、たぶん残る」
「はい」
「桐谷くんの引き受けは、私が三年前、桐谷くんに渡したものです。それが今日、鈴木さんに流れた」
諏訪さんは僕のほうを軽く見た。
僕は諏訪さんの目を見返した。
諏訪さんはいつもの諏訪さんの目で、しかし最後のところだけ、確かに何かを置いてくれた目だった。
「鈴木さん、二週間半、残りも、いいインターンにしてください」
諏訪さんはそう短く運んで、会議室を出ていった。
退勤、五時半。
鈴木さんと二人で、会社のビルの一階のロビーで別れた。
「桐谷さん、今日、本当にありがとうございました」
鈴木さんは深く頭を下げた。
頭を下げる動作は、初日の角度よりも、自然に運ばれていた。
「うん、お疲れさま」
「私、今日のこと、観察日記に、ちゃんと書きます」
「観察日記の、たぶん、いちばん大事なページになります」
鈴木さんはそう置いてから、顔を上げた。
「桐谷さん」
「うん」
「私も、いつか、誰かに渡します」
短く運んだ。
声には、さっきよりも確かに芯が一本通っていた。
僕は鈴木さんの目を見た。
二十歳のインターン生の目だった。
しかしその目の中の一行は、これから先の何年かを支える一行になる種類のものだった。
「うん」
短く返した。
鈴木さんは小さく手を振って、駅のほうへ歩いていった。
後ろ姿が、夕日の中でちらりと揺れた。
歩いていく後ろ姿の中に、二ヶ月のインターンの半分の重さと、今日の引き受けの重さが、ひそかに乗っていた。
桜並木通りを寮の方向へ歩いた。
八月の第二週の夕暮れ。
葉桜の影が、夕日の中で深く緑だった。
歩きながら、諏訪さんの三年前のあの日の温度を胸の内でもう一度、思い返した。
三年前、入社一年目の僕のコードが原因で、最初の障害が起きた日。
諏訪さんは先方の川島部長に、「当社側のコードの問題でもあります」と短く運んだ。
あの一行を、僕はあの日、ノートに書いた。
書いた上で、心の中でも貯金していた。
貯金していたものを、今日、鈴木さんのために自分の口で運んだ。
諏訪さんから受け取って、三年、貯金して、今日、鈴木さんに流した。
その流れが、たぶん「継承」と呼ばれるものの、いちばん近い形だった。
寮に戻った。
部屋の机にカバンを置いて、ノートを開いた。
今日の日付の下に、ペンを置いた。
少し考えてから、一行目を書いた。
「鈴木さんの最初の本番バグ、フィルターの初期値」
もう一行。
「諏訪さんの前で、私の指導の問題です、と置いた」
もう一行。
「再発防止策を四つ、ホワイトボードで一緒に整理」
もう一行。
ペンを止めた。
最後の一行を、丁寧に書いた。
「継承の連鎖、を、僕は始めた」
書き終えてから、その一行を目で追った。
継承の連鎖。
諏訪さんから、僕に。
僕から、鈴木さんに。
鈴木さんからは、たぶん、いつか、誰かに。
今日の午後、鈴木さんが「私も、いつか、誰かに渡します」と置いた、あの一行が、その連鎖の半歩先の入り口だった。
その入り口のかたちを、胸の奥で確かめた。
ノートを閉じた。
窓の外、八月の第二週の夜風が、薄く湿って吹いていた。
夏は、まだ続く。
二ヶ月のインターンの残り、二週間半。
その二週間半の中で、たぶん、もう一段、鈴木さんの中の何かが立ち上がる。
そしてその立ち上がりは僕の手の中で測れる種類のものではない。鈴木さん自身の手の中で、ゆっくり積もる種類のものだった。
ノートの脇に、ペンを置いた。
部屋の明かりを少しだけ落とした。
明日の朝もまた、桜並木通りを歩く。
またフロアの島で、香織さんと鈴木さんと白瀬さんと諏訪さんと、言葉を交わす。
その一日の積み重ねの先で、継承の連鎖は、半歩ずつ、ゆっくりと長くなる。




