第1話 自信を喪失させるコードレビュー
私は自己嫌悪に陥っていた。
冷たい鉛の塊が胃の底に沈むような感覚だった。
2時間前――――。
私は会議室で、新人の真山くんに開発してもらったWindowアプリケーションの新機能のソースコードのコードレビューをしていた。
新人と言っても、もう私のチームに来てから3ヶ月になる。
そして、真山くんに開発してもらうのも、コードレビューをするのも、もう何度か経験済みだ。
にもかかわらず、なぜこのレベルなのか・・・。
見せられたソースコードを見て、私の顔はみるみるこわばっていた。
「あのさ・・・」
嵐が始まる予兆を感じてか、真山くんの緊張感も高まる。
「はい・・・」
「ここの編集ダイアログでのレポート設定の反映方法は、事前に説明したよね?まず、Report クラスの Clone メソッドでレポート設定のクローンをつくってから、そのクローンのデータを編集ダイアログで表示させて、OK ボタンを押したら Report クラスの Apply メソッドでオリジナルのレポート設定に編集結果を反映するって説明したよね?なんで事前にちゃんと説明したのに、その通りに作っていないの?」
「すみません」
「いや、理由を聞いているの。なんでその通りに作ってないの?」
「すみません、よく分かっていませんでした」
「え?どういうこと?説明した時は、分かりましたって言ってたでしょ?」
「すみません、説明された時に、よく分かっていませんでした」
「分かっていないのに、分かったって言ったってこと?なんで?今までも、何度も分からないときは、正直に分からないことを教えてって言ってたでしょ?だって、そこで嘘をつかれたら教える方はどうしようもないでしょ?なんで分かったふりをするの?そんなことしても、結局、後で困るんだから、分かったふりをしたってしょうがないでしょ?」
私が一気にまくし立てたことで、真山くんは自分の発言が不用意だったことに気付いたようだった。
表情は明らかに動揺している。
「えっと・・・・あの・・・その・・・その時は・・・分かった気になっていたんだと思います」
想定外のうまい言い訳をされて、振り上げた拳の行き場を失った私は、次の攻撃箇所へ照準を合わせる。
「なるほど、分かった。で、クローンせずにオリジナルのレポート設定を編集ダイアログで編集する現在のソースコードだと、どういう問題が起きるかわかる?」
「すみません、わかりません」
「この編集ダイアログは、編集対象の Report クラスのインスタンスとバインドしているでしょ。だから、ダイアログで値を変更した瞬間に Report のインスタンスの値は変更されることになるでしょ。クローンせずにオリジナルの Report を編集したらどうなる?ダイアログで編集した後にキャンセルボタンを押しても、もとの設定に戻らずにデータが変更されてしまうよね?」
「はい・・・すみません・・・」
「それに Report クラスのプロパティ変更も問題あるんだけど。ここのプロパティは、もともと bool 型だったプロパティを enum 型に変更してるけど、今のコードだと、どんな問題が起きるかわかる?」
「すみません、わかりません」
「前のバージョンで bool 型のプロパティを true で設定していたユーザーは、互換性が保持されなくなって、今回のバージョンで値が初期値の false に変更されてしまうでしょ。ちゃんと bool 型のプロパティは互換性を維持するために残しておかないといけないよね。互換性を維持することは、セルフチェックの確認項目にあるはずだけど、なんで確認してないの?」
「確認は・・・しました」
「確認したのに、どうしてこの問題が残ってるの?」
「それはたぶん・・・ 過去バージョンで bool 型のプロパティの値を false のときに、新しいバージョンで false で復元できることを確認しただけだったからだと思います。」
「それは互換性確認の意味ないよね? bool 値の初期値は false なんだから、false で確認しても何の意味もないでしょ?保存・復元を確認する時は、初期値と違う値を確認するのが基本って前にも言ったよね。なんで言った通りにやらないの?」
「はい・・・すみません・・・」
コードレビューは、この調子で続き、私は20件以上の問題を指摘した。
――――そして、現在にいたる。
電車の窓越しに流れる街の灯りを眺めながら、コードレビューでのやりとりが、次々と頭の中をリフレインする。
真山くんが「すみません」と呟いてうつむいた姿が、何度も脳裏に浮かぶ。
手すりを握る手は力が入りすぎて痛みを感じるほどだった。
確かに、コードの完成度には問題があったし、説明した通りにやれていなかった。
ただ、彼はまだ新人で経験は浅い。
経験が浅いと、焦ったり慌てたりして落ち着いて考えられなくなるため、基本的なミスをするのは仕方がないのだ。
だから本来は、うまくできないことを前提にして、効率よく成長することをサポートすべきなのに、それができていなかった。
その時、過去の思い出したくもない地獄のような日々がフラッシュバックした。
夜の会議室で、何度も見た重いため息と、とげのように刺さる見下された視線。
かつての上司から言われた言葉の数々が脳裏をよぎる。
「こんなことも知らないのか」
「技術者としての常識がなさすぎる」
「君は他の会社では役に立たない人材だよ」
「君の仕事は外注で代用できる」
「こんなのレビューする価値もないクソコードだ」
そんな言葉を何度も受け、自分はまともに仕事ができない人間だと思い込んだ私は、ITエンジニアをやめる決意を固め、貧乏生活を覚悟した。
当時の絶望の記憶が蘇り、胃がきりきりと痛みだす。
気づけば、私は深く息を吐き出し、震える手で額を押さえていた。
これは呪いなのかもしれない。
誰かに投げつけられた冷たい言葉は、心の奥底に沈殿し、気づかないうちに自分自身の一部になってしまう。
やがてその冷たさは、無意識のうちに他人へと向かってしまう。
傷つけられた記憶が、傷つける側へと姿を変える。
私は、真山くんを見下すような目で見てしまった自分に気づき、背筋が凍った。
「同じことを繰り返している・・・」
胃の痛みはさらに強くなった。
心に突き刺さるような言葉が、時に人の自信を根こそぎ奪ってしまうことがある。
今日の私の言葉も、真山くんの自信を喪失させるものだったのではないか。
「ここで止めなければ」
しかし、呪いに抗う方法として、どうすればいいか分からない。
コードレビューでの言い方を変えるだけで、問題が解決するとは思えない。
真山くんに適切なソースコードを書いてもらえるようにならなければ問題は解決しない。
「・・・ギルドで相談してみるか」
ギルドというのは、Web サービスやアプリを個人で作って運営しているITエンジニアが集まるオンラインコミュニティのことだ。
Slack というチャットツールに、相談ごとを書き込むと、コミュニティの人たちがいろんな助言をしてくれる。
私は最近入ったばかりの新参者だが、サービスやアプリのことだけでなく、どんな話題でも気軽に書き込める雰囲気があるので、こういう相談にも助言がもらえるかもしれない。
私はスマホを取り出して、ギルドの Slack を開いた。
今日もギルドは盛況で「Rust勉強してるけど難しいわw」「この動画めちゃわかりやすい」など様々な話題で盛り上がっている。
そんな中、私は意を決して、新人のコードレビューで厳しい指導をしてしまって今後どうしたら良いか困っている旨を投稿した。
ほどなくして、ベッツさんから返信があった。
ベッツさんは、私がギルドに入った直後から色々な助言をしてくれるフリーランスで、個人で有名なWebサービスをいくつも作っている凄い人だ。
「ペアプログラミングを検討してみてはどうでしょう?」
ペアプログラミングは聞いたことはあるが、やったことはない。
現在2019年で、私は10年以上ITエンジニアをやっているが、社内でペアプログラミングをやっているという話も聞いたことがない。
さっそく「ペアプログラミング」という用語で検索してみる。
2人で一緒に考えて作業を進めることで、知見が共有できたり、スキルアップに繋がったり、品質が上がったり、開発効率が高まったりなどの効果があるらしい。
私が思っていたイメージと違っていた。
「一緒に考える」という行為の有効性を見落としていたのかもしれない。
そして、一筋の光が見えたような気がした。
「ベッツさん、ありがとうございます!ペアプログラミング試してみようと思います!」
Slack に返信した後、ふと外の風景を眺めてみると、降りるべき駅をとうに過ぎてしまっていることに気が付く。
「しまった」とは思ったが、不思議と嘆く気持ちは湧いてこなかった。
むしろ、今はこの新しいアイデアをじっくり考える良い時間だと思えた。
私は、スマホで引き続きペアプログラミングの情報を漁ることにした。
そして、ひとつの決心を胸にしていた。
明日の朝、オフィスに着いたら、まず真山くんにきちんと謝る。
そして、ペアプログラミングを活用したやり方について相談しよう。
そのとき突然、なぜか頭の中でサイバーフォーミュラというアニメのエンディングテーマが流れ始めた。
1990年頃のアニメの中で、エンディングテーマへの入り方はシティーハンターの Get Wild と双璧をなすかっこよさだ。
そして頭の中でAメロが始まったときに思い出した――――
――――なぜ人の瞳が後ろじゃなくて前にあるのかということを。
<後書き>
続きが読みたいと思ってくれた場合は、この下の欄から★をいっぱい付けて評価していただくか、このページをはてなブックマークで登録していただけると、とても嬉しいです。
はてなブックマークの登録方法はこちら↓
https://b.hatena.ne.jp/entry/s/ncode.syosetu.com/n0344iu/1/