初学者にもわかりやすい「名前」って何だろう ?
Author : 吉田 慶章
builders.flash 読者の皆さん ! こんにちは ! シニアテクニカルトレーナーの吉田慶章です。
builders.flash には様々なカテゴリがありますが、本記事は「How to be a Developer」というカテゴリーに所属しています。エンジニアを目指している方やインフラエンジニアからアプリケーションエンジニアにロールチェンジを目指している方などを読者層とし「どうやってエンジニアになれば良いのだろう ?」をテーマにしています。
先月は ハンズオンの「腹落ち問題」を改善する 5 Tips という記事を書きました。ソーシャルでたくさんコメントをいただけて嬉しかったです。ありがとうございます !
引き続き「How to be a Developer」な記事を書いていきたいと思いますが、今月のテーマは「初学者にもわかりやすい名前って何だろう ?」です。技術的な記事を読んでいるとたまに出てくる「foo」とか「hoge」ってどういう意味なんでしょうね ?
Here We Go ===┌(・_・)┘
名前を考える機会はそこそこ多い
私たち (主語が大きい ! 笑) はエンジニアリング的な作業をするときに「名前」を考える機会が多いのではないでしょうか。ここで言う「名前」とは、コードを書いているときに考える「ファイル名」や「変数名」や「メソッド名」だったり、AWS を操作しているときに考える「Amazon EC2 インスタンス名 (正確には Name タグ)」や「AWS Lambda 関数名」や「Amazon S3 バケット名」などです。
皆さんはどんな「名前」を付けますか ?
なお、本番環境などにデプロイする場合は「メソッド名」や「Amazon S3 バケット名」にも命名規則が標準化されていることも多いでしょう。今回は特に「動作確認のために一時的に書くコード」や「勉強のために一時的に作る AWS リソース」など、気軽に作るものに対する「名前」を前提に考えていきたいと思います。

