「良いコード」とは何か? ~「良いコード」のための指針~

みなさんこんにちは、管理人のだっつんです。
いかがお過ごしでしょうか?
今回は「良いコードとは?」というテーマで1つ記事を書いてみました。
この記事は以下のような方におすすめです。
- コードの可読性を高めたい
- コードの書き方に悩んでいる
- コードレビューの時によく体裁を指摘される
「良いコード」といっても人によって感じ方は様々です。ここでは管理人が考える
「良いコード」を書くために重要だなと思ったことを3つに絞ってまとめてみました。
記事の最後には参考になりそうな書籍も紹介しているので参考になれば幸いです。
管理人が考える良いコードとは?
管理人が「良いコード」を書くのに重要だと考えていることを書く前に
管理人が考える「良いコード」について書いておきます。
みなさんが「良いコード」像を考えるうえで参考になれば幸いです。
管理人が考える「良いコード」とは以下のことを満たしているものです。
その1:保守性や可読性が高い
これは「良いコード」を考えるうえで非常に重要な要素だと個人的に考えています。
可読性が高いとは、
- 初心者であっても処理の流れが理解できる
- 直接関係ないプログラマが見ても簡単に内容が理解できる
ことだと思っています。業務に関係があるプログラマが理解できるのは当然ですが
個人的にはそれ以外のプログラマや初心者、会社で言うと新人が簡単に内容が理解できて初めて
可読性が高いと言えると思います。そういったコードは自然と保守性も高くなりますし
新しい人員を投入しても大きく生産性が損なわれることもないと考えています。
可読性はコードレビューの際の工数削減にもつながりますし、処理がシンプルになるはずなので
試験もしやすくなるはずだと考えています。
保守性については
- 仕様変更があっても柔軟に対応できる
- 不具合発生時の原因究明、不具合発生箇所の切り分けが簡単にできる
- 改修の際に以前の担当者が不在でも生産性を落とさずに作業を進められる
という条件を満たすことが保守性が高いと考えています。
どれも当たり前のことかもしれませんが、実際のソースコードを見てみると
あまり力が入れられているとは言えない部分なんじゃないかと仕事をしていて感じます。
特に仕様変更や改修というのはソフトウェア開発では非常に多いと思うので
その際に手を入れにくくなっていたり、現状の調査に大幅な時間がかかってしまうコードは
ナンセンスだと思います。仕様変更でも改修であっても一定の生産性で作業できる状態が
望ましいと個人的には思っています。
その2:適切なレベルで関数に分割されている
これは意外と多かったりするのですが、1つの関数で色々なことをやろうとしていたり
1つの関数で1000行ぐらいあったりするコードを時折見かけます。
どこまで関数を分けるかといった部分は議論の余地はありますが、少なくとも上記に挙げた例の場合は
適切なレベルで関数に分割できているとは言えないでしょう。
適切なレベルで関数に分割できていれば処理もシンプルになりますし、ネストもそこまで深くならずに
済むはずです。その1の可読性にもつながる部分だと思うので重要だと考えています。
上記の2点が「良いコード」を考えるうえで管理人が重要視していることです。
さて、それらを踏まえたうえで「良いコード」に近づくために重要なことを書いていきます。
変数名・関数名にこだわる
皆さんはコードを書くときに関数名や変数名こだわっていますか?
管理人も就職した当時はプログラミングをほとんど知らなかったので
変数名や関数名にそこまでこだわっていませんでした。
この記事の最後に紹介している本に出会ってから変数名や関数名を意識してこだわって書くように
変わりました。変数名や関数名にこだわることで
- コードの保守や可読性の向上
- コメント量削減
上記のようなメリットがあります。特にコメントにどんなことを書いたらいいのかと悩んでいる人は
まずは関数名にこだわってみましょう。コメントにこだわるよりもはるかに有意義です。
極端かもしれませんがコメントでの補足が必要ないぐらいの変数名や関数名をつけられるとベストです。
また、コメントから関数の機能の予測やどんな変数なのか予測がつきやすいので
非常にコードレビューやコードを見直す際の作業効率がアップします。
関数名や変数名を考えるのは少し手間ですが、その手間をかけることでリターンは何倍にもなるでしょう。
例外の発生しないコードを目指す
意外とこれは見落としがちな点かもしれませんが
コーディングをしていく中で例外処理を実装することがあります。
しかし、その例外処理は本当に必要ですか?
管理人は極力例外の発生しないコードを目指しています。
理由としては以下の3点が挙げられます。
- 処理負荷の軽減
- コード量削減
- 処理に余計な分岐を発生させない
現在はPCの性能も上がり、あまり意識する機会も減っているのかもしれませんが
例外処理は思っている以上に処理負荷がかかります。
組込開発などリアルタイム性が求められるプログラムでは例外処理が発生しないようにコードを書きます。
それほどに、例外処理による処理の遅延が大きいということです。
例外の発生を防ぐために引数に入れる数字や文字列などの入力チェックをあらかじめしてしまう、
入力桁の制限など処理時に例外が発生しそうな入力を受け取らないようにします。
このような対策をすることで例外の発生を防止し、かつtry-catch文や例外処理に必要なコードを削減できます。
また、処理も例外処理を考えてよくなる分、非常にシンプルになるでしょう。
特にGUIアプリケーションを作成している方には数字や文字列などの入力チェックをおすすめします。
皆さんも例外が発生しないように意識してコードを書いてみてください。
If文やswitch文のネストは深くしない
時々ネットで紹介されているコードを見るとif文のネストがとても深いものを見つけたりします。
参考になるコードであることも多いので、管理人はネストを減らして使用することが多いです。
ネストが深くなることで処理を追うときに条件を考えながら読み進めていかなければならず
非常に作業効率を落としてしまいます。
ネストを深くしないコツとしては
- 異常が発生した場合は早めに戻り値を返す
- 複雑な処理を関数化する
管理人は上記のことを意識しながらコーディングしています。
以上が管理人が「良いコード」を書くのに重要だと考えていることです。
皆さんの「良いコード」を書くための参考になれば幸いです。
最後に
今回はいいコードを書くための指針ということで管理人が気を付けている
- 変数名・関数名にこだわる
- 例外の発生しないコードを目指す
- If文やswitch文のネストは深くしない
という3つのポイントを紹介しました。
これらのどれかでもいいので意識して試しにコードを書いてみて下さい。
今までのコードとは見違えるようになるはずです。
最後に管理人が良いコードを書くための指針を学んだ本を紹介しておきます。
購入して1度目を通してみるのもおすすめです。
それでは今回はこの辺で、また次の記事でお会いしましょう!!
管理人おすすめ!!良いコードを書くための本
管理人が「良いコード」とは何か?と思うきっかけをくれた本です。
ネストを浅くする方法や、変数名や関数名の付け方など今も非常に役立つことを吸収できた1冊です。
見た目は難しいそうな本にも見えますが砕けた内容で進んでいくので、イラストとも相まって
非常に読みやすいです。今も読み返したりする管理人の原点とも言える本です。
こちらはタイトルには達人プログラマーとありますが、達人というよりは実践という意味にとらえたほうが
しっくりくるような内容になっています。
先ほどの本はコードの書き方に言及した1冊でしたが、こちらはコーディングだけでなく
システムエンジニアとして必要なことも学べる1冊となっています。
設計やシェルスクリプトなどにも言及しているので読み物としても面白いです。
コーディングだけでなく全体的にレベルアップしたい方はこちらがおすすめです。
