こんにちは!ワイドソフトデザイン入社3年目の富士です。
いくつかのシステム開発を経験する中で、設計の大切さを実感しつつある今日この頃です。(まだまだひよっこですがw)
良い設計が出来るよう、何冊か設計入門書を読んでいたところ、共通して言われていたのが「名前設計」でした。変数、関数、クラス名、フォルダ名など名前の付け所は多数ありますが、今回は「変数の命名」に絞ってご紹介したいと思います。
なぜ名前を付けるのが重要か
変数の命名規則や名前の付け方は、コードの可読性や保守性に直結するからです。
例えば、こんなケースが考えられます。
Aさんが電卓風の四則演算をするプログラムを作った際、「足し算・引き算・かけ算・割り算」をするメソッドをそれぞれ「Method01・Method02・Method03・Method04」と命名したとします。3ヶ月後、Aさんは退職してしまい、後任のBさんが消費税の計算機能を実装することになりました。
Bさんは既存のかけ算メソッドを使って消費税計算機能を実装しようとしましたが、Method名からはかけ算メソッドが判断できませんでした。そのため、Method01から順に確認していくハメになりました。
このケースの四則演算のメソッド程度であれば数行ですが、システム規模に比例して確認しなければならない量は増えていきます。
また、「自分が作ったあと、他の人が困るだけならいいじゃないか」という考えの人もいるかもしれませんが、1年後の自分が見た時、何をしているか分からなければ自分の手間が増えてしまいます。
つまり、適切な名前を付けることは、将来の自分自身や他の開発者が効率的な開発をする上で重要であるということです。
良くない変数名の付け方
プログラムを作る際、以下のような名前の付け方をしていないでしょうか。
チェック項目 | 具体例 |
---|---|
□用途が分からない | temp, hoge, value1 |
□意味が分からないほど省略された名前 | d, p1, clList, |
□型名由来の命名 | str, list, array |
□技術由来の命名 | memory, cache, thread, register |
□抽象的すぎる | user, name |
それぞれ確認していきましょう。
用途が分からない
変数名には、その変数の用途や意味を示す名前を付けることが重要です。しかし、以下のように用途が分からない一般的な名前を使ってしまうことがあります。
- temp
- hoge
- value1
曖昧な変数名はコードを読む際に何を意味するかを意識し続ける必要があるため、よくないです。
意味が分からないほど省略された名前
変数名は意味が明確でわかりやすい命名が求められます。しかし、以下のように意味が分からないほど省略された名前を使ってしまうことがあります。
- d
- p1
- clList
他のコードや文脈を見なければ意味を理解するのが難しい変数名を付けないようにしましょう。
型名由来の命名
変数名には、その変数が保持するデータの意味を反映する名前を付けることが望ましいです。しかし、以下のように型名由来の命名を行ってしまうことがあります。
- str
- list
- array
データ型を示しているだけでは、具体的な用途や目的がわかりません。
技術由来の命名
以下は、技術由来の命名の例です。
- memory
- cache
- thread
- register
型名由来の命名と同じく、変数が何を表しているのか具体的にはわかりません。
抽象的すぎる
変数名はできるだけ具体的で明確な名前を付けるべきです。しかし、以下のように抽象的すぎる名前を使ってしまうことがあります。
- user
- name
これらの変数名は広範な概念を表しており、どのような情報が格納されているのか具体的にはわかりません。
ちょっとした計算だとtempでいいやって思ってしまいますが、将来のためには避けた方が良いですね。「意味が分からない短い変数」より「冗長だけど意味は分かる変数」にしてあげた方がよいのかもしれません。
基本的な変数の命名規則
では基本的な命名規則について具体例と共に確認していきましょう。
命名規則 | 具体例 |
---|---|
□具体的な命名にする | temp→damaeAmount d→damageAmount p1→playerPower clList→calculateList |
□プロジェクト指定のフォーマットに従う | キャメルケース…単語の先頭を大文字にする:UserName, UserType スネークケース…単語間に「_」をいれる:user_name, user_type 独自の指定ルール…例)ローカル変数は最初に「_」を付ける:_userid, _mailtext |
□よく使う英単語に当てはめる | 例) 職業:job_role 性別:sex_code 備考:note |
□慣例に従う | ループ内カウンタ:i, j フラグ:isXXX, canXXX, hasXXX |
それぞれ確認していきましょう。
具体的な命名にする
変数名には具体的で意味のある名前を付けることが重要です。以下は、具体的な命名の例です。
- temp → damageAmount
- d → damageAmount
- p1 → playerPower
- clList → calculateList
変数の用途や役割が明確に分かる名前を付けていきましょう。
プロジェクト指定のフォーマットに従う
プロジェクトやチームごとに命名規則のフォーマットが定められている場合があります。一般的な命名規則には、以下のようなものがあります。
- キャメルケース: 単語の先頭を大文字にする例) UserName, UserType
- スネークケース: 単語間にアンダースコアを挿入する例) user_name, user_type
- 独自の指定ルール: プロジェクト独自の命名規則を定める場合もあります。例えば、ローカル変数には最初に「_」を付けるなどの指定があるかもしれません。例) _userid, _mailtext
プロジェクトの指定に従って命名規則を統一することで、コードの一貫性を保ちやすくなります。
よく使う英単語に当てはめる
変数名には一般的な英単語を適用することも一つの方法です。以下は、よく使われる英単語を使った命名の例です。
- 職業: job_role
- 性別: sex_code
- 備考: note
上記同様に、コードの一貫性を保ちやすくなります。
慣例に従う
慣例に従った命名の例です。
- ループ内カウンタ: i, j
- フラグ: isXXX, canXXX, hasXXX
カウンタ変数は世界的に「i」が使われているので、counterとするよりiとした方が見やすいです。
こちらも上記同様に、コードの一貫性を保ちやすくなります。
変数のスコープによってどの程度厳密に命名するか変わってくるとは思いますが、出来る限り意識していきたいですね。
まとめ
- 良い設計には適切な名前付けが必須
- 良くない変数名の付け方は、「用途が分からない、意味が分からないほど省略しない、型名由来の命名、技術由来の命名、抽象的すぎる」
- 基本的な命名規則は「具体的な命名、プロジェクト指定のフォーマットに従う、よく使う英単語に当てはめる、慣例に従う」
適切な命名規則を守り、具体的でわかりやすい名前を付けることで、コードの理解性や保守性向上に繋がります。上記を実践し、より良い設計が出来るよう共に頑張りましょう!
最後までお読みいただき、ありがとうございました!