プログラミングを学び始めると、コードレビューをする場面があります。
でも、初心者のうちは何を見ればいいのかわかりにくいですよね。動いていればいいのでは?と思う人もいるかもしれません。
コードレビューは、間違い探し大会ではありません。
目的は、コードをより安全に、読みやすく、保守しやすくすることです。自分のコードでも、後輩のコードでも、AI生成コードでも考え方は同じです。
この記事では、IT初心者の方に向けて、コードレビューで見るべきポイントをわかりやすく解説します。
コードレビューとは何か¶
コードレビューとは、書いたコードを自分以外の人、または未来の自分が読み、問題がないか確認する作業です。
実務では、チームメンバーが書いたコードを別の人が確認してから本番に入れることが多いです。
ただし、コードレビューはチーム開発だけのものではありません。独学中の初心者でも、自分のコードを見直すセルフレビューができます。
コードレビューの目的は、誰かを責めることではありません。よりよいコードに近づけるための共同作業です。
コードレビューで大切なのは動くかだけではない¶
初心者のころは、コードが動くとそれだけで安心します。
もちろん動くことは大切です。しかし、システム開発では動くことはスタート地点です。
たとえば、次のコードを見てください。
a = 1200
b = 3
c = a * b
print(c)
このコードは動きます。
でも、何を計算しているのか少しわかりにくいですよね。
次のように書くと、意味が伝わりやすくなります。
price = 1200
quantity = 3
total_price = price * quantity
print(total_price)
処理内容は同じです。
しかし、後者のほうが読みやすく、あとから修正しやすいです。
コードレビューでは、動くかどうかだけでなく、読んだ人が理解しやすいかも確認します。
レビューの前に目的を確認する¶
コードを見る前に、まず確認したいことがあります。
それは、このコードが何をするためのものかです。
目的がわからないまま読むと、細かい書き方ばかり気になります。目的がわかると、どこを見るべきかがはっきりします。
たとえば、家計簿アプリなら金額計算、ログイン処理ならセキュリティや認証の扱いが重要です。
レビュー前には、次のような視点を持つと読みやすくなります。
| 確認すること | なぜ大切か |
|---|---|
| このコードの目的 | 何を達成すべきか判断するため |
| 入力される値 | 想定外の値で壊れないか見るため |
| 出力される結果 | 正しい結果になっているか見るため |
| 使われる場所 | 影響範囲を考えるため |
| 変更理由 | なぜ今この修正が必要か理解するため |
コードだけをいきなり見るのではなく、目的から見る。これは実務でも大切です。
まず見るべき基本ポイント¶
ここから、実際にコードレビューで見るポイントを整理していきます。
最初から完璧なレビューを目指す必要はありません。基本の観点を順番に見るだけでも十分です。
変数名や関数名はわかりやすいか¶
最初に見たいのは、名前です。
変数名や関数名がわかりやすいと、コード全体の理解がかなり楽になります。
次のコードを見てください。
def calc(x, y):
return x * y
短くて動きますが、何を計算しているのかわかりにくいです。
次のように書くと、意味が伝わりやすくなります。
def calculate_total_price(price, quantity):
return price * quantity
レビューでは、名前を見て役割が想像できるかを確認します。
短い名前が必ず悪いわけではありませんが、意味が読み取れない名前が増えるとコードは読みにくくなります。
同じ処理を何度も書いていないか¶
次に見るのは、重複です。
同じような処理が何度も出てくると、修正漏れが起きやすくなります。
price1 = 1000
tax1 = price1 * 0.1
total1 = price1 + tax1
price2 = 2000
tax2 = price2 * 0.1
total2 = price2 + tax2
このコードは、消費税を計算する処理が繰り返されています。関数にすると読みやすくなります。
def calculate_price_with_tax(price):
tax = price * 0.1
return price + tax
total1 = calculate_price_with_tax(1000)
total2 = calculate_price_with_tax(2000)
同じ処理が複数回出てきたら、関数にできないか考えます。
以下の記事でも、関数に分ける判断を解説しています。
【関連記事】Pythonで同じ処理を何度も書いてしまう人へ。関数化のタイミングを解説
1つの関数が多くのことをしていないか¶
関数は便利ですが、何でも詰め込むと読みにくくなります。たとえば、次のような関数があるとします。
def process_order(order):
total = 0
for item in order["items"]:
total += item["price"] * item["quantity"]
if total >= 5000:
shipping_fee = 0
else:
shipping_fee = 500
print(f"合計金額: {total + shipping_fee}円")
この関数は、合計計算、送料計算、表示をまとめて行っています。
小さいコードなら問題ないこともありますが、処理が増えると修正しにくくなります。
次のように分けると、役割が見えやすくなります。
def calculate_items_total(items):
total = 0
for item in items:
total += item["price"] * item["quantity"]
return total
def calculate_shipping_fee(total):
if total >= 5000:
return 0
return 500
def show_total_price(total, shipping_fee):
print(f"合計金額: {total + shipping_fee}円")
レビューでは、この関数は何を担当しているのかを考えます。説明しにくい関数は、役割が大きすぎる可能性があります。
初心者が自分のコードを見るときのポイント¶
自分のコードを見るときは、どうしても甘くなりがちです。
書いた本人は理由を覚えています。でも、数日後の自分は他人です。
未来の自分が読んでもわかるか、という視点で見直してみましょう。まず確認したいのは、処理の流れが追えるかです。
変数がどこで作られ、どこで使われ、何が出力されるのか。自分の言葉で説明できれば、理解できています。
次に、不要なコメントや古いコードが残っていないかを見ます。
コメントは大切ですが、コードと違う内容だと逆に混乱します。
# 税抜き価格を表示する
print(total_price)
実際には税込み価格を表示しているなら、このコメントは危険です。
コメントを書くなら、コードを読めばわかることではなく、なぜそうしているのかを書くほうが役立ちます。
後輩や他人のコードを見るときのポイント¶
後輩や他人のコードを見るときは、技術的な観点だけでなく伝え方も大切です。コードレビューは、相手を否定する場ではありません。
この書き方はダメです、よりも、この名前にすると目的が伝わりやすそうです、のほうが受け取りやすいです。
レビューコメントでは、理由を添えましょう。
たとえば、次のようなコメントです。
| 避けたいコメント | 改善したコメント |
|---|---|
| この変数名は悪いです | この変数は合計金額を表しているので total_price にすると読みやすくなりそうです |
| 関数が長すぎます | 合計計算と表示処理を分けると、あとからテストしやすくなりそうです |
| ここ違います | 入力が空文字のときにエラーになりそうなので確認を追加したいです |
| 何をしているかわかりません | この処理の目的を関数名かコメントで補足すると、次に読む人が理解しやすそうです |
レビューは相手とのコミュニケーションです。
正しい指摘でも、伝え方がきついと改善につながりにくいです。
エンジニア歴10年の中で、私も多くのレビューをしてきました。よいレビューは相手を萎縮させず、次に同じ観点を自分で見られるようにするレビューです。
AIが書いたコードを見るときのポイント¶
最近は、AIにコードを書いてもらう機会も増えました。
AIが出したコードは、一見きれいに見えることが多いです。
しかし、見た目が自然でも正しいとは限りません。
初心者ほど、AIが出したコードをそのまま信じたくなるかもしれません。自分より詳しそうに見えますよね。
でも、AIのコードにもレビューは必要です。
確認したいのは、まず目的に合っているかです。
たとえば、税込み価格を計算してほしいのに、税抜き価格のまま返しているかもしれません。
次に、エラー時の処理です。
price = int(input("価格を入力してください: "))
print(price * 1.1)
このコードは、数字を入力すれば動きます。
しかし、abcのような文字を入力するとエラーになります。
AIが生成したコードでも、入力値の確認が抜けていることはあります。
user_input = input("価格を入力してください: ")
if user_input.isdigit():
price = int(user_input)
print(int(price * 1.1))
else:
print("数字を入力してください")
このように、想定外の入力に対応しているかを見ます。
以下の記事では、AI生成コードを確認するときの考え方を詳しく紹介しています。
【関連記事】AIにコードをそのまま書かせても良い?最終的にチェックするべき項目は?
コードレビューで見るべき観点一覧¶
ここまでの内容を、実際のレビューで使いやすいように整理します。
迷ったときは、この表をチェックリストとして使えます。
| 観点 | 見るポイント | 例 |
|---|---|---|
| 目的 | 仕様に合っているか | 税込み価格を返すべきなのに税抜きになっていないか |
| 正しさ | 入力と出力が期待通りか | 空文字や0でも動くか |
| 読みやすさ | 名前や処理の流れがわかりやすいか | a, b, cだらけになっていないか |
| 重複 | 同じ処理を繰り返していないか | 同じ計算を複数箇所に書いていないか |
| 関数の役割 | 1つの関数が大きすぎないか | 計算、保存、表示をまとめすぎていないか |
| エラー処理 | 想定外の入力に対応しているか | 数字以外を入力したときに落ちないか |
| セキュリティ | 危険な値をそのまま使っていないか | パスワードを直書きしていないか |
| テスト | 確認方法があるか | 正常系と異常系を試しているか |
初心者のうちは、この中でも目的、正しさ、読みやすさ、エラー処理を優先して見るとよいです。
慣れてきたら、セキュリティやテストの観点も増やしていきましょう。
テストしやすいコードかを見る¶
コードレビューでは、テストしやすいかも大切です。テストしやすいコードは、入力と出力がはっきりしています。
たとえば、次のコードはテストしにくいです。
price = int(input("価格を入力してください: "))
total = int(price * 1.1)
print(total)
inputとprintが直接入っているため、計算だけを確認しにくいです。
次のように関数に分けると、テストしやすくなります。
def calculate_tax_included_price(price):
return int(price * 1.1)
print(calculate_tax_included_price(1000))
この形なら、1000を渡したら1100が返るかを確認できます。
assert calculate_tax_included_price(1000) == 1100
assert calculate_tax_included_price(0) == 0
レビューでは、このコードはどう確認するのかを考えると、問題に気づきやすくなります。
テストに興味がある方は、こちらの記事も参考になります。
【関連記事】pytest入門|Pythonでテストを書く基本を初心者向けに解説
セキュリティは初心者でも少し意識する¶
セキュリティというと難しく聞こえますが、初心者でも最低限見たいポイントがあります。
たとえば、パスワードやAPIキーをコードに直接書いていないかです。
API_KEY = "abc123secret"
このような値をGitHubなどに公開してしまうと、悪用される可能性があります。
また、ユーザーから受け取った値をそのまま使っていないかも重要です。Webアプリやデータベースでは特に注意しましょう。
初心者のうちは完璧でなくて大丈夫です。ただし、秘密情報をコードに書かない、入力値を信用しすぎない、という意識は持っておきましょう。
レビューコメントの書き方¶
コードレビューでは、何を見るかと同じくらい、どう伝えるかが重要です。
後輩のコードを見る場合、指摘ばかりになると相手はコードを書くのが怖くなってしまいます。
レビューコメントでは、次のような形が使いやすいです。
この処理は合計金額の計算に見えるので、変数名を total_price にすると読みやすくなりそうです。
ポイントは、理由を添えることです。
なぜ変えたほうがよいのかがわかると、相手は次から判断しやすくなります。
また、必須の修正なのか、提案なのかも分けると親切です。
ここはエラーになる可能性があるので修正したいです。
ここは好みもありますが、関数に分けると読みやすくなりそうです。
強い指摘と軽い提案を分けるだけで、レビューは受け取りやすくなります。
私がレビューで意識していること¶
私はエンジニアとして10年ほどコードを書き、レビューも多く経験してきました。
その中で感じるのは、コードレビューで一番大切なのは、未来の変更に強いかを見ることです。
今日だけ動けばよいコードと、半年後に直せるコードは違います。
実務では、書いた本人がずっと面倒を見るとは限りません。別の人や数か月後の自分が読むこともあります。
だから私は、レビューするときにこのコードは次に読む人が迷わないかをよく考えます。
細かい書き方よりも、処理の流れ、名前、責務の分け方、エラー時のふるまいを重視します。
もちろん、スペルミスやフォーマットも大事です。
でも、それ以上に大切なのは、このコードを安全に育てていけるかです。
初心者の方も、最初からプロのようなレビューをする必要はありません。
未来の自分が読んで困らないかという視点だけでも、コードの見え方は変わるのです。
コードレビューを習慣にするコツ¶
コードレビューは、特別なイベントにしすぎると続きません。まずはコードを書き終えたあとに3分だけ見直すところから始めるとよいです。
いきなり全観点を見る必要はありません。
今日は変数名だけ見る。次は同じ処理がないか見る。その次はエラー処理を見る。
少しずつ観点を増やしていけば十分です。
AIを使っているなら、次のように聞くのもおすすめです。
このPythonコードを初心者向けにレビューしてください。
特に変数名、重複、エラー処理の観点で見てください。
ただし、AIのレビューも正しいとは限りません。
AIの指摘をそのまま受け入れず、なぜ必要なのかを確認しましょう。
AIはレビューの先生ではなく、壁打ち相手として使うのがちょうどよいです。
まとめ¶
コードレビューは、コードの悪いところを探して責める作業ではありません。
コードをより安全に、読みやすく、保守しやすくするための作業です。
初心者がまず見るべきなのは、目的に合っているか、正しく動くか、名前がわかりやすいか、重複がないか、エラー時にどうなるかです。
自分のコードを見るときは、未来の自分が読んでもわかるかを意識しましょう。
後輩のコードを見るときは、理由を添えて伝えることが大切です。
AIが書いたコードを見るときは、見た目のきれいさに安心せず、目的、入力、出力、エラー処理を確認しましょう。
最初から完璧なレビューはできなくて大丈夫です。
レビューの力は、コードを読む回数とともに少しずつ育ちます。
今日書いたコードを、まず3分だけ見直してみてください。その小さな習慣が、読みやすく壊れにくいコードを書く力につながります。
ここまでお読みいただきありがとうございました。