アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 連載 » プログラミングの光景 » 第4回 コードレビューについて

プログラミングの光景

第4回 コードレビューについて

はじめに

「プログラミングに関する雑多な事柄」がテーマの本連載,第4回は「コードレビュー」について取り上げたいと思います。

コードレビューの方法

コードレビューは,文章のレビューと似ています。文章と同様にコードの場合も,人に見てもらうことで,わかりづらい部分や冗長な部分など,さまざまな問題点が見つかります。

自分の書いた文章を人にレビューしてもらうには,たとえば,文章をメールで送ります。この場合,レビューのフィードバックはメールの返信という形で受け取れます。

コードレビューの場合も同様の方法で行えます。コードレビュー用の市販ツールなどもありますが,人に見てもらってフィードバックを得るということが一番大切ですから,特に方法にこだわる必要はないと思います。

コードレビューのメリット

それでは,コードレビューに具体的にどんなメリットがあるのか見ていきましょう。

コメントの充実
コードを書いた本人にとっては当たり前と思えるような処理も,他人から見ると何をやっているのかよくわからない,ということは多々あります。「ここ,わかりづらいからコメントつけといて」というフィードバックに基づいてコメントを充実させていくと,のちのちのコードのメンテナンスに役立ちます。
変数名,関数名などの改善
コードを読みやすくする秘訣のひとつは,変数や関数にわかりやすい名前をつけることです。私の場合,以前,「is_data_initialized という変数名よりdata_is_initialized のほうがif文の中で自然に読めるからわかりやすいよ」というフィードバックをもらって感心したことがあります。確かに,
if (data_is_initialized) {
から記号を除くと "if data is initialized" となり,「もしデータが初期化されていたら」という自然な英語になります。
バグの発見
気をつけてコードを書いてテストを行っていても,うっかりミスで初歩的なバグを入れてしまうことはなかなか避けられません。他人の目を通すと,そうしたうっかりミスをキャッチできます。
APIの改善
クラスや関数の使いやすいAPIを設計するのは難しいことです。必要な機能が欠けているのは一番困りますが,呼び出しが煩雑なのも困りものです。コードを共有するメンバーからのフィードバックで,APIが洗練されていきます。
リファクタリング
「よし汚いコードを書くぞ!」と言ってわざわざ汚いコードを書く人は(特殊な状況を除けば)いません。しかし,そのつもりはなくてもいつのまにか汚いコードになっていたりします。コードレビューを行えば「ここのコード,ほかと重複しているから関数にしてまとめたら?」のようなフィードバックによって汚い部分の洗い出しができます。
ノウハウの共有
ちょっとしたノウハウを知っていれば,短くわかりやすく書けることでも,それを知らないと,煩雑なコードになってしまうことがあります。同様に,ちょっとしたノウハウを知らないためにセキュリティ上の問題となるコードを書いてしまう,という場合もあります。
コードレビューはそのようなノウハウを交換するのに非常に有効です。
その他
このほかにもコーディングスタイルの統一,パフォーマンスの改善やテストケースの充実など,コードレビューを通じて得られるメリットはたくさんあります。

コードレビューのコツ

自分のコードを人にレビューしてもらうのは,多少の緊張が伴う行為です。「こんなコードは全然ダメだ!」と完全に否定されてしまったら,しばらく立ち直れそうにありません。あるいは,そんなことを言われたらカンカンに怒ってしまう人もいるかもしれません。

むくつけきコード…

むくつけきコード…

こうしたトラブルを避けるには,よく書けている部分をほめたり,断定的な表現を避ける,といったちょっとした気配りが役に立ちます。コードレビューに円滑なコミュニケーションは欠かせません。

それから,「すでにたくさん書いてしまったコードを今さら直せと言われても…」という事態を避けるためには,できるだけこまめにコードレビューを行いたいところです。

まとめ

今回はコードレビューについて書きました。コードレビューは,コードの品質を高める効果的な方法のひとつです。ある程度の時間がかかりますが,効果的に行えば,要する時間よりも得られるメリットのほうが大きいはずです。

著者プロフィール

高林哲(たかばやしさとる)

ソフトウェアエンジニア。バッドノウハウの研究,スルー力の探究,自転車置場の建設,Binary 2.0の布教などの活動を行っている。共著に『Binary Hacks』(オライリー 2006年)。ブログはhttp://0xcc.net/

著書

  • Binary Hacks ハッカー秘伝のテクニック100選

    Binary Hacks ハッカー秘伝のテクニック100選(オライリー・ジャパン)

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

使ってみよう! Windows Live SDK/API

Windows Liveサービスの一部にはAPIやSDKとして提供されているものがあります。本連載では各API・SDKの紹介とそれらを利用したアプリケーションを開発していきます。

Lifelog~毎日保存したログから見えてくる個性

コンピュータを使って,日常のさまざまなことの記録(ログ)をとり,それを分析して活用することで,もう一段階上の「楽な生活」をめざす日々の研究報告です。

もっと便利に!jQueryでラクラクサイト制作(実践サンプル付き)

本連載では,実践サンプルとともに,jQueryを上手に活用してサイト制作の品質向上・効率化を実現するための実践テクニックを解説します。

Ruby Freaks Lounge

Rubyに関わる,執筆者自身の旬なテーマを扱った,リレー形式の連載です。

これでできる! クロスブラウザJavaScript入門

JavaScriptはウェブ制作において避けては通れない重要な言語ですが,JavaScriptに苦手意識を持たれている方は少なくないようです。 その最大の原因がクロスブラウザ対応という課題であり,本連載ではクロスブラウザ対応のテクニックを詳細に解説します。

ビジネスで成功するためのシステム運用管理のポイント

システムの多様化,技術進歩に伴い,ITシステムの運用管理の必要性が年々高まっています。本連載では,システムの運用管理とは何かについて,現場のニーズと具体的な指針を押さえながらを解説します。

2010年版SEO体得講座

本連載では,いまや企業サイトの戦略の1つとして欠かすことのできないSEOについて,最新トレンドからすぐに使えるTipsまでを紹介します。

小型Linuxサーバの最高峰 OpenBlockS 600活用指南

搭載メモリの増加,CPUクロックの向上など,あらゆる面が強化された期待の新モデルOpenBlockS 600。この記事ではOpenBlockS 600の紹介から,活用するためのさまざまなノウハウを紹介していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス

最近のコメント