綺麗なコードでチームに貢献
目次
自己紹介
初めまして。リフォーム領域をはじめとしたマッチングサービスを展開するライフサポートDivでエンジニアをしています浦崎です。ライフサポートDivは主にリフォーム会社の情報・見積比較サービスを展開している「リショップナビ」と、プロパンガス会社の情報・見積比較サービスを展開している「エネピ」を運営しています。
この記事では私が実際に開発をしていて、今すぐ改善できる美しくないコードの書き方を紹介します。
エンジニアとしてただ動くものを作成するのではなく、可読性が高く新規開発、保守がしやすいコードを書くことは、チーム全体の開発効率に大きく関わり生産性の向上に繋がります。
今回の記事では、綺麗なコードを書く重要性と、実施にどの言語でも汎用的に使用できる綺麗なコードの書き方を紹介したいと思います。
綺麗なコードとは
一言でまとめると「可読性の高いコード」と言えると思います。
可読性を高めるには、ファイル構成や責任単一原則、関心の分離など色々な要素があると思いますが、ここでは下記のことを中心に書いていきます。
不要なコードや不揃いなインデントがなく、class単位で、処理している内容を把握しやすいことだと思います。その中でも、引数や関数、ifやforなどの書き方が重要だと思います。
綺麗なコードはチーム全体の開発効率を良くする
綺麗なコードを書く意識が低い場合、以下のような影響が出てしまうことをまず念頭におきましょう。
- レビュアー(コードを添削する人)の時間を大幅に奪う
- 書いた自分も、どこにどんな影響が出るのか把握するのに時間がかかる
綺麗なコードを書くことで自分自身だけでなく、レビュアーの時間や労力を削減でき、効率良く開発を進めることができます。
今すぐ改善できる美しくないコード
コードが汚くなってしまう、汚いコードの書き方をいくつか紹介します。
その中でもすぐに改善できるものを紹介します。
- if文のネスト
- マジックナンバーの使用
- フラ部引数の使用
- デッドコード
1.if文のネスト
以下のようにif文がいくつもネストされたコードはとても読みづらく、可読性を下げてしまいます。
if(条件){
コード
if(条件){
コード
if(条件){
コード
}
}
}
対策としてはreturnを早めに使用することです。
if( number < 0 ) return;
コード
if( number % 2 !== 0 ) return;
コード
if( number < 100 ) return;
コード
こうすることでネストが解消され可読性が上がります。
このように関数などで先頭にreturnを使用する書き方をガード節と言い、else ifやelseが連続で使用される時などにも使用できます。
また、forやforeachのなかでif文を使用する時はreturnの代わりにcontinueを使用することで可読性だけでなく、処理速度も向上します。
2.マジックナンバーの使用
マジックナンバーとはコード上に直接書き込まれている意図の不明な数値のことです。
以下のメソッドの20が何を表しているかわかるでしょうか。
function isOK($value) {
return 20 === $value;
}
function add($value){
return $value + 20;
}
この20はあるお店で期間限定で追加されるポイントの数を表しています。
このようにとてもわかりにくく可読性のみならず、ポイントの量が変更になった時などに対応するには、全て変更しないといけなくなり、汎用性に乏しくなってしまいます。
3.フラグ引数の使用
フラグ引数とはメソッドの機能を切り替えるときに引数にboolean型を渡すことをフラグ引数と呼びます。
フラグ引数を使用すると可読性が下がります。
以下のようなメソッドは実際に何が行われているかわかりにくいです。
contact(true,$message);
以下がcontactメソッド内部です。
function contact(contactFlag,$message){
if(contactFlag == true){
ユーザーにメッセージを送信する処理
}else{
お店側にメッセージを送信する処理
}
}
ここではbooleanがtrueだとユーザーに、falseだとお店にメッセージを送信するようになってます。
初めてcontactを見る人はcontactメソッドの内部まで見ないと何をしているかわかりません。
対策としてはそれぞれメッセージを送信するメソッドを分けることです。
function send_message_to_user($message) {
ユーザーにメッセージを送信する処理
}
function send_message_to_shop($message) {
お店にメッセージを送信する処理
}
そして呼び出し元はend_message_to_user($message)か
send_message_to_shop($message)を使用することで、このメソッドが何をするのか、メソッド内部を見ないでも理解できます。
デッドコード
デッドコードとは実行されないコードや、実行しても意味がないコードのことをいいます。
デッドコードが残っていると、余分にメモリを消費したり、メンテナンス時に混乱を招く原因となり、
解読するのに時間がかかってしまいます。
メンテナンスの意味でもデッドコードは無くした方が良いです。
まとめ
今回紹介した内容は、皆さんもすぐ取り組むことができる内容だと思います。
実際には、コメントアウトや、変数の名前の付け方を工夫するなど、多種多様な方法があり、可読性が高くなるようなコードは、言語やチーム内のルールで変わってくると思います。
ファイル構成、変数の定義の仕方、インデントの数、コメントの仕方など、チームである程度ルールを決め、定期的にリファクタリングをすることが、可読性が高く効率的な開発を進めるために大事なことだと思います。
「可読性の高いコード」は自分自身だけでなく、チーム全体に影響を与え、サービス全体の生産性向上につながります。可読性を高める書き方は、数多くありますので、下記の本などを参考にしてください。
良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方
著者:仙塲 大也
出版日:2022/4/30
概要
本書は、より成長させやすいコードの書き方と設計を学ぶ入門書です。
システム開発では、ソフトウェアの変更が難しくなる事態が頻発します。
コードの可読性が低く調査に時間がかかる、
コードの影響範囲が不明で変更すると動かなくなる、
新機能を追加したいがどこに実装すればいいかわからない……。
変更しづらいコードは、成長できないコードです。
ビジネスの進化への追随や、機能の改善が難しくなります。
成長できないコードの問題を、設計で解決します。