「良いコードを書くために必要なこと」

良いコードとは?

みなさんは「良いコード」と聞いて何をイメージしますか? きっと次のようにいろいろな思いを抱かれる方がいることでしょう。

良い仕事をしたい普通のプログラマ
別にハッカーを目指すわけでもないし、休日はパソコンに向かうより家族との時間を大切にしたいです。でも、だからといってプログラムが嫌いなわけではありません。良いコードは書けるようになりたいし、高いクオリティの仕事をしたいです。
達人プログラマを目指す中級プログラマ
新しい技術は大好きっす。書籍やWebでの情報収集は常識なので、良いコードは書けていると思うっす。ただ、最近はインプットが多過ぎて、ちょっと消化不良気味。ときにはアウトプットしていきたいなぁ。
達人プログラマ
良いコードが書けるようになるには時間が必要じゃ。焦らず積み上げていけば必ずや誰でも良いコードが何かわかるようになるはずじゃぞ。すべてはやるかやらないかじゃ。

一口に良いコードと言っても状況が異なると定義も変わってきます。一般的に次の4つを満たすものが良いコードと言えるでしょう。

保守性が高い

私たちが書いたコードは、私たちが想像するよりも長く利用されます。あとから見て何をやっているのか理解不能なコードは良いコードとは言えません。将来の自分は記憶力において他人と同然です。つまり、他人が見て理解できるコードであれば、将来の自分が見ても理解できる良いコードであると言えます。

具体的には変数やメソッドに適切な名前を付けて、スコープを小さくすると可読性と保守性が高まります。また、長いコードの分割や重複したコードの集約により、理解しやすく保守性の高いコードが実現できます。

すばやく効率的に動作する

似たような実装がいくつか考えられるとき、あきらかに効率の悪いものを選択する必要はありません。良いコードは適切なパフォーマンスで動作します。コードの計算量を常に意識し、最適なアルゴリズムを選択することでパフォーマンスを高めることができます。

正確に動作する

確実に動作し、信頼性が高いことは良いコードの条件です。⁠防御的プログラミング」という言葉がありますが、これは「正常な値が来るはず」という決めつけをせずに、不正な値が来ても被害を受けないように防御的にプログラミングを行うことです。良いコードは防御的で、不測のバグを生み出しにくい作りになっています。ユニットテストを導入してテストの自動化を行うことで、バグが少なく正確に動作するコードが実現できます。

無駄な部分がない

無駄がないコードは理解するのも修正するのも簡単で時間がかからないため、良いコードと言えます。コード内に繰り返し現れるパターンを劇的に短くする方法として抽象化やメタプログラミング、フレームワークの導入があります。特にフレームワークを使うだけではなく、実際に作ってみると動作原理がよくわかるのでお勧めです。動作原理がわかれば抽象化が理解でき、より無駄のないコードが書けるようになります。

良いコードが書けるようになるとプログラミングがどんどん楽しくなります。日々の習慣を積み重ねて、良いコード、良い仕事を目指していきましょう。

(縣 俊貴)