さくらコードSakura Code
小説/第2話

Novel

第2話 はじめてのプルリク

Script

Cold Open

シーン1 通勤電車の朝

 四月二日。入社二日目の朝の電車は、昨日より一段早い時間だった。

 桜子は、吊り革をつかんだまま、空いている片手でスマホの画面を見ていた。GitHubの通知欄に、赤い数字の「14」が浮かんでいる。

 (十四件)

 昨日書いたのは、たった一行だった。

print("Hello, Sakurako Mochizuki.")

 一行のコードに、十四件。どういう顔をしていいのか、まだ分からない。

 電車が揺れた。鞄の持ち手で、桜色のキーホルダーが小さく跳ねる。桜子は、それを反対の手でそっと握った。

 (まだ、開けない)

 会社で、ちゃんと座って、落ちついてから読もう。そう決めて、桜子はスマホを鞄に戻した。


Part A

シーン2 朝の通知

 九時前のオフィスは、昨日ほど静かではなかった。翔太はすでに席に着いて、片耳にイヤホンを挿して何かを書いている。桜子がおはようございますと言うと、片手だけ挙げて返してきた。

 桜子はPCを起動し、VS Codeを開き、ブラウザでGitHubを開いた。

 昨日出したプルリクエスト。タイトルは、テンプレートどおり。

feat: add hello world by mochizuki-sakurako

 ページを開く。レビュワー欄に、@yamashita-haruka の名前。ステータスは、Changes requested。

 (変更が、リクエストされている)

 コメントは、スレッドで十四件。ファイル差分は、桜子が書いた一行だけのはずなのに。

 スクロールしていく。

@yamashita-haruka: ブランチ名、feature/hello ではなく
feature/hello-mochizuki のように担当者が分かる命名にしよう
@yamashita-haruka: コミットメッセージの prefix、
feat: は新機能追加のとき。今回は chore: か docs: が近いかも
@yamashita-haruka: 末尾にピリオドが入ってるけど、
他の print と揃えて末尾記号なしでもいい
@suzuki-kenichi: おつかれさま。命名ルールは wiki の
"branch-naming.md" に載ってる。リンク置いておくね

 桜子は、一件読むごとに、耳のあたりが熱くなっていくのを感じた。


シーン3 読めないコメント

 三件目までで、もう、胃のあたりが重かった。

 (全部、直さなきゃいけないんだ)

 四件目を開く。

@yamashita-haruka: ここ、Sakurako Mochizuki のローマ字順を
姓・名で書くか、名・姓で書くかはチーム内で揺れてる。
どちらにしたか、コミットメッセージに書いてあると助かる

 五件目。

@yamashita-haruka: print を出す目的、「動作確認」か「自己紹介」か、
PR本文に一行あるとレビュアーが迷わない

 六件目。

@nakamura-shota: 素朴な疑問なんだけど、
なぜ README にサンプルが書かれている形そのままじゃなくて、
末尾にピリオドを足した?何か理由ある?

 桜子は、マウスを握ったまま、画面から少し顔を離した。

 (わたし、何も考えずに書いてた)

 末尾のピリオド。英語の文だから、自然に付けた。それだけ。だから、翔太のコメントに「理由ある?」と聞かれて、答えが、出てこない。

 画面のなかの一行を、桜子は、もう一度、目で追った。「素朴な疑問」「何か理由ある?」――翔太の文末は、柔らかい。責めて書いたわけではないことが、文字の重さで分かる。

 でも、桜子は、その軽さに、いちばん、削られた。

 (「何か理由ある?」って聞かれて、「ない」しか、答えが、ない)

 翔太なら、たぶん、ピリオドを足すか足さないかで、十秒くらいは、迷っただろう。READMEのサンプルと、リポジトリ内の他の print の表記を、見比べただろう。

 桜子は、十秒も、迷わなかった。サンプルを写して、英文だから、と、自然に、ピリオドを足した。それだけだった。

 その「それだけ」が、画面の文字に、いま、戻ってきていた。

 翔太のコメントひとつだけは、後から、何度も、目の裏に、文字の輪郭で残った。

 七件目、八件目、九件目。画面を下へ送るたび、コメントが増えていく。赤い丸、青い点、黄色いアイコン。

 (全部、わたしのコードを、否定してる)

 そう思った瞬間、視界の端が、ぼやけた。

 桜子は、慌てて画面のタブを閉じた。

 (泣いちゃだめ。ここはオフィスだから)

 机の下で、鞄の桜色のキーホルダーに、指先が触れた。


Part B

シーン4 レビューは会話

 ちょうど、その時だった。

