命名規則の重要性と選定方法について
はじめに
開発を進めていく上で、命名規則を理解することは自身だけでなくチームの生産性にも直結するためかなり重要だと感じています。
命名規則の重要性と選定方法についてまとめていきます。
※ 細かい解説は参考記事に網羅されているためそちらを参照したいと思います。
命名規則とは
変数や関数、ファイル名、クラス名などの名前を決める際のルールや規則のことを指します。
コードを読む人がその意図を理解しやすくするために、意味のある名前を付けないといけません。
コードの可読性はチーム全体の生産性に直結する
過去に書いたコードを改修する際に分かりづらいと理解に時間がかかったり、コードを追って読みにいく必要が生じてしまいます。
レビューをしてもらう場合、修正が発生しやすいのが命名です。命名を理解しているだけでもレビュワーの負担が減って生産性を下げてしまうことは減るでしょう。
最初はまず命名規則をしっかり理解することが大切です。
命名規則をしっかり理解して守ることはプロジェクトの保守性だけでなくチーム全体の生産性に直結します。
命名におけるポイント
主に関数名や変数名で意識するポイントは解説します。役割や意味が異なるため、状況に応じて適切な単語を使い分けるべきです。
適切な単語を使用することで、直感的かつ明確に伝わります。
リーダブルコードの要約に加えて補足
明確な単語を選ぶ
状況に応じてGet、Set、Fetch、Downloadなどの単語を使い分けます。
APIを取得する関数名としてはFetchやDownloadよりもGetが一般的ですが、データを取得するだけでなく、更新や削除などの操作に関する関数名は、APIの種類や使い方によって、FetchやDownloadよりもUpdateやDeleteなどが適している場合があります。
汎用的な名前は避ける
例えば、以下のような抽象的な変数名は避けるべきです。
- data
- value
- tmp
「何のデータ? データと言っても幅広い表現だな..」となりますよね。
スコープが小さいなど明確な理由がある場合は問題ありません。
同じスコープ内で複数の変数名が似たような形式で命名されていると混乱しやすくなるため注意が必要です。
抽象的ではなく具体的な単語で命名する
- ex) ServerCanStart() -> CanListenOnPort()
サーバーが起動可能かどうかをチェックする関数名として、ServerCanStart()という名前を付けるのではなく、具体的にサーバーがリッスンしているポート番号をチェックする関数として、CanListenOnPort()という名前にすると、関数名だけでその関数が何をするかが明確になります。 ただし、冗長になりすぎないように注意が必要です。
接尾辞や接頭辞を使って情報を追加する
- ex) ミリ秒を表す変数名には後ろに_ms
サーバーの応答時間を表す変数名として、responseTimeという名前を付けるのではなく、responseTime_msという名前にすることで、その変数がミリ秒を表していることが明確になります。
スコープの大きい変数には長い名前をつける
- スコープが数画面に及ぶ変数には1~2文字の暗号めいた名前はNG
画面上で使われる一時的な変数や、関数の引数など、スコープの小さい変数には、短い名前を使うことができますが、スコープが大きい変数には、長い名前を使うことで、変数が何を表しているかが明確になります。
大文字や_などに意味を込める
定数として扱われる変数名には、大文字で始まる名前を使うことが一般的です。例えば、const MAX_COUNT = 10;のように、定数の値を示す変数名には、大文字で始まる名前を付けることができます。
Booleanを返す関数の命名
Booleanを返す関数の命名は以下のようなbe動詞、助動詞、動詞が用いられます。真偽値を返す点とどんな真偽値を返すのかが直感的かつ明確に伝わってきます。
is○○
何らかの条件を満たしている場合にtrueを返す場合に使用されます。
例) isActive、isVisibleなど。
has○○
何らかのデータが存在する場合にtrueを返す場合に使用されます。
例) hasChildren、hasItemsなど。
can○○
何らかの操作が可能な場合にtrueを返す場合に使用されます。
例) canEdit、canDeleteなど。
should○○
何らかの条件を満たすべき場合にtrueを返す場合に使用されます。
例) shouldRender、shouldUpdateなど。
配列を返す関数の命名
主に配列を返す関数の命名です。
get○○
何らかのデータを取得し、配列を返す場合に使用されます。
例) getResults、getValuesなど。
find○○
特定の条件を満たす要素を配列から検索し、配列を返す場合に使用されます。
例) findUsers、findItemsなど。
filter○○
特定の条件を満たす要素を配列からフィルタリングし、配列を返す場合に使用されます。
例) filterActive、filterVisibleなど。
sort○○
配列の要素を並び替えて配列を返す場合に使用されます。
例) sortNames、sortValuesなど。
こちらの記事はとてもわかり易く解説されています。
https://qiita.com/YutaManaka/items/62dda256bb7ba6c08399#j動詞目的語形容詞
命名に困ったら
ネーミングツールを使う
codicは日本語の文章を入力すると、その文章に含まれる単語や熟語の意味や読み方を表示してくれる辞書ツールです。
この例ではユーザーのスケジュールを一括更新する関数の命名を調べています。 キャメルケース、スネースケースなど設定を変更したりすることも可能のため、命名で迷ったときは使ってみることをおすすめします。
ChatGPTを使う
こちらもかなり実用的です。 学習で困ったときは是非活用してみてください。
おわりに
コメント
本記事の内容は以上になります!
適切な命名を考えるのに迷ったりすることもありますが 命名は重要ですのでしっかり押さえておきたいと思います。 書籍、検索、ツールを活用しつつもインプットしていくことが重要です。
間違いがありましたら修正いたしますので、ご指摘ください。
興味があれば他の記事も更新していきますので是非ご覧になってください♪
◇ プログラミングスクールのご紹介 (卒業生より)
ご不明な点ありましたらお気軽にコメントどうぞ!