Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
コードレビューは「間違い探し」でも「テスト」でもない。“気持ちいいレビュー文化”が育つチームに共通すること - エンジニアtype | 転職type
[go: Go Back, main page]

アイキャッチ

コードレビューは「間違い探し」でも「テスト」でもない。“気持ちいいレビュー文化”が育つチームに共通すること

スキル

「このコード、なんでこう書いたの?」そんな一言に、ビクッとした経験はないだろうか。

コードレビューは本来、コードの可読性と安全性を高め、チームでより良いプロダクトを育てるための大切なプロセスだ。ただ、経験の浅い若手エンジニアの中には、「指摘が怖い」「テストみたいで面白くない」「何が正解か分からない」といった理由で、コードレビューをネガティブに感じてしまう人も少なくない。

コードレビューをポジティブに捉えるには、どのようなマインドセットや工夫が必要なのか。そのヒントを求めて話を聞いたのは、“納品のない受託開発”を掲げ、プロダクトと10年単位で向き合い続けるエンジニア集団・ソニックガーデン。

同社に所属するプログラマー・伊藤淳一さんと石崎海渡(ざっきー)さんに、「チームでコードを育て続けるためのレビュー文化」について話を聞いた。

プロフィール画像

株式会社ソニックガーデン
伊藤淳一さん(@jnchito

1977年生まれ、大阪府豊中市出身。SIer、外資系半導体メーカーの社内SEを経て、2012年ソニックガーデンに入社。保守性、拡張性の高いシンプルなコードを追求するプログラマーであり、プログラミングスクール「フィヨルドブートキャンプ」でメンターも務める。ブログやQiitaなどでプログラミング関連の記事を多数公開している。将来の夢はプログラマーをみんなの憧れの職業にすること。主な著書に『プロを目指す人のためのRuby入門』(技術評論社)などがある

プロフィール画像

株式会社ソニックガーデン
石崎海渡さん|ざっきー(@umikun_summer

1997年生まれ、東京都足立区出身。大学でプログラミングの面白さや奥深さを感じ、卒業後にSIerを経て2023年にソニックガーデンに徒弟制度の弟子として入社。業務と並行して「いいコード研究会」のレビュアーとして出演中。「いいコード」とは何かを考え続け、奮闘の日々を送る

レビューするたび、誰かが救われ、自分も育つ

ーー「コードレビューが怖い」「面白くない」といった声について、伊藤さんは率直にどう思われますか?

伊藤:僕自身は「つまらない」と感じることはあまりないですね。もちろん、「ちょっと腰が重いな」と思うタイミングはありますよ。

よくあるのは、プルリクエストのDiff(変更量)が大きすぎる時とか。1000行以上の変更が一気に出てきたりすると、「これ、今から全部見るのか……」と気が重くなりますね(笑)

しかもそういう時に限って、ディスクリプション(説明文)がほとんど書かれていなかったりする。なので自分で上から全部読んで、「なるほど、こういう意図の変更なのか」と解釈しないといけない。

そういった手間が大きいと、さすがにしんどいなとは思います。

伊藤淳一さん_インタビューカット

ーー大変さを感じることもあるけれど、つまらないわけではない、と。

伊藤:そうですね。まあ、だからといって「じゃあコードレビューが楽しいんですか?」と言われると、別に楽しいと言いながらやっているわけでもないというか……。

そもそもコードレビューって、ある意味「未来の自分を助ける行為」だと思っています。

特にソニックガーデンの開発は「納品のない受託開発」(※)というスタイルなので、プロジェクトが10年単位で続くこともある。その間、僕たち自身がずっとコードの面倒を見続けるんですね。

だから、今ここで適当にレビューして通してしまうと、数カ月後や数年後の自分、あるいは同じチームの仲間が困ることになる。逆に言えば、「分かりやすい」「きれい」「安全」なコードにしておけば、将来このシステムに関わるエンジニアたちが楽になる。

その“岐路”に自分が立っている意識を持つことができれば、レビューに対するモチベーションも自然と生まれてくる気がします。

(※)納品をせず、月額定額でシステムの開発・保守・運用を継続的に支援する、株式会社ソニックガーデンが提唱する開発スタイル。顧客のビジネスパートナーとして、長期的な関係を築くことを特徴とする

ーーなるほど。一方で、レビューされる側の感覚も気になります。

ざっきー:人によっては、「理解できないコメントが来たらどうしよう」とか、「コメントが多すぎたらへこんでしまいそう」と不安に感じるエンジニアもいると思います。そうした怖さから、「レビューは必要だけど、できれば最低限に済ませたい」と感じてしまう人もいるのではないでしょうか。

でも僕自身は、怖いというよりも「レビューがあるから成長できる」という安心感のほうが大きいです。

コードに込めた意図を問われたり、自分では気付けないケアレスミスを指摘してもらったりする中で、自分の知らない考え方や、もっといい命名を学ぶことができる。僕にとっては、すごく価値のある時間だと思っています。

ざっきーさん_インタビューカット

伊藤:ざっきーが言うように、コードレビューを「成長の機会」と捉えられるかどうかですよね。

僕自身、以前はJavaやC#を使っていて、ソニックガーデンに入った当初はRubyの経験がほぼゼロでした。その中で先輩にレビューしてもらい、「ここはこう書けるよ」といったアドバイスをたくさんもらいましたが、「嫌だな」とは感じなかった。むしろ「ああ、なるほど」「確かにそのほうがきれいだな」と素直に納得できました。

そうやって少しずつ自分の書くコードが良くなっていくと、やっぱり嬉しいんですよね。「成長できたな」っていう実感があれば、レビューされることをポジティブに受け止められるはずです。

ざっきー:僕は、業務ではレビューを受ける側に回ることが多いのですが、運営している「いいコード研究会」というコミュニティーではレビューする側にも回っています。

人のコードを読む中で、「自分ならこう書くけど、こういう書き方もあるんだな」と気付かされることが多いです。自分の考えと比べながら、「これはたしかにスッキリしてるな」と納得したり、逆に「自分の選んだ書き方にも意味があったな」と再確認できたりもします。

そうやって、他の視点に触れたり、自分の思考を深めたりできるのが、コードレビューの面白さだと思っています。

コードレビューは間違い探しでも、満点を目指すテストでもない

ーーコードレビューに前向きに取り組む文化を根付かせるには、どうすれば良いのでしょうか。

伊藤:ソニックガーデンでは、どんなコードであっても、本番リリースする前に必ず他のエンジニアがコードレビューを行い、その上で「Approve(承認)」してからリリースするといったルールを徹底しています。

こうした前提があるので、レビューに対して素直に耳を傾けられない人や、指摘されるたびにケンカ腰になってしまうような人だと、そもそもやっていけない環境です。

ーー採用の段階から、コードレビュー文化へのカルチャーフィットを重視されているのですね。

伊藤:ええ。採用では「一緒に開発してみる」というプロセスを必ず挟んでいて、その中で「この人ならちゃんとレビューのやり取りができる」と判断できた人だけが入社するスタイルです。

ただ、個人の素養以上にもっと大事なのは、「コードレビューは人格否定じゃない」ことを、しっかりメンバーに伝えていくことですね。

ーーと、言いますと?

伊藤:コードはコードにしか過ぎず、「自分が書いたコード=自分自身」ではありません。

でもエンジニアを始めたばかりの人は、「コメントが何もつかなければ百点」「何か言われたら減点」といった風に、コードレビューを学校のテストのようなものだと感じやすい。そうやって“減点方式”で捉えてしまうと、仮に指摘を受けた際、「自分は間違っていたんだ」「ダメ出しされた、自分はダメだ」とネガティブな気持ちになってしまいます。

なので、先輩が「そうじゃないんだよ」とちゃんと伝えてあげることが大事なんです。コードレビューはあくまでも「コードを良くするためのやり取り」であって、コーディングテストとは違います。

ざっきー:パッと見て少し変に見えるコードがあっても、「何か理由があるはずだ」という前提で「どうしてそうしたの?」と聞くことが大事ですよね。コードレビューを行う際には、まず「正しいか/間違っているか」という意識を切り離した方がいいと思います。

伊藤淳一さん_インタビューカット

ーーそうした「お作法」は、ガイドラインとして明文化されているのでしょうか?

伊藤:いえ、ルール化は意図的に避けています。ドキュメント化すると形骸化しやすいですし、「ルールで決まってるからこうやってるんです」と、思考停止に陥りがちなので。

それよりも、一緒に仕事をする中で直接伝えたり、週一の振り返りを通じて伝えたりする方が、遠回りに見えて実はコストが低いんです。

ざっきー:それこそ入社したての頃は、プルリクの書き方やレビューのルールがあればいいのにと思っていました……(笑)

でも、もし最初にルールブックを渡されていたら、僕はそこで思考が止まってしまっていたでしょうね。「なぜこう書くんだろう?」と考える機会がなくなってしまう。ルールで決まっていると、きっとそう書いて終わりですから。

技術力だけでは「気持ちのいい」レビューは不可能

ーーではスムーズなコードレビューを実現するために、レビューイ(レビューを依頼する側)が気を付けておくといいポイントを教えてください。

伊藤:レビュアー(レビューをする側)の負担を減らす意識を持つことが、一番大事だと思います。

まずは何より、「プルリクエストのサイズをなるべく小さく保つ」こと。そして、ディスクリプションには「全体としてどんな変更を加えたのか」を丁寧に書くことが重要です。

それに加えて、「レビューの濃淡をリクエスト」してもらえるとすごく助かりますね。

「この部分はツールが自動生成したコードなので、ざっと見てもらえれば大丈夫です」とか、「AIの出力を参考に書いたので不安があり、しっかり確認してほしいです」といったように、見てほしいポイントの重み付けを伝えてもらえると、レビューの精度も効率も格段に上がります。

ざっきー:プルリクのサイズを小さくすることは、僕も意識しています。

大きな開発タスクだと、1件あたりのプルリクのサイズを小さくするために、プルリクを数回に分けて作成する必要があります。このとき、ディスクリプションに「まだやってないこと」、つまり「このあとのプルリクでやること」を明記しておくことも大事ですよね。

例えば、「アプリケーション側のコードは書き終わっているが、テストコードはまだ書いてない」という場合、その点を事前に伝えておかないと「あれ、テストコードがないぞ?」とレビュアーに余計な心配をかけてしまう。

そうなると、「テストコードがないですよ」「いえ、テストはこのあとのプルリクで書く予定です」といった無駄なコメントのやりとりが発生してしまいます。

ざっきーさん_インタビューカット

ーー逆に、レビュアーが心がけておきたいポイントは何でしょうか?

伊藤:レビューする際に僕が一番注目しているのは、「読みやすさ」や「分かりやすさ」です。「凝ったコード」や「自分にしか書けないコード」が評価されるわけではなくて、誰が読んでもすっと理解できる、素直で端的なコードになっているかを最重視しています。

というのも、ソニックガーデンの開発スタイルでは仕様書を別途作らず、「コードこそがドキュメント」という前提があるからです。後から関わる人や未来の自分がコードを見たときに、意図や処理が自然と読み取れることが何より重要なんですね。

だからレビューでも、「パッと見て意味が伝わらないコード」には指摘を入れます。特に多いのが、変数名やメソッド名の命名。ここが曖昧だと、まるで主語と述語がかみ合わない文章のように、読む側にストレスを与えてしまいます。

ざっきー:あとは、レビューは基本的にテキストでのやり取りになるので、コメントの書き方や言葉のトーンも大事ですよね。

伊藤:確かに、「ベテランと新人」のような、少し上下の関係性があるときは特に注意が必要ですね。

単純に「どうしてこう書いたの?」と聞きたかっただけなのに、言い方次第では「聞いた=間違い」だと受け取られてしまい、「すみません、すぐ直します」と恐縮されてしまうこともあるので。

スムーズなコードレビューの解説

ーー確かに、伊藤さんクラスの方に「これ、どういう意図なの?」って聞かれたら、一瞬背筋が伸びそうです(笑)

伊藤:だから僕も、「これはただの質問なんだけどね」と一言添えるなど、相手に安心してもらえる言葉を選ぶようにしています。

個人的に、レビューは「コードの質を上げる場」であると同時に、「関係性の質が問われる場」でもあると思っていて。信頼関係がある相手にはフランクに、まだ関係性が浅い相手には丁寧に。その場ごとの空気や距離感を見ながら、自然と言葉のトーンを変えています。

お互いが平等に議論できる場を心がけることが、何よりも大切ですね。

写真/ソニックガーデン提供 取材・文/今中康達(編集部)

転職力診断

Xをフォローしよう

この記事をシェア

RELATED関連記事

JOB BOARD編集部オススメ求人特集

RANKING人気記事ランキング





サイトマップ