「おはよう、桜子さん。昨日はおつかれさま」

 斜め後ろから、遥の声がした。手には、紙コップのコーヒー。昨日と同じ、落ちついた声色。

「あ、おはようございます、山下さん」

「レビュー、読んだ?」

「……はい、その、読みました。十四件、ありました」

 桜子の声が、語尾だけ少し震えた。遥は、椅子を引いてきて、桜子の横に座った。紙コップを机のはしに置く。画面を見ないで、桜子の顔をちらっと見る。

「ひとつ、先に言っておくね。あのコメント、どれもダメ出しじゃないよ」

「でも、Changes requested、って」

「ラベルの名前は、そう。でも、中身は違う」

「あの、山下さん」

「うん」

「コメント、十四件、どれから読めばいいんでしょうか。最初に、上のほうから二、三件、読んだんですけど、それで、画面を、閉じてしまって」

「うん。順番、迷うよね」

 遥は、紙コップを、ほんの一度だけ、机の上で、回した。

「ひとつ目のルール。上から、順に。書かれた順に、読む」

「上から、順に」

「レビューのスレッドは、上に行くほど古くて、下にいくほど新しい。古いコメントを読まないで新しいほうから読むと、誰かが途中で『でも、ここはこう考えてる』って書いた一行だけが、切り取られて、いちばん刺さる形で、目に飛び込んでくる」

「……はい。それは、たぶん、もう、刺さりました」

 遥は、桜子のほうを、ほんの少しだけ、見た。表情は変わらないが、視線の角度が、いつもより、低かった。

「分かった。じゃ、もう一回、上から、一緒に開こう」

 遥は、桜子のマウスは触らなかった。指先で、一件目のコメントを示す。

「レビューのコメントには、だいたい五種類ある」

「……五種類」

「一つ、明らかな間違いの指摘。二つ、分からないことを聞く質問。三つ、別案を出す提案。四つ、関連情報を渡す共有。五つ、いいねって言う称賛」

 桜子は、遥の言葉を、頭のなかでひとつずつ数えた。

「桜子さん、ぜんぶ、自分への否定に見えたでしょ」

「……はい、見えました」

「うん。最初は、ほぼ全員そう見える。わたしもそうだった」

 遥は、ほんの少しだけ笑った。

「一件ずつ、ラベルを貼っていこう。これは指摘。これは質問。これは提案。これは共有。これは称賛。そう思って読み直すと、景色が変わる」

「……やってみます」

「あと、桜子さん」

「はい」

「レビューは、否定じゃなくて、会話。読み終わったら、返信しよう。無言で直さない」


シーン5 返信と修正の往復

 桜子は、一件目から、もう一度開いた。

 ブランチ名の指摘。これは、ラベルでいうと、指摘。wiki を開いて、ルールを確認する。確かに feature/hello-mochizuki とすべきだった。ブランチはもう切ってしまっているから、今回は次から直します、と書く。

mochizuki-sakurako: ご指摘ありがとうございます。
branch-naming.md を確認しました。
次回から feature/hello-mochizuki の形式にします。

 エンターを押すと、コメント欄に、自分のアイコンと自分の文字が並んだ。

 (わたし、いま、会話してる)

 少しだけ、息ができるようになった。

 次のコミットメッセージの prefix。これは、指摘。確かに feat は違う。chore に直すことにする。

 末尾ピリオドの件。これは、指摘というより、提案。翔太の「なぜピリオドを足したか」は、質問。

 桜子は、翔太の返信欄に、いったん、手を置いた。

 最初に書いてみたのは、こうだった。

mochizuki-sakurako: すみません、深く考えずに付けてしまいました。
本当にすみません。

 書いて、すぐに、消した。

 (「すみません」って、書きすぎ、かな)

 翔太のコメントは、責めていない。責めていない相手に、頭を二度下げて返信を始めると、返事を書いた相手が、悪者みたいに、なってしまう。

 二回目は、こう書いた。

mochizuki-sakurako: 特に理由はないです。
英文だから自然に付けただけでした。末尾記号なしに揃えます。

 今度は、消さなかった。けれど、しばらく、エンターキーの上で、指を止めていた。

 (理由がない、って、認めるの、ちょっと、こわい)

 桜子は、もう一度、文の頭に、戻った。

 ためらいながら、「特に理由はないです」の前に、「すみません、」を、足した。

