AIクリエーターの道 ニュース: 命名でコードの可読性を向上! 開発者が陥りやすいミスと、分かりやすい名前の付け方のコツを解説。 #プログラミング #命名規則 #開発者向け
動画で解説
AIの「頭の中」を整理する!意外と奥深い「名前の付け方」のお話
皆さん、こんにちは!あなたのAIお役立ちガイド、ジョンです。
最近、AIのニュースを耳にしない日はないくらい、私たちの周りにはAI技術があふれていますよね。ChatGPTのような文章を作るAI、画像を生成するAI、車の自動運転を支えるAIなど、本当に色々なものがあります。でも、これらの賢いAIたちは、一体どうやって動いているんだろう?って不思議に思ったことはありませんか?
実は、AIも結局のところ、私たち人間が書いた「プログラム」という命令の塊で動いています。コンピュータに「こう動いてね」「こんな計算をしてね」と指示を出すのがプログラムなんです。
そして、このプログラムを作る上で、プログラマー(プログラムを作る人たちのことですね)が頭を悩ませる、ある「意外な問題」があるんです。それは、「ものに名前をつけること」なんです。
「え、名前なんて簡単じゃない?」って思いますよね? 私もそう思います。でも、プログラミングの世界では、この「命名」がとっても奥深くて、そしてとっても大切なんです。今日は、そんなプログラミングの「命名」のお話を通して、AIのような複雑なシステムがどうやって作られているのか、その裏側をちょっとだけ覗いてみましょう!
プログラミングの「命名」って何? なぜ大切なの?
プログラミングの世界には、こんな有名なジョークがあります。
プログラミングには難しいことが2つある。
一つは「キャッシュの無効化」。
もう一つは「ものの命名」。
そして「オフバイワンエラー」だ。
どういうことか説明しますね。「キャッシュの無効化」というのは、コンピュータが一時的にデータを保存する場所(例えるなら、よく使う資料をすぐ取り出せるようにデスクに置いておくようなものですね)のデータが古くなったときに、それを最新の情報にきちんと更新する作業のこと。これは本当に複雑で難しいんです。
「オフバイワンエラー」というのは、数え間違いのこと。例えば、0から数え始めるべきか1から数え始めるべきかで1つズレてしまうような、意外とやっちゃうミスですね。これはジョークで足されている部分です。
そして真ん中の「ものの命名」。そう、今日のお話の主役です。プログラマーは、プログラムの中にたくさんの「変数(一時的に情報をしまっておく箱)」や「関数(特定の仕事をするための手順をまとめたもの、料理のレシピみたいなものです)」を作ります。それら一つ一つに、きちんと名前をつけなければなりません。この名前が、後でプログラムを読み返すときや、他のプログラマーがそのプログラムを見たときに、「これが何を意味しているのか」「何をするものなのか」を教えてくれる、とても大切な手がかりになるんです。
想像してみてください。もし料理のレシピに、「あれ」とか「これ」とか「なんか白い粉」とかしか書いてなかったら、どうなりますか? きっと美味しく作れないし、他の人が見てもさっぱり分からないですよね。プログラムの「名前」も同じなんです。分かりやすい名前をつけることで、プログラムがよりスムーズに動くようになるわけではないんですが、プログラムの「読みやすさ」や「修正しやすさ」が格段にアップするんです。結果として、間違い(バグ)を減らしたり、もっと効率的に開発を進められるようになるんですよ。
「え?そんなことで!?」ダメな命名、9つの落とし穴
では、具体的に「こんな名前のつけ方はやめた方がいいよ!」という例を9つご紹介します。もしかしたら、皆さんの普段の仕事や生活にも当てはまることがあるかもしれませんよ?
1. 「これくらいわかるでしょ?」という思い込み
プログラマーがよくやってしまうのが、「自分が知っていることは、みんなも知っているはず」と思ってしまうこと。例えば、「EmpNo」という名前があったとします。作った本人からすれば「従業員番号(Employee Number)に決まってるじゃん!」と思うかもしれませんが、後からコードを見た人は、「これがデータベースのユニークなIDなのか、ログイン用の番号なのか?」と迷ってしまうかもしれません。
もし「従業員番号」で、それが「データベースに登録されているユニークなID」を表すなら、「EmployeeUniqueIdInDatabase」のように、ちょっと長くても具体的に書く方がずっといいんです。最近のプログラミング環境(これを「IDE(統合開発環境)」と言って、プログラミングを便利にする道具箱のようなものです)は、名前を途中まで入力すると自動で補完してくれる機能があるので、長い名前でも実は手間じゃないんですよ。
2. 意味が「ずるずる」変わっちゃう
最初は「レシートをデータベースに保存する」ための関数に「SaveReceipt」と名付けたとします。でも、後から「レシートを印刷する機能」も追加したり、実際に保存する処理を別の場所に移したりすると、いつの間にか「SaveReceipt」という名前が、実態と合わなくなってしまうことがあります。「レシートをデータベースに保存する」なら、最初から「SaveReceiptToTheDatabase」としておけば、後で機能が変わったときに名前のズレに気づきやすくなりますね。
3. 「ま、いっか!」の手抜き
「ちょっとだけ使うから」と、変数名に「i」とか「x」とか、たった1文字の名前をつけるプログラマーがいます。確かにタイピングは楽ですが、後で見返したときに「この『i』って何だったっけ?」と頭を抱えることになります。
例えば、こんなコードがあったとします。
If (EmpNo > 0) and (OrderNo > 0) { // ... }
これでも動くのですが、何が起きているかパッと見で分かりにくいですよね。これを以下のようにするだけで、劇的に分かりやすくなります。
EmployeeIsValid = EmployeeUniqueIdInDatabase > 0; ThereIsAnOrder = OrderNumber > 0; ItIsOkayToProcessTheOrder = EmployeeIsValid and ThereIsAnOrder; If ItIsOkayToProcessTheOrder { // ... }
どうでしょうか? 「従業員が有効で、注文があるなら、注文を処理してOKだ」と、まさに物語を読んでいるかのように理解できますよね。ちょっと手間をかけるだけで、未来の自分や仲間が助けられます。
4. 略しすぎにご注意!
手抜きと似ていますが、「急いでいるから」と略語を多用してしまうのもよくない習慣です。「accountBalance(口座残高)」を「acctBlnc」と略したとします。タイピングは確かに速いかもしれませんが、これも後から見た人が「これって何のこと?」と迷ってしまう原因になります。しかも、「誰の口座残高?」といった情報も不足しがちです。
URLやHTTPのように、業界で広く認知されている標準的な略語は別ですが、それ以外は略さずにきちんとした単語で書くのがベストです。繰り返しになりますが、IDEが入力の手間を省いてくれますから、心配いりません。
5. 機能(関数)の名前は「動詞」が基本!
関数は「何かをする」ものなので、その名前は「動詞」から始めるべきです。例えば「getCustomer」という名前の関数。これは「顧客情報を取得する」という意味で、悪くはないのですが、「どこから、何を、具体的に取得するのか?」が不明確です。「データベースから顧客インスタンスを取得する」なら、「getCustomerInstanceFromDatabase」のように、何をするのかを具体的に表す名前の方が、より分かりやすく、バグも減らせます。
6. あっちこっちで「呼び名」が違う?
同じものを、場所によって違う呼び方で表すのも混乱の元です。例えば、お店で商品を買う人を「Customer(顧客)」と呼んでいるのに、別の部分では「Client(クライアント)」と呼んだり、「Buyer(買い手)」と呼んだりするのは避けましょう。一度決めた呼び名は、プログラムのどこであっても、一貫して同じものを使うようにすることが大切です。
7. 「じゃない」「しない」は混乱の元
「isValid(有効である)」の反対で、「isNotValid(有効ではない)」や「denyAccess(アクセスを拒否する)」のような否定的な名前は、特に「ブーリアン(真か偽、イエスかノー、といった二択を表すもの)」の変数で使うと、コードが読みにくくなります。
if (!IsNotValid) or (!denyAccess) { // ... }
こんな風に、二重否定(「有効ではない」を「ではない」)が出てくると、一瞬「え?どういうこと?」って頭がこんがらがりますよね。英語でも二重否定は避けるのが一般的ですが、プログラムでも同じです。できるだけ肯定的な名前を使うようにしましょう。
8. 昔流行った「目印」はもう古い?
昔、プログラミングの世界では「ハンガリアン記法」といって、変数の名前の先頭に、その変数がどんな種類のデータかを示す短い記号(接頭辞)をつけるルールが流行ったことがあります。例えば、「整数」を表すなら「i」をつけて「iCount」のようにする、といった具合です。
しかし、最近ではほとんど使われません。なぜなら、最近のプログラミング言語やIDEは、変数の種類を自動で判断してくれるからです。名前自体が「EmployeeCount(従業員の数)」なら、それが「整数」だということは一目瞭然ですよね。名前が十分分かりやすければ、余計な記号は不要なんです。
9. 「なんとなく」な言葉は使わない!
「Helper(手伝い)」「Handler(処理する人)」「Service(サービス)」「Util(ユーティリティ)」といった、なんだか重要そうだけど、いまいち意味がはっきりしない言葉は、プログラムの命名では避けるべきです。これらは「空っぽな言葉」や「ジャンクフードのような名前」と呼ばれます。
だって、考えてみてください。「役に立つ」メソッドじゃないものなんて、そもそもプログラムに存在しますか? 何も「処理しない」メソッドなんてありますか? アプリケーション内の何が「データ」ではないんですか? 結局、これらの言葉は何も具体的な情報を示してくれないんです。本当にその機能が何をするのか、しっかり考えて名付けることが大切です。
結局、「良い名前」が未来を変える!
「命名は簡単だ!」と聞くと、「そんなバカな」と思うかもしれません。でも、ご紹介した「やってはいけないこと」を避けるだけでも、格段に良い名前がつけられるようになります。
良い名前は、プログラムを読み解くときの頭の負担(認知負荷)を劇的に減らしてくれます。コードが明確になることで、プログラマーは間違いを犯しにくくなり、バグ(プログラムの欠陥)を混入させることも少なくなります。たった数秒立ち止まって名前を考えるだけで、後になって何時間もの手間を省くことができるんです。
AIのような最先端の技術も、結局はこのような「わかりやすい」プログラミングの積み重ねの上に成り立っています。基盤となるコードが整理されていればいるほど、AIはより賢く、より信頼性の高いものになっていくでしょう。
最後に、プログラミングの世界で有名な言葉を言い換えて締めたいと思います。「あなたのコードをメンテナンスする人が、家の住所を知っている睡眠不足のサイコパスだと思って、ものに名前をつけなさい。」
ちょっと過激なジョークですが、「誰が見てもわかるように、親切に、明確に名前をつけましょう」というメッセージが込められています。 AI技術の裏側には、そんなプログラマーたちの細やかな努力と配慮が詰まっているんですね。
ジョンからのひとこと(私の視点)
今回の「命名」のお話、いかがでしたでしょうか? プログラミングに全く縁がないと感じる方も、「分かりやすい名前」がどれほど大切か、少しはご理解いただけたのではないでしょうか。私たちが日常で使うAIツールも、その裏側には、こうした地道ながらも非常に重要な「名前付け」の工夫が詰まっているんです。AIが複雑な処理をするほど、その内部構造は複雑になりますから、こういった「読みやすさ」への配慮が、AIの進化を支えていると言っても過言ではないと私は考えています。AIを使う私たち利用者も、AIが何をするものなのか、その機能の名前が明確であるほど、より安心して、そして賢くAIを使いこなせるようになるはずです。
この記事は、以下の元記事をもとに筆者の視点でまとめたものです:
<a href="https://www.infoworld.