- hoge・foo・barとは、中身に意味がないことを示すために使う仮の変数名(メタ構文変数)のことだ。
- 英語圏はfoo・bar・baz、日本語圏はhoge・fuga・piyoと、地域で文化が分かれているのが面白い。
- なぜ今も使われ続けるのか、その便利さと本番コードへの混入リスクまでまとめて分かる。
プログラミングの写経をしていて、いきなりhogeという変数名が出てきて手が止まった経験はないでしょうか。辞書を引いても載っていないし、英語でもない。技術記事を読み進めるほど、fooやbarまで湧いて出てきて、初学者ほど置いてけぼりにされます。
これらは打ち間違いでも隠語でもなく、れっきとした役割を持った言葉です。中身がどうでもいいことを、あえて示すための名前。駆け出しのエンジニアの多くが同じところでつまずきますが、正体さえ知れば、サンプルコードは驚くほど読みやすくなります。
この記事では、hoge・foo・barが何者なのか、どこから来たのか、そしてなぜ何十年も現場で使われ続けるのかを、一次資料の裏取りとあわせて考えていきます。
この4コマは、多くのエンジニアが一度は通るhogeとの初対面を切り取ったものです。初学者がつまずく本質は、hogeという文字そのものではなく、名前に意味を求めてしまう思考のクセにあります。変数名は普段「合計金額」や「ユーザーID」のように中身を表すため、意味のない名前に出会うと脳が処理を止めてしまうわけです。
先輩の一言が効くのは、hogeが中身が空であることを示す記号だと分かるからです。仮の入れ物だと理解できれば、読者は名前ではなく処理の流れに集中できます。実際のサンプルコードで大切なのは変数の中身ではなく、その変数をどう使うかという構文の形だからです。
ただし4コマの最後にある通り、便利さの裏側には落とし穴もあります。仮のつもりの名前が消し忘れられ、本番コードに残ってしまうと、後から読む人を惑わせる原因になりかねません。ここは記事の後半でじっくり掘り下げていきます。
そもそもメタ構文変数とは何を指すのか?
メタ構文変数とは、サンプルコードや説明の中で、中身が何であってもよい箇所に置く仮の名前のことです。hoge・foo・barはこのメタ構文変数の代表例にあたります。英語ではmetasyntactic variableと呼ばれます。
ポイントは、名前に意味を持たせないことに意味がある、という逆説的な性質です。たとえば処理の書き方だけを見せたいとき、変数名がcustomerTotalAmountのように具体的だと、読者は中身に気を取られてしまいます。そこで意図的に無意味な名前を置き、ここは何でもいいという合図を送るわけです。
身近な例で言えば、書類の記入例にある「山田太郎」や「〒000-0000」に近い発想です。名前や番号そのものは本物である必要がなく、どこに何を書くかという構造だけを伝えられれば役目を果たします。プログラミングの世界では、その役割をhogeやfooが担っているのです。
hoge・foo・barはどこから来た言葉なのか?
hoge・foo・barの語源には諸説あり、一つに断定できないというのが正直なところです。ただし英語圏のfoo・barについては、由来を扱った一次資料が実在します。
その資料が、2001年4月1日に公開されたRFC 3092「Etymology of “Foo”」です。インターネット技術の標準を定めるRFCの一つで、著者はD. Eastlake 3rd、C. Manros、E. Raymondの3氏。この文書によると、foo・bar・foobarはRFC 269を皮切りに約212本のRFCでメタ構文変数として使われてきたと記録されています。仮の名前が技術文書の共通語になっている証拠です。
4月1日公開というのがポイントで、RFC 3092はエイプリルフール向けのジョークRFCなんです。遊び心のある文書ですが、由来をまじめに整理した資料としてよく参照されます。
foobarの由来としてよく語られるのが、第二次世界大戦期の軍隊スラングFUBAR(Fucked Up Beyond All Repair)から来たという説です。もっともRFC 3092の記述では、むしろFUBARのほうがfooから派生した可能性が高い、とも指摘されています。どちらが先かは確定しておらず、諸説あるという理解が無難です。
fooという言葉自体は、さらに古くまでさかのぼります。漫画家ビル・ホルマンが1935年から連載したアメリカのコミック「Smokey Stover」で、意味のないギャグ語として多用されていました。プログラミングの文脈では、DEC社のマニュアルを通じて広まり、確認できる用例は1972年ごろまでさかのぼれます。ハッカー俗語集として知られるJargon Fileは1975年にスタンフォード大学のRaphael Finkel氏がまとめ、翌1976年にはMITのAI研究所にも共有されました。そのJargon Fileにも、fooは代表的なメタ構文変数として記載されています。
日本のhoge文化と英語圏のfoo文化は何が違うのか?
日本語圏はhoge・fuga・piyo、英語圏はfoo・bar・bazと、使う言葉そのものが地域で分かれているのが最大の違いです。役割は同じでも、育った土壌が別々なのです。
日本語版Wikipediaの「メタ構文変数」によると、hoge・fuga・piyoなどは日本のみで使用されるメタ構文変数だとされています。hogeがいつ生まれたかは定かではありませんが、1970年代の終わりから遅くとも1980年代前半には、複数の人が独立して使い始めていたという証言が紹介されています。英語圏のfooとは別ルートで、日本の現場が独自に育てた言葉というわけです。
| 比較観点 | 日本語圏のhoge文化 | 英語圏のfoo文化 |
|---|---|---|
| 代表的な言葉 | hoge・fuga・piyo | foo・bar・baz |
| 使われる地域 | ほぼ日本国内のみ | 英語圏を中心に世界的 |
| 登場した時期 | 1970年代末〜1980年代前半とされる | 用例は1972年ごろまで遡れる |
| 言葉の増やし方 | hogehoge・piyopiyoなど重ね言葉が多い | foobarなど掛け合わせが多い |
| 裏付け資料 | 日本語版Wikipedia等 | RFC 3092・Jargon File |
細かい違いも面白いところです。hoge系はhogehogeやpiyopiyoのように同じ音を重ねる形が多いのに対し、foo系はfoobarのように別の語をつなげる掛け合わせが目立ちます。同じ「意味のない名前」でも、増やし方に文化の個性が出るわけです。
地域だけでなく、プログラミング言語ごとの流儀もあります。Wikipediaの解説によると、Pythonの世界ではfoo・barの代わりにspam・ham・eggsが好んで使われます。これは開発者が名前の由来にしたイギリスのコメディ集団モンティ・パイソンのコントにちなんだもので、言語コミュニティの文化がメタ構文変数にも表れた一例です。
なぜメタ構文変数は今も使われ続けるのか?
メタ構文変数が今も使われ続ける最大の理由は、中身に意味がないことを一瞬で伝えられる共通の合図として、書き手にも読み手にも便利だからです。半世紀近く生き残っているのは、その便利さが本物だからだと私は見ています。
技術は機能で選ばれ、習慣で生き残る、というのが私の持論です。hogeやfooは高機能な道具ではありませんが、多くのエンジニアの手癖に組み込まれ、説明の場面で無意識に手が伸びる存在になりました。新しく気の利いた名前を発明するより、みんなが知っている合図を使うほうが、説明の摩擦が小さいのです。



