最近流行ってる生成AIとか言う奴ら全員ネーミングセンス無い。
はじめに
最近Vibe Codingを行っていく中で生成AI(Gemini、Claude等)のネーミングセンス微妙じゃね?と思うことが度々あった。具体的には変数や関数の命名センスに一貫性が無くてなんか変。抽象概念を扱ってるようで、急に具象に踏み込むので、生成AIの書いたコードを真面目に読んでいるとインフルエンザの時に見る夢?みたいな感じになる。(2025/5現在の話)
名詞の扱い方がなんか変
直近の具体例で言うと簡単なTODOアプリを作ろうとした時に、生成AI(多分Claude)がミュータブルなオブジェクトを生成するTaskRowと言うクラスを書いた。
分かる人は分かるかもしれないが、この命名が原因で、TaskRowクラスは無限に肥大化し、全ての責務が1つのクラスに集約された。所謂クソコードである。
僕がその事に気づいたのはアプリに必要な機能を全て追加してTaskRowが500行に達した所だった。言うまでもなくコードは綺麗じゃないし、リーダブルでもないし、SOLIDでもない。
一体何が原因だろうか。
短い変数名は取扱注意
僕が知っている数少ないプログラミングのTipsに「1文字変数を書くな」と言う言葉がある。理由は書いた場所が分からなくなった時、IDEの検索結果に引っかからないからなんだけど、それと同じぐらい短い変数名について取扱注意でいいと思う。
より具体的には1〜2Wordの変数はイミュータブルな値(または関数、オブジェクト)のみを格納し、ミュータブルな要素については3Word以上の変数に格納すべきではないだろうか。
難しいジレンマ
とは言え、上記の規則を真面目に適用しようと思うと意外と難しい。何故ならミュータブルなオブジェクトはアプリケーションの中枢に近い部分であるため、変更や修正が度々入りやすい。その度に寿限無寿限無五劫の擦り切れ〜と長い名前を唱えていては時間がいくらあっても足りない。
このジレンマを解消するために変数名の語彙に着目したい。もっと具体的に言うとミュータブルな要素は名詞のみで定義してはいけない。
TaskRowの話に戻ると、これは名詞+名詞という命名だが、その名前はどうミュータブルなのかを一切説明していない。つまり実際のコードとネーミングに乖離がある。良いセンスとは言えない。
従ってこの場合は後から考えると、形容詞のmainを加えて形容詞+名詞のMainRowとすべきだった。
これはほんの1例であるが、あなたが生成AIに書かせたコードの中にもこのような隠れた技術的負債が存在していないだろうか?
まとめ
2025/05現在、コーディングに用いられる生成AI(Gemini、Claude等)のネーミングセンスはかなり微妙なライン。変数名を考えるのが面倒なのはそうなんだけど、適当にAIに書かせるともっと面倒な事になるので、今のところは頑張って辞書引くしか無いです。
Discussion