Skip to main content

開発者のための、実証済みコードレビューのベストプラクティス8選

著者
blog hero trojan source unicode

2022年1月14日

0 分で読めます

セキュリティコードレビューとは、コードが外部の脅威からどの程度保護されているかを確認するプロセスです。コードには、アプリケーションや周辺のコードブロックを危険にさらす、根本的なセキュリティ上の弱点が潜んでいる可能性があります。ピアレビューは、包括的なセキュリティ対策を実現するために、自動テストを補完する手動のプロセスです。セキュアコードレビューでは、セキュリティ上の弱点を特定するとともに、アプリケーションの動作に関わるコードロジックのエラーも見つけられます。この種のレビューは、企業の収益や評判に影響を及ぼしかねない、データや知的財産の損失からアプリケーションを保護します。

ソフトウェアの品質とセキュリティを高める最善の方法の1つは、手動コードレビューの正式なプロセスを導入することです。コードを書く過程ではエラーが起こり得るため、異なる専門知識を持つ複数の人が新たな視点で確認すれば、最初に書いたプログラマーが見落とすようなミスも発見できます。また、人は誰でも間違える可能性がありますが、専門家がチームで取り組むことで、自動コードレビューツールが見逃すバグやセキュリティ上の欠陥を見つけられることがあります。

ピアコードレビューには多くのメリットがありますが、レビュー担当者を集めてすばやく作業を進めるのが難しい場合もあります。この課題には、コードレビューのプラクティスを定めることが有効です。プロセスの指針があれば、目標である高品質でセキュアなコードの実現につながります。ここでは、企業のソフトウェア開発プロセスに取り入れられる、コードレビューのガイドラインを8つ紹介します。

1. ソースコードの作成時にコメントを追加する

まず、開発者はコードの各セクションに、機能には影響しないコメントを記述して、コードブロックの意図をレビュアーに伝えましょう。コメントがあれば、レビュー担当者が推測することなく、開発者がその判断や変更を行った理由を理解できます。適切に記述されていれば、経験豊富なレビュアーはコメントを手がかりに、コード全体の目的や手法を理解できます。また、スタイルガイドを用意して徹底すれば、チーム全体でコードの読みやすさを保てます。

2. テストせずに動作すると決めつけない

コード開発では、試行錯誤を繰り返します。開発者がコードを書き、コンパイルしても、動かないことがあります。新しいコードの機能や出力をテストすれば、後のレビューにかかる時間を大幅に短縮できます。また、ほかのコードが適切に機能していると分かっていれば、小さなコード部分の修正も容易になります。テスト駆動開発(TDD)は、コードを実装する前にユニットテストを書く手法です。特定の機能ブロックを事前に確認できるため、レビュアーはこれらの機能を残りのコードに統合する部分に集中できます。

3. 提案されたコードにテストスイートを実行する

特定の手順を検証する方法の1つは、自動テストスイートを使って各コードブロックのユニットテストを作成することです。テストスイートは、既知の関数群を使ってコードを評価し、期待される結果が得られるか確認します。コードが特定のアクションを実行する能力を評価するもう1つのツールでもあり、1つ以上のタスクを実行するコード部分の検証を効率化します。テストに失敗すれば、開発者が修正すべき箇所を特定できます。

4. プルリクエストは小さく、目的を1つに絞る

プルリクエスト(PR)は、ピアコードレビューを依頼するための標準的なプロセスです。開発者が最初のコード変更を完了すると、PRを通じてレビューが始まります。手動コードレビューの効率とスピードを高めるため、レビュアーへの具体的な指示を添えてPRを作成しましょう。PRの内容が大きくなるほどレビューに時間がかかり、レビュアーが主な目的を見落とすリスクも高まります。実際、理想的なPRのサイズは250行未満です。レビュアーは1時間以内に欠陥の70~90%を発見できます。

CTFを始めよう

オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。

5. 自動コードチェッカーを必ず実行する