mochizuki-sakurako: すみません、特に理由はないです。
英文だから自然に付けてしまいました。
末尾記号なしに揃えます。

 書いてから、「すみません、特に理由はない」の前半は、いらないかもしれない、と、もう一度、思った。でも、消さずに残しておいた。

 謝りたかったわけではない。

 ただ、特に理由がないまま何かを書いてしまったこと自体を、ここで、自分で、文字に残しておきたかった。半年後の自分が、git log ではなく、PRのコメント欄で、ここのやりとりを開いたとき、「ああ、最初は、こういう書き方だったんだ」と、ちゃんと分かるように。

 送信ボタンを押した。

 翔太のアイコンは、すぐには、付かなかった。少し離れた席で、翔太は、自分の次のPRに集中している様子だった。

 遥は、桜子の後ろで、自分のPCを開いて作業をしている。ときどき、桜子の画面を覗いているけれど、口を挟まない。マウスは、絶対に、奪わない。

 昼前、桜子は、最後のコメントまで返信した。

 最後の一件は、遥からだった。

@yamashita-haruka: 一行のコードに、よく十四件ついたね。
最初のPRでこの量は少し重かったかも。
でも、全部読んでくれてありがとう。コードは、読まれて育つものだから

 これは、ラベルでいうと、共有と、少しだけ、称賛。

 桜子は、返信のテキストボックスに、しばらく手を止めて、こう書いた。

mochizuki-sakurako: ありがとうございます。
最初、ぜんぶ否定に見えました。
でも、五種類に分けて読み直したら、ちゃんと、会話でした。

Part C

シーン6 コミットメッセージの手紙

 午後。

 桜子は、指摘を反映した修正コミットを積もうとしていた。ターミナルで、git commit のエディタが立ち上がる。空行が、カーソルの下に、白く広がっている。

 (なんて書けばいいんだろう)

 昨日の initial commit: hello world みたいに、雑に書いていいのか。それとも、レビューを反映したから、何か特別な書き方があるのか。

 迷っていると、遥が、桜子の席の横を通り過ぎながら、言った。

「桜子さん、コミットメッセージで詰まってる?」

「はい、ちょっと」

「桜子さん、コードは誰に向かって書いてる?」

「……えっと、プロジェクト、というか」

「もう一歩、具体。未来の誰か」

「未来の、誰か」

「半年後、このリポジトリに入ってきた新人。あるいは、来月の自分。その人が、git log を開いて、このコミットのメッセージを読んだときに、何が起きたかが分かるように書く。コードも、コミットメッセージも、PRの本文も、ぜんぶ、未来の誰かへの手紙だと思って」

 桜子は、手元に目を戻した。

 未来の誰か。来月の自分。半年後の新人。

 桜子は、エディタに、ゆっくりと打ち込んだ。

chore: adjust hello world print per review

- drop trailing period to match other samples
- name order: given-family (Sakurako Mochizuki)
- branch rename note: will use feature/<slug>-<name> from next PR

 保存して閉じる。ターミナルに、新しいコミットハッシュが表示される。

 桜子は、GitHubに戻り、PRのページを更新した。レビュワー欄の遥の名前の横に、やがて、緑のチェックマークが付いた。Approved。

 Mergeボタンは、桜子自身に押させるのか、と少し緊張したが、ルールどおり、桜子はボタンを押した。

Merged

 画面のバーが、紫色に染まった。

 (わたしのコード、入った)

 一行のコード。十四件のコメント。返信と修正と、未来への手紙。その全部を経て、一行は、本当に、リポジトリに入った。


Ending

シーン7 桜子のメモ帳

 十九時半。

 駅前のカフェで、桜子は、小さなメモ帳を開いていた。大学の生協で買ったもので、表紙に、もう半分はがれかけた猫のシールが貼ってある。

 桜子は、ペン先を少しだけ宙で止めて、それから、丁寧に書き込んだ。

2022/04/02 新人日記

- レビューコメントには五種類ある
  指摘 / 質問 / 提案 / 共有 / 称賛
- レビューは否定じゃない、会話
- コミットメッセージは未来の誰かへの手紙
- 一行のコードに14件、ぜんぶ読み切った

 メモのいちばん下に、もう一行、足す。

- 無言で直さない

 ペンを置いて、桜子は、コーヒーを一口飲んだ。苦い。昨日の夕方も同じものを頼んで、ほとんど同じ苦さだったのに、今日はほんの少し、味が違う気がした。

 窓の外では、葉桜になりはじめた街路樹が、夜風に揺れている。

 (明日も、コメントを読む)

 桜子はメモ帳を閉じ、鞄にしまった。指先が、桜色のキーホルダーに、一瞬だけ触れた。

 レビューは、会話。

 コードは、手紙。

 明日、またひとつ、どこかで赤い一行が出るだろう。それでも、今日の十四件を読み切った自分なら、たぶん、もう一度、画面を閉じずにいられる。