ほげのある季節 - hogeに愛は生まれるか？

プログラマーと仕事をしていく中で、いろいろと不思議なことはあるもので。

現職で耳にした記憶はないものの、突如「**ほげーーー**」と叫ぶプログラマーが身近におりました。
個人の口癖かと思ったら、サンプルプログラムにも度々「**hoge**」が出てくるではないですか。

…プログラマー社会には馴染みの言葉だということはわかった。

しかし。

唐突に「ほげ」と言われましても、デザイナーにはわかりませんがな。
「金赤[^金赤]しっとるけ？」…と同様の業界用語ですか？

[^金赤]: 「金赤」をM:100% Y:100%と説明することもあるが、それはちょっと間違い。[プロセスカラー（CMYK）](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%82%AB%E3%83%A9%E3%83%BC)ではなく、調色済みインクを使用する。この調色済みインクのことを「特色」と呼ぶ。蛍光色なんかも「特色」。指定は「[DIC](https://www.dic-graphics.co.jp/index.html)」や「[PANTONE](https://www.pantone.com/)」などの色見本を使用するが、DICの場合は「DIC156」「DIC565」あたりが金赤として使用されることが多いようだ。CMYKで近似色を指定するとすれば、やや黄色味が強いM:90%（もしくは80%）  Y:100%と言ったところ。「金赤」は、人によって想像する色が若干変わるという、なんとも面倒な色でもある（正確にイメージを伝えたいなら色見本は必須）。そもそも、日本人は色の名称には微妙な感覚を持っていて、厳密には「緑」色の信号を「青」と言ったりする。これは昔の日本人が「青」も「緑」も「青」と言っていたことによるらしい。

# hoge（ほげ）はメタ構文変数
[wiki](https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E6%A7%8B%E6%96%87%E5%A4%89%E6%95%B0)を見れば答えが出る。ここで記事終了:laughing:

サンプルプログラムの関数や変数が「**hoge**」なのは、「**ここに適切な関数名（または変数名）を入れてね**」ということ。
**「hoge」自体に意味はない。**…意味ないって、早く言ってよ:kissing:

「横浜太郎」のような、役所にあるサンプル氏名と同じ扱いなので、そのまま使わず、**適切な名前**を考える必要がある。

# 他にもあるでよ。メタ構文変数
せっかくなので、どんなものがあるか調べてみる。
## 英語圏
1. foo
1. bar
1. baz
1. qux
1. quux
1. corge
1. grault
1. garply
1. waldo
1. fred
1. plugh
1. xyzzy
1. thud

使い方は「**foo**」 から始まり、「bar」「baz」…と続いていく。
「**foobar**」という掛け合わせはあるが、**foofooやbarbarという重ね合わせ名はないらしい。

イギリス圏では、上記の他に「wibble」「wobble」「wubble」「flob」というのもあるとか。
## Python
モンティ・パイソンにちなんで名付けられてるので、メタ構文変数もそれに則っているらしい。

- spam
- ham
- eggs

##日本
1. hoge（ほげ）
2. fuga（ふが）
3. piyo（ぴよ）
4. hogera（ほげら）

…「**ほげ**」以外、見たことないよ。

英語圏と同じお作法で、上から順番にメタ構文変数として使用される。
「**hoge**」を吹っ飛ばして「fuga」を使うことはないそう。
「**hogera**」まで使用した場合、次は「**hogehoge**」「**piyopiyo**」とバリエーションを増やす（ここは英語圏とちょっと違う）。

日本人って[オノマトペ](https://ja.wikipedia.org/wiki/%E6%93%AC%E5%A3%B0%E8%AA%9E)大好きだよねw

## 人名
ここはちょっと脱線。
英語名の場合、それぞれ役割があるのが面白い。

| 名前 | 役割 | 
|:-----|:-----|
| Alice & Bob | 大抵は、AliceがBobにメッセージを送る |
| Carol, Charlie |通信における第三当事者|
| Dave, Ellen, Frank |第四当事者|
| Eve | 盗聴者。AliceとBobのメッセージを立ち聞きするが改ざんはしない |
| Isaac | IPS |
| Ivan | 発行者 |
| Justin | 司法体系 |
| Mallory, Marvin, Mallet | 邪悪な攻撃者。Eveと異なり、メッセージを改ざんしたり、攻撃したりする | 
| Matilda | 商人。電子取引・金融関係で使われる |
| Oscar |敵対者。Malloryと同様 | 
| Pat, Peggy | 証明者 | 
| Victor | 検証者 | 
| Plod(Officer Plod) | 法執行官吏 |
| Steve | 電子透かしで参照される | 
| Trent | 信頼された調停者。中立の第三者 |
| Trudy | 侵入者。Malloryの代わりに使う |
| Walter |見張り番 |
| Zoe | 暗号プロトコルの最後の当事者 | 

日本語だと「**太郎**」「**花子**」くらいしか思いつかないけど、英語はなかなかバラエティに富んでいる。
「**Johon Doe**（ジョン・ドゥ）」や「**John Smith**（ジョン・スミス）」も、メタ構文変数と言える。

「**Johon Doe**」は、女性だと「**Jane**（ジェーン）」に置き換わる。
日本語では「名無しの権兵衛」に相当するが、身元不明者に使われるので、登場場面の印象はあまり良くない…。

「**John Smith**」は「あしながおじさん」の冒頭で登場する、姿の見えない支援者の仮名でもある。
主人公のジュディは、独創性がないとかなんとか言って、偶然見かけた彼らしき人影から「**あしながおじさん**」と名前を付け替える。

そうか…**ジュディは正しい関数名を付けた[^ジュディは正しい名前をつけた]**んだなw
[^ジュディは正しい名前をつけた]: 「[あしながおじさん(Daddy-Long-Legs)](https://ja.wikipedia.org/wiki/%E3%81%82%E3%81%97%E3%81%AA%E3%81%8C%E3%81%8A%E3%81%98%E3%81%95%E3%82%93)」は1912年に発表された[Jean Webster](https://ja.wikipedia.org/wiki/%E3%82%B8%E3%83%BC%E3%83%B3%E3%83%BB%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B9%E3%82%BF%E3%83%BC)の小説。[世界名作劇場の作品](http://www.nippon-animation.co.jp/work/1582/)にもなったので、知っている人も多い。主人公ジルーシャ・アボット(ジュディ)は孤児院育ち。男の子ばかり援助していた紳士が、彼女の書いた「ゆううつな水曜日」という作文を気に入り、女子大への進学を援助することになった。援助の見返りとして、毎月学業の報告を義務付けられており、その手紙で呼びかける名前が「John Smith」。メタ構文変数な名前が気に入らなかったジュディは、いろいろな名前を考える。曰く「女の子嫌いさん」「お金持ちさん」などなど。最終的に、偶然見かけた紳士の影の手足が「ガガンボ」のように長かったので、「生涯変わらない特性」という事で「あしながおじさん」と命名したのだった。

# だがしかし。最近はメタ構文変数が通じない（らしい）
- [【え、通じない？】教授「hogehoge...」学生「何いってんのこの人？」](https://togetter.com/li/832718)
- [Ceron - 悲報：プログラムサンプルの「hoge」が通じない時代が来た - ねとらぼ](https://ceron.jp/url/nlab.itmedia.co.jp/nl/articles/1506/19/news043.html)

ここにも**世代の壁**が！「何いってんのこの人？」とか言われてるよ:joy:
**hoge**してるサンプルコードあるけど、**hoge**をどういう風に読み解いてるのだろうか。

# けれど「hoge」がいらないということではない
最近は本当にありがたいもので、ちょっとググるとサンプルコードがいっぱい出てくる。
コピペで動かす事ができるのは簡単なものの、「考える」部分が少ないと「覚える・応用する」が難しくなるような気もする。

よく言われる「**適切**」な命名とは、プログラミング能力残したまま、器用に記憶喪失になった自分でも、途中アサインした他人が見ても、その**プログラムが何に使われているか推測できる名前**にしろということ。
だから、その場限りの発明をするとコードレビューでシメられる。

命名規則を考えて作るためには、教えてもらう他に「**経験する**」ことが重要だと考える。
基本的な命名規則はあるけれど、状況によってはそのまま利用できず、環境に合わせた内容が必要になってくるからだ。
考えもせず、まるごとコピペするとその訓練ができない。

ただ、「**hoge**」「**foo**」などのメタ構文変数は、初心者に優しくないと否定的に見る話もある。
そこで代替案として出されていたのは、「a」「b」「x」「y」なので、これが初心者に優しいのかと言われると、うーん…。

# あったらいいな。やさしいメタ構文変数
アドベントカレンダー向け記事にしたので、展開が苦しすぎるwww

他人様が考えた代替案が賛成できないなら、他の案を考えろ…ということで、根本的な話。

**「適切」なメタ構文変数とはなんぞや？**

書き換えを強烈に促すほどの力強さを持つ言葉。…オノマトペの中でも、万人が恥ずかしくて、書き換えの欲望を抑えられない響きを持つ言葉…そこまで行き着くと、ネタものしか思い浮かばない無教養なワタクシ。

しかし、**その言葉が「メタ構文変数」として周知**されていなければ、ウィットに富んだ言葉を使っても、**まったく意味をなさない**。
細か過ぎて伝わらないネタ構文変数は、奇妙な性癖持ちと誤解される可能性もある。…そんな誤解されるのイヤだ。

そうして、結局「**hoge**」に立ち返る。
世の中に周知されているということは、それだけでも偉大だ。

あったらいいな！というよりも、すでにあるんやでー…ということで、やさしい**メタ構文変数「hoge」**。異論は認める。

そもそも自分は、**キーボードで叩きやすいから「hoge」**だという理由を聞いてたんだけど。
…愛が生まれるかは状況による:frowning2:

#参考サイト
- [メタ構文変数](https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E6%A7%8B%E6%96%87%E5%A4%89%E6%95%B0)
- [アリスとボブ](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%AA%E3%82%B9%E3%81%A8%E3%83%9C%E3%83%96)
- [名無しの権兵衛](https://ja.wikipedia.org/wiki/%E5%90%8D%E7%84%A1%E3%81%97%E3%81%AE%E6%A8%A9%E5%85%B5%E8%A1%9B#%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%BB%E3%83%89%E3%82%A6)
- [「hogehoge（ほげほげ）」とは？意味や使い方をご紹介](https://word-dictionary.jp/posts/1172)
- [「hoge」の起源を求めて](https://togetter.com/li/47113)
- [【プログラミング】hogeはNG！　メタ構文変数はわかりやすく！](https://minatame-lab.com/hoge-ng/)
- [ほげを考えるページ](http://kmaebashi.com/programmer/hoge.html)
- [Etymology of "Foo" | RFC(Request for Comments) 3092](https://tools.ietf.org/html/rfc3092#ref-JARGON)