コードレビュー時に気をつける観点について
こんにちは!サーバーサイドエンジニアのメグミです!
みなさん、プリンシプルオブプログラミング 3年目までに身につけたい一生役立つ101の原理原則という本はご存知でしょうか?
この本の存在自体は知っていたものの、読めていなかった私に同じチームのいっせいさんがおすすめしてくださり、最近読んでみました!
今回はその中で私が今大切にしたいと思ったところについて少し紹介したいと思います!
今回紹介したいこと
私は、コードレビューを行うのが苦手で、どんな観点で確認すればいいんだろう・・・と日々悩んでいました。
この本の 第3章の「思想 ~プログラミングのイデオロギー~ 」にある、「7つの設計原理」を読んでみて
コードレビューのやり方や考え方について勉強になったので紹介したいと思います。
コードの品質を向上させるために気をつけること
7つの設計原理
【1】単純原理
「シンプルにこだわる」ということ!
コードは複雑になればなるほど、バグを起こしやすいということです。
これはわかりやすいですね。
シンプルなコードであれば初心者でも理解しやすく、バグにも気づきやすいです。
逆に複雑な場合は、なにをしているか理解するのに時間がかかってしまい、複雑なためバグにも気づきにくそうですね。
ポイント
シンプルなコードは「素人っぽくみえる」ことがあるため、経験者は複雑なコードを書きたくなりがち。
その気持ちに打ち勝つようなメンタルを持て!
【2】同型原理
「同じことは、同じように扱う」ということ!
一貫性のあるコードを書くと、違ったものが目立って見え、バグに気づきやすいということです。
これは私が普段実装する際にも気をつけたいと思うことのひとつです。
ポイント
一貫性を無視して、スマートで独創的なコードを書く人がいるが、
それはプログラマのエゴである。自己満足は高品質なコードほどの重要性はない。抑制せよ!
【3】対称原理
「対になるものを考える」ということ!
その処理の対になる処理があるかを考えるということで、
あるフラグがたっている場合の処理があれば、落ちている場合の処理もあるだろうと考えることです。
これは私はよく忘れがちで、意識的に考えて実装したいなと感じました。
ポイント
対称性を意識することで、考慮漏れを防ぐことに繋がる。
でも、特殊なケースが多い場合は要求が整理されていない可能性があるため、
要求を見直し、コードから例外的状況をできるだけ排除する。
【4】階層原理
「構造が階層であることにこだわる」ということ!
物事の主従関係や前後関係などの階層構造のレベルをあわせることが大切ということ。
ポイント
コードを読む人が、全体を抽象化して理解することができ、必要に応じて階層レベルを下がって処理の詳細を把握することができる。
階層構造にすることで、コードも読みやすくなりプログラマの意図や仕様が伝わりやすくなる。
【5】線形原理
「処理の流れが一直線であることを意識する」ということ!
処理の流れが一直線だと、理解しやすいですね。
複雑な条件や繰り返し処理の部分でバグは起こりやすいので、
シンプルな流れを意識して実装を行うことが大切です。
ポイント
一筆書きできるような順序にすることで、可読性も向上する!
それにつられて保守性も上がり、機能追加などの改善も用意になる!
時折コードを俯瞰して、複雑になっていないか確認することも必要。
【6】明証原理
「明らかに正しいと証明できるコードを書く」ということ!
ロジックが明瞭なコードを書くことが大切。
コードは人が読み、人が修正するものなので、不確実性を取り除いたコードを書くようにする。
複雑になりそうな場合は適切なコメントを入れることも必要。
ポイント
コードの再利用を行う場合は、もとのコードをより一層理解することが重要!
使用実績があるからと、中途半端な理解で再利用してしまうと思わぬバグに見舞われる危険がある。
しっかりと処理を理解し、仮説と検証を行い品質を担保する。
【7】安全原理
「安全性にこだわる」ということ!
ありえないと思いつつも、安全を考慮して設計・プログラミングするということ。
すべての動作を洗い出し、それぞれが安全に動作するように設計することで
安全に動く確率が上がり、大事故につながるのを防ぐ。
ポイント
安全サイドにコードを書く!
要件や仕様書にある必要条件を考慮しつつ、ユーザーへヒアリングし機能と状況を網羅する。
それぞれの要件を安全に設計しコードに反映する。
さいごに
どうでしたか?
私自身、実装しているときは何点か意識しているつもりですが、
レビューになるとなかなか意識して確認できていないなと感じました。
この観点に気をつけて行うことで、一貫性のあるレビューをすることができそうです。
コード品質向上のために、技術的な知識はもちろん必要ですが、このような設計原理について知ることも重要だと感じました。
今回紹介したのはほんの一部なので、気になる方はぜひ読んでみてください!
おわり