料理のレシピで「適量の塩」と書くのに近い感覚ですね。分量そのものより、いつ入れるかを伝えたい。hogeも中身より使い方を見せるための道具なんです。
ここからは私の見立てですが、使われ続ける背景には、教える側と教わる側の連鎖もあると考えています。先輩が書いたサンプルでhogeに触れた人が、次に自分が説明する番になったとき、同じhogeを使う。こうして言葉が世代を越えて受け継がれ、いわば現場の方言として定着していったのではないか、というのが外から眺めていての推測です。断定はできませんが、慣習が慣習を再生産する構造は他の業界用語にも見られます。
hogeが本番コードに紛れ込むと何が起きるのか?
hogeのような仮の名前が本番コードに残ると、後から読む人が中身を推測できず、可読性が下がるリスクがあります。便利な道具ほど、置き場所を間違えると厄介というのが正直なところです。
本番コードにhogeが混入したという話は、都市伝説めいた伝聞として語られることも多く、具体的な事例を確かな事実として断定することはできません。ただ一般論として、仮の名前が消し忘れられる場面は想像に難くありません。動作確認のために書いたhogeDataのような変数が、修正の慌ただしさの中でそのまま残ってしまう、という筋書きです。
ここも私の見立てになりますが、問題の根は言葉そのものではなく、思考停止で慣習に乗ってしまうことにあると考えています。中身が確定した箇所まで惰性でhogeを使えば、本来ならuserNameと書けたはずの名前が失われ、コードの説明力が落ちます。仮の名前が便利だからこそ、卒業すべき場面を見極める意識が要る、という面もあるのではないでしょうか。
対策自体はシンプルです。サンプルや下書きではhogeを気軽に使い、実装が固まったら中身を表す名前へ置き換える。この線引きを習慣にできれば、メタ構文変数の便利さだけを受け取れます。仮置きの道具は、仮置きの場所で使ってこそ光るわけです。
まとめると、hoge・foo・barは半世紀近く受け継がれてきた、中身に意味がないことを示すための共通言語です。ここで一度立ち止まって考えてみてほしいのは、あなたが今書いているコードの中に、卒業しそびれた仮の名前が残っていないか、ということです。新しいAI補完ツールが当たり前になっても、名前に意図を込める習慣は、書き手の腕として残り続けるはずです。過去から受け継いだ便利な合図を、使いどころを見極めて活かせるかどうか。そこに、読みやすいコードを書ける人とそうでない人の分かれ道があるように思います。
- hoge・foo・barは中身が空の仮の名前であり、意味がないことを示すための合図として機能する。
- 日本のhoge文化と英語圏のfoo文化は別ルートで育ち、使う言葉も増やし方も異なる。
- 仮置きの道具は実装が固まったら本来の名前へ置き換えるのが、可読性を守る近道だ。
次のアクションとして、いま開いているプロジェクトを一度hogeやfooで全文検索してみてください。仮のまま眠っている名前が見つかれば、そこがコードを一段読みやすくできる場所です。
よくある質問
-
Qメタ構文変数にはどんな種類がありますか?
-
A
代表例は英語圏のfoo・bar・bazと、日本語圏のhoge・fuga・piyoです。いずれも2つ目、3つ目と使う順番が慣習で決まっており、Pythonのspam・eggsのように言語ごとの独自例も存在します。
-
Qhogeは英語圏のエンジニアにも通じますか?
-
A
基本的には通じにくいと考えたほうが安全です。日本語版Wikipediaでもhogeは日本のみで使われるメタ構文変数と説明されており、海外向けのサンプルではfoo・barを使うほうが誤解を招きません。
-
Qサンプルコードでhoge以外に使うと良い名前はありますか?
-
A
読み手が意味を追える具体的な名前が理想です。ユーザー情報を扱うなら
user、合計金額ならtotalのように中身を表す名前にすると、サンプルでも本番でも意図が伝わりやすくなります。
-
Qhogeとfooの違いは何ですか?
-
A
役割はどちらも同じで、中身が空の仮の名前です。違いは文化圏で、hogeは主に日本、fooは英語圏を中心に世界的に使われます。相手や公開範囲に合わせて使い分けると親切です。
この記事と一緒に知っておきたい用語
| 用語 | この記事との関連 |
|---|---|
| メタ構文変数 | hoge・foo・barを指す正式名称。中身に意味を持たせない仮の名前の総称。 |
| 変数 | 値を入れる箱。hogeはその箱に付ける仮の名札にあたる。 |
| プレースホルダー | 中身を仮置きする発想が近く、hogeも一種の仮置き記号として働く。 |
| キャメルケース | 本番で使う名前の付け方。仮の名前を卒業した先の命名ルール。 |
| スニペット | hogeが頻繁に登場する、再利用しやすいコード断片のこと。 |
【出典】参考URL
https://www.rfc-editor.org/info/rfc3092/ :RFC 3092「Etymology of “Foo”」の発行日・著者・約212本のRFCでの使用、FUBAR派生説の根拠
https://en.wikipedia.org/wiki/Jargon_File :Jargon Fileが1975年にスタンフォード大学で作成され1976年にMITへ共有された経緯、fooの記載の根拠
https://ja.wikipedia.org/wiki/メタ構文変数 :hoge・fuga・piyoが日本特有であること、登場時期の証言の根拠
https://en.wikipedia.org/wiki/Metasyntactic_variable :メタ構文変数の定義、foo・bar・baz、Pythonのspam・eggsの根拠
https://en.wikipedia.org/wiki/Smokey_Stover :fooの初出とされるコミックSmokey Stover(1935年連載開始)の根拠

コメント