見たことがある ! あるあるな名前たち
皆さんは以下に載せたような一時的な名前を見たことがありますか ? もしくは使ったことがありますか ? 私はあります !
必ずしも「良し悪し」を決めたいわけではないのですが、例えば「数日後」や「数ヶ月後」に見直してみると「えーっと ? これは何だっけ ?」と思い出せなくなってしまったり、いざ消そうと思ったときも「名前的に消しても良さそうだけど確信が持てないぞ ?」と困ってしまったりするかもしれません。
- test, test1, test2, test3
- hello, hello1, hello2, hello3
- foo, bar, baz (メタ構文変数 : 英語圏など)
- hoge, fuga, piyo (メタ構文変数 : 日本)
- toto, titi, tutu (メタ構文変数 : ヨーロッパ圏など)
- a, b, c
- aaaaa, ooooo, tttttttttt
こちらはあくまでサンプルです。極端な例として作ってみましたが、役割も重要性も判断できず、名前的に消しても良さそうだけど、もしかしたら今も重要なコンポーネントとして使われているかもしれません !
- 補足 1 : foo や hoge は「メタ構文変数」と呼ばれることもあり、意図的に「意味のない名前」を付けるときに使う慣習として知られています。本記事では「メタ構文変数」を使うべきではないと断言したいわけではなく、あくまで「使いすぎるとわかりにくいぞ !」や「初学者はわかりにくいと感じるかもしれないぞ !」ということを伝えたいと思っています。
メタ構文変数 - Wikipedia » - 補足 2 : 例えば Go 言語のように、スコープが制限されている場合などは「短い変数名」が推奨されている場合もあります。このように言語ごとの慣習を尊重することも重要です。
CodeReviewComments · golang/go Wiki »
プログラミング講師をしていたときに本当にあった話
先ほど紹介した「あるあるな名前たち」ですが、自分 1 人で使うならまだしも、例えば「誰かに教える(伝える)場面」を考えると、より顕著にわかりにくくなることがあります。私自身の失敗談を紹介しましょう !
私は数年前まで 2 年間ほどプログラミング講師の仕事 (Ruby, Ruby on Rails, HTML, JavaScript, CSS, Git などなど) をしていました。講師経験が浅かったとき、プログラミング未経験のお客様に対して、無意識に「例えば hoge という変数に 10 と入れるとしましょう」のように「変数」や「メソッド」を教えてしまった経験があります。そのときに「あのー ! すみません ! 先生がおっしゃっている "ほげ" って何ですか ?」なんて言われたこともあり「あああ ! この教え方は良くないんだ !」と重要な気付きを得ることができました。他には「"ハローワールド" って何ですか ?」と言われたこともあります。
あくまで私の体験談ではありますが、特に初学者に対しては「わかりやすい = 簡単にイメージできる」ということが重要です。もし「変数」を教えるなら「箱」や「付箋」や「名札」を比喩にしても良いでしょうし (比喩の良し悪しは置いておいて)、英語に拒否反応が強ければ、変数名を hako や fusen や nafuda にしても良いかもしれません。もし小学生にプログラミングを教える場合は、より具体的で楽しい名前を考える必要があるでしょう。
さらに、先月書いた記事 ハンズオンの「腹落ち問題」を改善する 5 Tips にも関連付けてみましょう。例えば、皆さんがハンズオンを実施するときに「AWS Lambda 関数名 : get-photo-1」と「AWS Lambda 関数名 : get-photo-2」を作るように指示されていたりすると、具体的な役割をイメージしにくく、それこそ「腹落ち」しにくくなってしまったりもします。ハンズオンなどを作る側の立場においても「名前」は重要ですね !
どうやって名前を決めれば良いんだろう ?
では、どうやって名前を決めれば良いのだろう ? なんて思われるかもしれません。
具体的に「これ !」と決めることはできませんが、例えば「パッとイメージしやすい名前かどうか」を判断基準にすると良いのではないでしょうか。
書籍を引用して説得力を上げてみると (笑) 今まで何度も読んだ書籍「リーダブルコード」の「2 章 : 名前に情報を詰め込む」と関連します。あくまでこの書籍は「変数名」や「メソッド名」の話ではありますが、「Amazon EC2 インスタンス名 (正確には Name タグ)」や「AWS Lambda 関数名」や「Amazon S3 バケット名」でも同じ考え方が適用できるのではないかなと思っています。以下に目次の一部を載せておきます。
- 2.1 : 明確な単語を選ぶ
- 2.2 : tmp や retval などの汎用的な名前を避ける
- 2.3 : 抽象的な名前よりも具体的な名前を使う
- 2.4 : 名前に情報を追加する
- 2.5 : 名前の長さを決める
- 2.6 : 名前のフォーマットで情報を伝える

おまけ : How to be a Developer 著者と一緒に名前を考えてみた !
最後におまけとして、builders.flash で「How to be a Developer」カテゴリーの記事を執筆している金澤さんと西村さんと一緒に「わかりにくい "かもしれない" 名前」と「わかりやすい "かもしれない" 名前」のサンプルを考えてみました !
日付を表現する場合
date よりも confirmed-date とか
アプリログからエラーを抜き出す AWS Lambda 関数を作る場合
log-grep-function よりも service-x-app-errlog-extractor とか
Amazon S3 マルチパートアップロードを試す場合
upload-test よりも s3-multipart-upload-test とか
何かしらの機能を試す場合
- playground よりも playground-xxx とか
- sandbox よりも sandbox-xxx とか
まとめ
今回の記事では「初学者にもわかりやすい名前って何だろう ?」というテーマで整理してみました。無理に「foo」や「hoge」を使うのではなく、少しでも「パッとイメージしやすい名前」を考えてみる工夫をするだけで、わかりやすくなったり、あとで思い出しやすくなったりします。私自身も無意識に「hoge」を使わないように自戒の念を込めた記事に仕上げました。
皆さんの考え方や初学者への教え方など、様々な意見を聞かせてください ! ではまた !
筆者プロフィール

吉田 慶章
アマゾン ウェブ サービス ジャパン合同会社
AWS トレーニングサービス本部 シニアテクニカルトレーナー
ウェブエンジニア/プログラミング講師などの経験から AWS テクニカルトレーナーに。教えることを本職とし、効果的な学習メソッドを考え続けている。教えることは最高の学習である。Keep on Learning 👍
AWS を無料でお試しいただけます