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件、ぜんぶ読み切ったメモのいちばん下に、もう一行、足す。
- 無言で直さないペンを置いて、桜子は、コーヒーを一口飲んだ。苦い。昨日の夕方も同じものを頼んで、ほとんど同じ苦さだったのに、今日はほんの少し、味が違う気がした。
窓の外では、葉桜になりはじめた街路樹が、夜風に揺れている。
(明日も、コメントを読む)
桜子はメモ帳を閉じ、鞄にしまった。指先が、桜色のキーホルダーに、一瞬だけ触れた。
レビューは、会話。
コードは、手紙。
明日、またひとつ、どこかで赤い一行が出るだろう。それでも、今日の十四件を読み切った自分なら、たぶん、もう一度、画面を閉じずにいられる。