変数とは、数学やプログラミングにおいて、数量やデータを表す記号や仕組みのことで、変数の名前を付けるというのはプログラマーにとって日常茶飯事のことになります。
変数名の正しい付け方というのは、無能なITエンジニアが困ったときに助けてもらった書籍5選の記事で紹介したようなエンジニア界隈でも名著と言われている「リーダブルコード」という書籍に中でも紹介されていますが、この記事では現役のITエンジニアの私が個人的に嫌いな変数名ワースト3を紹介します。
とある現役エンジニアが嫌いな変数名ワースト3

ワースト3:長い変数名
無駄に長い変数名が私は嫌いです。
例)
| 長すぎる変数名 | 適切な長さの変数名 |
| customerInformationData | customers |
| userAdministratorAgentDataList | userList |
長い変数名が嫌いな理由は、ソースコードが読みづらくなるからです。
例えば、以下の長すぎる変数名と適切な長さの変数名のソースコードを比較してみると一目瞭然です。
- 長すぎる変数名
for(int count = 0; count < userAdministratorAgentDataList.size(); count ++) {
Integer value = userAdministratorAgentDataList.get(count);
}- 適切な長さの変数名
for(int count = 0; count < userList.size(); count ++) {
Integer value = userList.get(count);
}長い変数名は詳しい意味までは分かるかもしれませんが、ソースコードをパッと見たときに読みづらいですし、スコープが小さければ変数名は短くて良いとされていますので、最低限の意味さえ伝われば、人間の目で見やすくてコードがすっと入ってくる適切な長さの変数名であれば私は良いと思っています。
だから無駄に長い変数名が羅列しているソースコードは読みにくいので、私は長い変数名が嫌いです。
ワースト2:適当な変数名
適当な名称が付いている変数名が私は嫌いです。
例)
| 変数名 |
| a |
| test |
適当な変数名が嫌いな理由は、長い変数名と同じくソースコードが読みづらくなるからです。
例えば、以下の適当な変数名と適切な変数名のソースコードを比較してみると一目瞭然です。
- 適当な変数名
for(int a = 0; a < test.size(); i++) {
Integer value = test.get(a);
}- 適切な変数名
for(int count = 0; count < userList.size(); count ++) {
Integer value = userList.get(count);
}長すぎる変数名よりも嫌いな理由は、長すぎる変数名はまだ変数の意味をコードを見る人に伝えようとしている意図はあるため、その変数名にどういった役割があるのか人間的に理解することはできます。
でも、「a」、「b」、「test」のように意味のない適当な変数名が付いていると、その変数がどのような振る舞いで動いているのかパッと見で分からないので、私は嫌いです。
恐らく、実際に動作しているプログラミングコードで意味のない変数名が付けられている場合は、インターネットで検索したサンプルコードをコピペしてそのまま利用しているか、動作確認の段階で変数名を適当に付けたけど、適切な変数名を付けるのが面倒になったか時間がなくなってそのままになってしまったケースなのではないか?と思います。
実話として私が過去に保守業務を任されたときに「a」、「b」が多用されていたプログラミングコードに遭遇したときに
ダメ系なんで適当な変数名が散乱しているのですか?
とPMに聞いたら



あ~、これね、エンジニア未経験で入社したての人が実装したコードだから酷いソースコードになっているんだよね…
と返答が返ってきたことがありましたので、プログラマーとして経験が浅かったり、プログラミングの知識に乏しい人が書いてしまうと、変数名に適当な名前が付けられてしまうことはあるのだと思います。
ただし、そういったしっかりとしたプロジェクトであれば、ベテランにエンジニアがレビュー指摘して適切な変数名に修正されることになるのですが、人員に余裕がなかったり、レビューを行うという文化がないような企業だと、適当な変数名が付けられたまま本番で稼働されて、いざ運用保守を行うとなった時に、メンテナンスしにくいようなソースコードとなって悲しいことになってしまいます。
ちなみに、私の知識が乏しいので真偽は定かではありませんが、コンマ1秒の速度を求めるようなシステムではあえて「a」という短い変数名をつけるケースがあったり、セキュリティの面で意味のない変数名をあえて付けるということもあるようです。
ただし、それは特殊な例になりますので、一般的なWebシステムのような開発を行う場合にはリーダブルコードに記載されているように第三者が分かりやすい変数名を付けるべきでしょう。
ワースト1:スペルミス
スペルが間違えている変数名が私は嫌いです。
例)
| スペルミス | 正しい変数名 |
| users | uses |
| name | naem |
例えば、以下のソースコードでは、ユーザを示す変数名が「users」でははなく、usersのrがなくて「uses」になってしまっています。さらに名前を示す「name」の末尾の「m」と「e」が逆になって「naem」になってしまっています。
public static void main(String[] args) {
Connection con = null;
try {
con = DriverManager.getConnection("jdbc:mysql://localhost", "root", "password");
Statement st = con.createStatement();
String uses = "select * from uses;";
ResultSet result = st.executeQuery(uses);
while(result.next()) {
int id = result.getInt("id");
String naem = result.getString("naem");
System.out.println("id: " + id);
System.out.println("naem: " + naem);
}
if(con != null) {
con.close();
}
} catch (SQLException ex) {
System.out.println("接続に失敗しました。");
}
}スペルミスがあった場合には、eclipseの場合はスペルチェックで事前に検知することができたり、スペルミスがあった変数を後から修正した場合は一括置換することができますので、そんなに大変な作業ではないように思えます。
だから私がスペルミスの変数が一番嫌いな理由は、単にスペルミスが気持ち悪いからだけでは?と思われた方もいるかもしれません。気持ちが悪いというのもありますが、それだけではなく、DBに接続して取得するテーブル名も「users」が「uses」になってしまっているので、スペルミスが発覚した場合、テーブル名も一緒に修正しなくてはEntityやDaoと整合性がとれなくなりますので、変更しなくてはなりません。
そうなると、Java内で収まらずに外部のDBにも影響しますので、正しい変数名に修正ということはテーブル名の修正およびそれらに伴うテストをやり直す必要があります。もしテーブル名を修正する場合は、他システムで参照していたら確実に影響が出ますので、改修範囲とテストの範囲はさらに広がってしまいます。
だから、そのように影響範囲が広がってしまうケースの場合には、最初にスペルミスをして本番稼働しているシステムでは病む負えず放置されがちになってしまいます。
だから私は、修正したくても修正できなかったり、仮に修正できてもテストが必要になってしまったり、規則性の観点からスペルミスされた変数名から派生した新しい変数名を生成する場合にもあえてスペルミスで作成しなければならないような状況になってしまうので、スペルミスされた変数名がワースト1で最も嫌いです。
ちなみに私は英語が苦手で直打ちをしてしまうとスペルミスしてしまうことが多いので、正しい変数名を調べて上で、必ずコピペしてから変数名として使用するようにしています。
以下の記事でコピペは無能なエンジニアの特徴なので悪という言い方をしていますが、スペルミスを防止するという点においてはコピペを推奨したいです。


まとめ
この記事では現役のITエンジニアの私が個人的に嫌いな変数名ワースト3を紹介しましました。
やはり、ワースト1に挙げたスペルミスの変数名は最も嫌いなので、スペルミスが多いソースコードを見ると気持ち悪いですし、修正を行うテストの実施工数を考えたり、DBや他システムへの影響を考えた結果、修正したくても修正できないジレンマで残念な気持ちになってしまいます。
だからこそ、eclipseやVSCodeのようなエディタを使用してスペルチェックをしたり、第三者によるレビューを行って、スペルミスがない変数名のソースコードにするように心がけることが大切になるでしょう。




