若手エンジニアのコードレビュー 〜斜め上のPRを見て学ぼう！〜

# はじめに

「コードレビューは自分にはハードルが高いなー🙁」、「知識ないから、先輩のPRにコメントするの恐れ多い😨」などと思っていませんか？

自分は普通に思っていました〜
特に、自分の書くコードにすら自信がないのに、突然レビューしようとしても、難しいですよね💦💦💦

自分は、プログラミング初めてまだ1年半であるため、先輩エンジニアやチームメンバーのコードをレビューするのは恐れ多く、ワンステップ先だと思っていました。🤔
最近は、全く完璧ではなく、なんちゃってですが、積極的に行なっているつもり、、、

ですが、『どこを見たらいいんだろう？🤔』、『これレビューできているんだろうか？😟』と思うことが多くあります。

そんなコードレビューについて、先輩エンジニアやCTOから多くのアドバイスをいただいたので、記事にしたいと思います！

※記事では、プルリクエストのことをPRと書いてます！

## 対象読者

- 自分の書くコードに自信がない若手エンジニア
- レビューが苦手なエンジニア
- 初めてレビューをするエンジニア

# 💪 コードレビューの目的は？

[良いソフトウェアとコードレビュー](https://speakerdeck.com/atty303/liang-isohutoueatokodorebiyu?slide=52)では、コードレビューの目的は、「良いソフトウェアを維持するための活動」とされ、以下のようなことが書かれていました。

>
>- バグの早期発見と修正
>- パフォーマンスの最適化
>- 保守性と可読性の向上
>- チームのスキル向上と知識共有
>- コーディング標準と一貫性
>

文字で見ると、なんとなく理解できますが、『コードの品質の向上（間違いを指摘すること）をさせる』だけではないことが上記を見てわかりました🙆‍♀️

ではでは、自分ごとに置き換えて、知識のないの若手エンジニアがコードレビューをすると、メリットがあるのか？を改めて考えてみました〜

### 🙌 若手エンジニアがレビューするメリットとは？

自分が、知識のないの若手エンジニアが積極的にコードレビューする目的は、以下だと思っています！

**1. 自己のスキル向上**

コードレビューは、若手エンジニアにとってコード書くことと同じぐらい学習の場だと思っています！他の人のコードを見ることで、新しい書き方やテクニックを学ぶことができます！
また、技術以外でも、先輩エンジニアがどういうコメントをしているのかだったり、レビュアーに優しいPRの大きさ（タスクを細分化する単位）や、開発を円滑に進めるためのtipsなどのプログラミング以外のスキルも理解することができます!

**2. チーム内コミュニケーションの活発化**

チームで開発を行う中で、若手のコードレビューは、エンジニア同士のコミュニケーションの場として有効だと思います！
コードレビューをしないと、ただ目の前のタスクをこなしレビューを受ける一方通行の開発になってしまいます。チームで開発を行っていて、そのメンバーである以上は、間違っても良いので積極的にコミュニケーションは取るべきだと思ってます！
また、質問の場面でも、「いきなり質問です！お時間大丈夫ですか？」と声をかけるより、コードレビューからの流れで分からないところがあれば、深く質問しやすいかなーと思います！（自分の感覚ですが）

![スクリーンショット_2024-02-19_9_36_52-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/f064e2a1-f691-285f-bd70-f3648ea2c57a.png)

**3. レビューにレビューをもらえる**

自分がしたレビューに先輩エンジニアからレビューをもらえるということです！
例えば、`チームメンバーA`のPRに`自分`がコメントをしたとき、そのコメントに、`チームメンバーB`が`自分`のコメントが不適切だったり、補足していただけることもあり、新しい気づきやフィードバックをくれる時もあリます！

![スクリーンショット_2024-02-19_9_55_49-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/2dcc5bcc-b9b7-1289-7818-41390677a1fa.png)

指摘が的を射ていないとき、すかさずコメントしてくれます！🚀（わかりやすい例がなくすみません🙇‍♂️）

:::note info
若手エンジニアのコードレビューには、**スキルアップ**が軸にあると思います！
:::

# ✍️ コードレビューの流れは？

とりあえず、レビューの目的や知識ない若手エンジニアでもやった方が良いんだなということはわかったので、ココからはコードレビューをどう行ったらよいかを説明します！

### 1. タイトル、説明、背景、関連issueなどをみて全体の仕様を理解する

コードレビューの初めは、PRの`タイトル`、`説明`、`背景`、`関連issue`などをみて全体の仕様を理解するといいと思います！
つまり、いきなりコードは見ないことです！（人それぞれですが）
その理由は、全体を理解していないので、いきなりコードを見ても何をやっているか分からないからです。(簡単な変更の場合は別ですが)
自分含め知識に自信のない方は、おそらくプロジェクトに対しての理解も低いです。😭
なので、はじめにタイトル、説明、背景、関連issueなどをみて全体の仕様を理解することからするとよいと思います！🙆

![スクリーンショット_2024-02-19_9_41_09-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/b8d9df83-d3a9-b1ee-53ea-a3e2ac13d401.png)


### 2. できていること・できていないことを確認する

次のステップでは、まだコードは見ずに、動作確認のエビデンスや手元で動かしてみて、期待する動作であるかを確認することを行います！
実際にローカルでリモートのブランチを持ってきて、動かしてみたりするいいかもです！
例えば、フロントであれば、設計書（figma?）通りのUIであるか、また、そのUIが実現したいものであるかどうかなどをみるなどです。
できていること、できていないことを確認するのはコードを見る前にするとよいと思います！🙆

![スクリーンショット_2024-02-19_9_41_09-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885098/057bd0e7-a480-9a56-703b-26bfae225cb1.png)


### 3. 次に、コードを見ていく
    
ここでやっと、コードを眺めるフェーズですが、パッとコードを眺めて、問題点を指摘できる人は少ないと思います。（自分もそうです🙋）
自分含め、若手エンジニアはただコード眺めるだけでは、せいぜい指摘できるのは、タイポや変数命名などのケアレスミスぐらいですw（大事ですが）
なので、PRについての全体像を理解していると思うので、コードをただ眺めるだけではなく、**自分であればどういったコードを書くか考えて、実際のレビュイー（実装者）の方のコードとの差分を見てその差分の気になるところをコメントすることです！**
どういったコードを書くか考える時には、自分の頭の中や、ローカルのブランチに移動、github.dev Web ベース エディターを使うなど色々方法はあると思います！
つまり、**チームメンバーのPRを自分ごとかのように考えること**が大事だと思います！
多少の工数はかかりますが、なんとなくコメントしたり、知識ないからコメント自体避けているエンジニアよりは、成長速度は速いと思っていますし、自分が納得していない状態で、アプルーブを押すのは、よくないと思います！🙅‍♀️

<details><summary>github.dev Web ベース エディター</summary>

` . + Shift`で、別タブで開けます！

https://docs.github.com/ja/codespaces/the-githubdev-web-based-editor#githubdev-%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%83%BC%E3%82%92%E9%96%8B%E3%81%8F

</details>


# ✋ コードレビューはどこを意識したら良いか？

『**自分の頭の中で書いたコードとレビュイーの方が書いたコードを照らし合わせて、その差分を指摘、質問するのが良いと思います！**』
と言いましたが、コードレビューの際に、どこを意識したら良いか？については、以下だと思います！

- **考えて疑問に思った点は、遠慮なくコメントするか直接聞く**
    - PRのコメントが**5ラリー**程していたら直接聞きに行く！
- **一人で考えすぎて、無駄に時間を使わない**
    - レビュイーに遠慮をせず聞きに行く！
- **自分が納得していない状態で、アプルーブを押すのはダメ！**
    - 自分がレビューでコメントをして、返ってきたコメントをしっかり理解をしてからアプルーブを押そう！
- **レビューにかけていい時間を決める**
    - 実際、そんなチームメンバーのPRを自分ごとかのように毎回考えるとかなり時間かかるじゃん？と思いますが、正直若手エンジニアに速さなどそこまで求められていないと思います！（こんなこと言っていいのかわかりませんがw）
    - ただ、速さは求められていないですが、自分が決めたタスクの最低限の期限は守りたいですね！このPRのレビューに避けるリソースはどのぐらいで、、、などタスクマネジメントができていると良いですね！

# 🚶 コードレビューの第一歩目

コードレビューとは一概には言えないですが、PRのコメントには3種類あると思っています！

- **指摘（多くの人が想像しているコードレビュー）**
- **質問（この実装どういう意図で？）**
- **承認（褒める、この実装すごい！）**

指摘コメントのハードルが高い方は、「質問」、「承認」から入ると良いと思います！

自分もそうだったのですが、PRのコメントは指摘のコメントをしないといけないと思い、自分でハードルを上げていました、、、

若手エンジニアから、PRに上記のコメントがついて、嫌がる先輩やチームメンバーいない！というマインドをもち、果敢にコメントをつけると良いと思います！（本当にいないと思っています）

コメントをした先にディスカッションが生まれ、チーム内のコミュニケーションが活発化することになれば、コメントする意味は十分にアリなのかなと思っています！



# 👍 スピード感を持ってレビューができるようになるには？

レビューができるできないは、考え方や気持ちなどのスタンスだけでは解決できる問題ではなくて、ある程度の経験や知っているかどうかが関わってくる思っています！

実際に、その知識や経験は、**斜め上の先輩のPR**を見て学ぶことができると思います！

斜め上の先輩とは、１つ上の新卒のエンジニアのことです！

自分であれば、24卒のインターン生なので、23卒の先輩のPRを全て目を通す意識をすることです！

PRの細かい要件は分からなくても、コードの書き方はもちろん、そのPR上のレビュアーのがどういう指摘コメントをしていて、そのコメントに対してどう問題解決しているのかをみると良いです！

特に、どういう角度でレビューをしたらいいか分からないので、レビューの仕方、ちょっとした作法、考え方についてすごく参考になります！

全く関係ないチームのPRをのぞいて、気になったところをコメントするのも、アリだと思います！（言語、アーキテクチャなどは違うと思いますが、、、）

まずは、気になったPRをブックマークするところから始めましょう！💪


:::note info
レビューの知識は、**斜め上の先輩のPR**を見て学ぼう！
:::


### レビューの観点

最初は、定石にみたいなものがわからないので、ここを参考にすると良いかもですね！

ココでは、実際に説明しませんが

参考にできそうなものをさらっと調べてみました！🙆‍♂️

https://fujiharuka.github.io/google-eng-practices-ja/ja/review/reviewer/looking-for.html

https://qiita.com/ouauai/items/d38eeef9f0af5a4a87da

初めは、`リーダブルコード`や`良いコード／悪いコードで学ぶ設計入門`から学ぶと良いかもですね！

https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655/ref=sr_1_1?adgrpid=56076398369&dib=eyJ2IjoiMSJ9.Or_xhooRUepvN3zSufFigX8SRNbaQUAphW3h9dztfpz_AiyqyVExcfZdyQW9VLjLQAFny71GP_8H0_NVzpHKtWDpQhtPCJ-ydk-QqyQcPe8hMCWdGiCsM4UPSQS73M391Tb4qJoLzfp4ynXazMBeFH1lq4_NYpIzTO5xfgWjHptN2Lf5J-Qjyti0RYLpgwW1q8SfpqjaxuxJtIubaNXKWF_37GktFc-MW88PKkEtBBtwrS3ngbaWs8W6PM3vo_ypB27687YPbSbSq6higKwqHuU397iqEgpPCUz8T6rQyAQ.ZQ0J9M5C5_w1joOaNqGBoB9MeyKFBZZ8yrrXjZilYRY&dib_tag=se&gclid=Cj0KCQiAz8GuBhCxARIsAOpzk8zoVPrOF4jBIqx6MU7PLJeag-5M6am6Ep848WdmrDV_RrTMQjlWKKcaAiPpEALw_wcB&hvadid=665615776270&hvdev=c&hvlocphy=9053372&hvnetw=g&hvqmt=e&hvrand=1902776530554235440&hvtargid=kwd-334758528225&hydadcr=27298_14701207&jp-ad-ap=0&keywords=%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89&qid=1708198283&sr=8-1

https://www.amazon.co.jp/%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%EF%BC%8F%E6%82%AA%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E5%AD%A6%E3%81%B6%E8%A8%AD%E8%A8%88%E5%85%A5%E9%96%80%E2%80%95%E4%BF%9D%E5%AE%88%E3%81%97%E3%82%84%E3%81%99%E3%81%84-%E6%88%90%E9%95%B7%E3%81%97%E7%B6%9A%E3%81%91%E3%82%8B%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9-%E4%BB%99%E5%A1%B2-%E5%A4%A7%E4%B9%9F-ebook/dp/B09Y1MWK9N/ref=sr_1_1?dib=eyJ2IjoiMSJ9.Vlz9rCePSXoHK-ixwzx4gDfBWS41GHkqUKPpstZEvBhinDam2Dfrv_FpyD1hhHCi3e0wrmsp0BwNp_yxyZGauTUOuRe72js1E3dnHJaNAMlltZR75mjVMlsG5oeFiJOdqPrfthTc-XTJc9XEURQAhQ.pUxn8aNX-8TpP7gTbdDUkTNiEM3TucWEl834k4DYIXI&dib_tag=se&keywords=%E3%83%9F%E3%83%8E%E9%A7%86%E5%8B%95&qid=1708198168&sr=8-1

# おわりに

これで、積極的にレビューコメントできそうですか？

若手エンジニアでもレビューする機会が絶対あるはずです！

でも、レビューする機会を自分から失うのはもったいないという話ですね、、、

自分も自信を持ってレビューできるように精進します！

ではまた、次の記事でお会いしましょう👋

# 参考

https://speakerdeck.com/atty303/liang-isohutoueatokodorebiyu

以下の記事も良いと思いました〜

https://qiita.com/teshima/items/4eb1c7c09863e71d5ed0