ピアレビューの前に、開発者はスキャナー、自動コードチェッカー、静的コードアナライザーなどのコードレビューツールを使って、変更後のコードベースの品質を評価できます。これらのツールは、関数名の誤りやスペースの問題といった、明らかな書式ミスを検出します。スキャナーやリンターには明確なルールがあり、コードのスペルチェックのように素早くエラーを見つけます。こうしたツールで作業を自動化すれば、手動のピアレビューでチームがスタイルや解釈に関する誤りに集中できます。

たとえば、JavaコードレビューツールはJavaコードのバグやセキュリティ問題を検出し、開発者がすばやく修正できるよう、実行可能なアドバイスを提供します。Snyk CodeはIDE上でコード品質に関する推奨事項を提示し、開発者にストレスのない使い心地を提供します。

IDEプラグインでのコード品質スキャン

Snykのコード品質スキャン機能は、2025年7月17日以降にリリースされる新しいプラグインバージョンではご利用いただけません。

6. すべてのコードとPRをレビューする

コードは順序立ててつながっているため、レビュアーはコード全体とPR一式を確認し、一貫性を評価する必要があります。ある箇所の変更が後続のサブルーチンに大きな影響を及ぼすことがあるため、コードレビューのチームは、コード全体とすべてのPRを考慮しなければなりません。規模が大きく、重要なPRには自然と注目が集まりますが、小さなPRのエラーが、広範なPRに含まれる複数の不具合よりも深刻な影響を及ぼすこともあります。

7. レビュー時間と確認するコード行数に上限を設ける

コードレビューは時間がかかり、骨の折れる(しかし不可欠な)作業です。そのため、レビュアーやチームがコードの各行の確認に費やす時間を制限することが重要です。たとえば、レビューに1時間以上かけない、または一定時間内に数百行を超えてレビューしない、といったプラクティスが挙げられます。こうした方針は、コードレビューのチームが目標を共有し、PRに関係するコードを丁寧に確認できるようにします。チーム全体で効率よくコードレビューを進めれば、開発者は有益なフィードバックを得て、コードの品質をすばやく向上させられます。

8. セキュリティコードレビューを実施する

コードレビューのもう1つのベストプラクティスは、セキュアコードレビューを実施することです。自動ツールは、スペースや命名の誤りを確認し、既知の標準関数とコードを比較します。一方、手動レビューでは、コードのスタイルや意図、機能上の出力を評価します。3つ目の評価方法であるセキュリティコードレビューでは、開発者のコードがどれだけ堅牢なセキュリティを備えているか確認します。

コードには、アプリケーションや周辺のコードブロックを危険にさらす潜在的な脆弱性が含まれている可能性があります。セキュアコードレビューでは、こうした脆弱性に加え、アプリケーションの動作に関わるロジックのエラーも特定できます。開発者は、知的財産の盗難や収益の損失、データの流出などにつながる外部からの攻撃からコードを保護できる環境で、コードを作成する必要があります。

幸い、脆弱性がコードレビューに持ち込まれる前、またはコードスキャンの実行時に検出できる静的アプリケーションセキュリティテスト(SAST)ツール(Snyk Codeなど)が利用できます。また、ソースコードを保護し、セキュアコードレビューを効率化するためのセキュアコーディングのベストプラクティスもあります。具体例としては、コードへのアクセス制限、強力な暗号化の適用、パスワードやハードコードされた情報が広く共有されないようにするシークレット管理の導入などが挙げられます。

コードレビューの進め方:まとめ

開発者はコードを継続的に改良し、最適化できますが、それでもすべてのエラーやセキュリティ上の欠陥を発見できるとは限りません。ピアコードレビューのプロセスを導入すれば、開発チームは本番環境にコードをデプロイする前に、ソフトウェアが適切にテストされたことを確認できます。自動コードレビュー、手動のピアレビュー、セキュアコードレビューのプラクティスを組み合わせることが、高品質でセキュアなコードをすばやくリリースする最も効率的な方法です。

Snykが提供する、開発者が正確でセキュアなコードを作成するための選択肢やツールについては、セキュリティリソースページをご覧ください。

無料のオンラインコードチェッカーツール

次のコミットの前に、コードを安全に保護しましょう。