変数名は「AIにレビューさせろ」Part1を公開したのですが、同時にAIから
「これは初心者向けの記事ではないのでは?」
と散々、指摘を受けたので初心者とスクールで教えようとしている方向けに補足を行います。どちらが最初でも構いませんが、初心者の方は本記事を最初に読んだ方がよいかもしれません。
例えばですが、Google C++ スタイルガイドや、Linux Kernel 2.6 Documentation- CodingStyle を参照してみてください。変数名の記載の項目になります。
何を言っているかわからないかと思います。それが答えです。
という、哲学的な問答はやめてストレートに言いますと、「まったくの初心者の方は、まずはプログラミングの書き方を学習するべきであり、コーディングスタイル(変数の命名だけでなく、あるべきコードの書き方の基準)は、後回しにしてもかまわない」ということになります。つまり今は考えなくてよい(もし気になるのならAIに聞け)ということになります。
それでも、気になる方はもう一度Google C++スタイルガイドの「命名規則」を読みましょう。引用しますと、
・命名に関するスタイルルールはかなり恣意的なものです
・あなたにとってわかりやすいと感じるかどうかに関わらず、「ルールはルール」と考えるようにしてください。
ということです。これの意味するところを大げさにかくと、「変数名は「AIにレビューさせろ」Part1」の記事になります。
加えて、日本人に対する補足を行います。(通訳案内士の観点になりますが)、日本人というのは「言われなくても規律を守る」民族のようで、一方で欧米(というか民主主義の国の人は)、「自由が基本、必要ならルールを作る」という文化的な違いがあります。主にアメリカからくるルールを日本人に当てはめると、必要以上に日本人が守りすぎるという傾向があるので注意しましょう。という話です。
上記の2つのスタイルガイドをみて、「言っていることは解る」という人はもう、命名規則については卒業ということになります。
「これでは不安」だという方は、一つ卒業試験をしましょう。上記の2つのスタイルは真逆のことを言っている部分がありますがどれでしょうか?
私が見つけた正解の1つは、
Linux Kernel 2.6のコーディングスタイルは、変数名の省略を許容しており、Google C++の方は許容していないということがあります。
(もっともどちらのスタイルもループカウンタは i でよいとしています)。
私の観点(理解)になりますが、これらの違いを補足すると、カーネルは基盤ソフトウェアで、Googleが作ろうとしているものはアプリケーションということも言えます。
コーディングの文化というか、作成しているもののレイヤーが異なります。
例を挙げると、変数の値を交換する swap関数 というものがありますが、Linuxの方は、swap関数を作る方、Googleの方は、swap関数を使う方ということです。
swap関数を C言語風に 書くと
void swap( int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
となるかと思います。ここで、a,b,tと出ましたが、これに対して「変数名が、意味のない1文字だろ!」という人は(0ではないかと思うが)私の周りではいません。逆にここで変数名に対してとやかく言う人とは距離をとった方がよいです。(実は変数名以外には問題があります)。
一方で、Googleの方は、swap関数を使う側、例えば、
swap( oldMachineStatus, newMachineStatus);
と言ったコードにフォーカスを当てているということになるかと思います。
コードコンプリートやリーダブルコードなど実績のある書籍を読むことをお勧めします。
「1文字変数はダメ。booleanは○○。」と言ったような断片的な情報ではなく、「なぜこのように命名すると良いのか?」についてできるだけ主観を抑える努力を用いて書かれているでしょう。
また、上記のようなスタイルガイドも併せて読むことを勧めします。書籍やガイドによって矛盾点が見つかります。それに対して『自分はどうするか?』と自問してみましょう。
2026年現在確認できる多くのコーディングスタイルでは、ループカウンタには i でよいとしていますが、意味のある名前にしましょうという書籍もあるようです。「○○にこう書いてある」ではなく、あなたの正解を見つけてみましょう。
さらに、実際のコードがどうなっているかを調べることも重要です。
以下、Linux kernel 6.18.3 で適当に選んだファイル(acct.c)からの変数名(と引数名)を出現順で10個を列挙します。
acct
sbuf
p
ns
res
pin
work
acct
file
name
私には大変馴染み深い名称ですが、皆様どうでしょうか?
これだけだと何なので、同プロジェクトから適当に選んだpythonのファイル(check-perf-trace.py)からの変数名(引数名)を10個ほど列挙します。
event_name
context
common_cpu
common_secs
common_nsecs
common_pid
common_comm
common_callchain
vec
call_site
理解できるかはともかく、分かりやすい名前になっているかと思います。