プログラミングする際、変数名や関数名、クラス名などに日本語を使うことの是非を考えてみました
最初に断っておきますが、私は日本語変数名肯定派です。プログラミングを覚えて以来、ずっと英語の変数名、関数名を使って来たのですが、数年前に思い立って日本語を使い始めました。最初は少し違和感がありましたが、数年経った今では完全に日本語肯定派です。変数名を英語にしていた頃には戻りたくありません。
ですので、かなり偏った意見もありますが、その辺は差し引いてお読み頂ければと思います。
もちろん、プログラムの中で日本語を使えるかどうかは状況に依存します。英語圏の人達と一緒に開発をしていたり、オープンソースのプロジェクトだったりする場合は考慮の余地はありません。プロジェクトで定められたコーディング規約に従って、英語で名前を付けましょう。
私の場合、ほとんどが自分用のプログラムを書いていますし、ソースを人に渡すことがあっても大抵は日本語が読める人ですから問題はありません。ちなみに主に使っているプログラミング言語はPython、C++、Javaです。
日本語を使うことのメリット
プログラムが理解しやすい
変数名などに日本語を使う最大のメリットは、ソースの可読性が上がり、理解しやすくなることです。
我々は日本人で、生まれたときから日本語の環境で生きてきましたので、日本語なら直感的に理解できますが、英語はそうはいきません。勉強すればある程度使えるようにはなりますが、なかなかネイティブのようにはなれません。
ですので私は、プログラムで英語が出てくる度に頭の中で日本語に翻訳してから意味を理解していました。時間にすればコンマ何秒のことではあるのですが、ロジックを考えるのが中断されますので、効率に結構悪影響を与えていた気がします。
クラス名やメソッド名が日本語であれば、この翻訳のひと手間は不要ですので、考えを中断されることがありません。プログラミング本来の作業に集中することができます。
英訳をしなくて済む
二つ目のメリットは、変数名やメソッド名を英訳する必要が無いということです。
プログラミングにおいては、変数やメソッドなどに適切な名前を付けることが重要です。思い付きで適当な名前を付けていると、すぐに理解しづらいプログラムになってしまいますし、バグを生み出す危険も増えます。
ですから、名前を考えるときは慎重にならないといけないのですが、これには時間がかかります。名前を英語で付けようと思ったらなおさらです。
特にテストケース名なんかは内容を正確に分かりやすく表現しようとすると結構長くなりますので、それを的確に表現する英語名を考えるのは大変です。日本語を使っていなかった頃を思い出すと、名前を考える作業に結構な労力を使っていたように思います。
また、DBのキーとか帳票の項目名とかが日本語のときもやっかいです。プログラムの中で日本語が使えなければ、もともと日本語の名前が付いているものを、わざわざ英訳しないといけません。
専門用語や固有名詞などもやっかいです。馴染みの薄い英語を使わないといけませんので、英訳・和訳の作業が一段と大変になります。場合によってはローマ字表記にしたりもしますが、それならば日本語を使った方がいいに決まっています。
コメントの量が減る
三つ目のメリットは、コメントの量が減るということです。
私が英語で名前を付けていた頃は、変数宣言の横に変数名を和訳しただけのようなコメントを付けることがよくありました。これは、自分が読み返したときに和訳する手間を減らすためです。最初から日本語で変数名を付けておけば、このようなコメントは不要です。
テストケースについても、日本語で分かりやすい名前を付けておけば、わざわざコメントを付けて説明する必要がなくなります。
日本語を使うことのデメリット
日本語入力が面倒
日本語を使うことのデメリットとしては、日本語入力が面倒くさいということがあげられます。
入力モードを切り替えないといけませんし、漢字に変換する必要もありますので、確かに手間はかかります。ただ、慣れてしまえば無意識に出来ることですし、致命的な欠点とは思いません。
ただ、入力モードの切り替えを、キーボード左上の半角/全角キーにしていると押すのがちょっと大変ですので、これはカスタマイズした方がいいと思います。私の場合、スペースキーの両隣の変換キーと無変換キーをIMEオンとオフにしています。これだと、今どちらのモードにいるかを意識しなくてもいいのでかなり楽になります。
また、最近のIDEは補完機能が充実していますので、リストから選ぶこともできますし、近くにあればコピペすることもできます。変数名や関数名をキーボードから入力する回数というのは、思ったより少ないものです。
日本語が分からない人と共同作業ができない
デメリットの二つ目としては、日本語が分からない人と共同作業ができないということがあります。最近はオフショア開発などで外国人と一緒に作業する機会も増えていますので、これは結構重要な問題かも知れません。現状は日本人のみのプロジェクトであっても、将来的に外国人が参加する可能性はあります。
ただ、その可能性を理由に日本語を使わないのはちょっと違う気もします。変数名や関数名を英語で書いていても、コメントやドキュメントは日本語というケースが多いと思います。であれば、名前だけ英語にする意味はあまりありません。また、もしそういう状況になったのであれば、リファクタリング機能を使って全部の名前を英語にすることもできます。
その他のデメリット
他にもデメリットはいくつか考えられますが、いずれも致命的ではないように思います。
例えば、各種ツールにおいて日本語に起因する想定外のトラブルが起こる可能性は否定できません。世の中のすべてのツールがUnicodeに対応しているわけではありませんので、思わぬところで躓くことはあり得ます。ただ、私はこれまであまり困ったことはありませんし、今後状況は良くなっていくでしょう。
また、複数形のsが使えないのは微妙に不便です。英語であれば、「dog/dogs」のようにsを付けるだけで複数形を表現できますが、日本語ではできません。「犬/犬s」とか「犬/犬達」などは少し違和感を感じます。
CamelCaseの記法が使えないのも不便かも知れません。キャメルケース、スネークケースで何かを区別するような言語では何かしらの工夫が必要です。
まとめ
以上のように、プログラムの中で日本語を使うことにはメリットもデメリットもあるのですが、私の印象では圧倒的にメリットが大きいです。慣れるまでしばらくかかるかも知れませんが、一旦慣れてしまえばプログラミングの効率は格段に上がります。
日本語プログラミングの議論は以前からありますが、日本語の変数名が市民権を得る兆しは未だ見えません。理由は色々あるでしょうが、結局は習慣とか風習とかが原因ではないかと思っています。
英語の変数名に慣れている人は、余程のことがなければ流儀を変えないでしょう。別にそれが悪いと言いたいわけではありませんが、一度は日本語の変数名を試して見たらいいのではないでしょうか?