なんでそうなるの?(よみかたへん)(T3:Pt2:Ch04)
ちょくちょく見かける、「このコマンドや関数、なんて読むの?」「人によって読み(発音)が違う……」というお話です
そういえばぽつぽつあった
pingの話をきっかけに
6月中頃にこんなまとめを見ました。
𝕏(Twitter)でこんなリポストをしましたが:
こういう、コンピュータ/プログラミング関連の英字綴りで「(身の回りの)人によって読み方(発音)が違う」「正しくは(英語的には)どう読むのか?」という用語はぽつぽつあって、印象的なものもあって、このnoteでそういう話題を取り上げる案がありました。
いい機会?ですから今回書いてみます。
これは日本プログラミング界のあちこちで話題になってきた、ありふれたことだろうと思います。「それ、知ってる」と思うことばかりか知れませんが、「どこの仕事場でもそういうことがあったんだな」と思ってください。
pingの話 補遺
pingなんてコマンドが視界に入ってきたのはTCP/IPネットワークが自分ごとになってきた1990年代半ばから後半。仕事場でその方面に詳しい同僚から教わったんじゃないかと思います。
だとするとこのコマンドの読みもその同僚に影響を受けていた可能性が大。
そうだとして、それが「正しい読み」なのか、それとも同僚が(勝手に)そう呼んでいたのかは判りません。その同僚も、そう読むように教わっただけなのかも。
コンピュータ用語、プログラミング用語の読み方(発音)にはけっこうそういうことが多い――教えてくれた人の読み方をそのまま受け継いだり、なんとなく憶えた読み方がそのまま染みついたり、ということが多い気がします。
マニュアルも文字情報で、英語の辞書のように読み(発音記号)がついているわけではありませんし。
教わったのでなく、自分がその綴りを初めて読んだならどうだったでしょうか。「英語なら《ぴん(píŋ)》だろうなあ」と思いつつもやっぱり《ぴんぐ》と読んだんじゃないかと思います。綴りにgの文字があることを明示する意図と、《ぴん》と発音する別の用語(PIN、刺すピンなど)と区別する意図とで。
(場合によっては前者の意図から《ぐ》をはっきりと発音するなんてこともしますし)
自分的「なんでそうよむの?」歴代ベスト1
Unixのあれ
プログラマー(Unix/C系)の道に入って、コンピュータ用語/プログラミング用語の読み方で一番印象が強くて今でも憶えているコマンドがあります。
コマンドマニュアルを読んでいてそのどう読むか判らない謎のコマンドに行き当たって先輩(当時仕事場でUnixの第一人者と目されていた)に質問したのか、先輩から「こんなコマンドがあるぞ」と教わったのか、もはや朧ですが、それがcronでした。(正しくはcronはデーモンで、cronに指示を送るコマンドがcrontab)
どう読む(発音する)と思いますか?
自分が教わったのは、「クーロン」でした。
英語の知識からは、その綴りからこのように発音するのは受け容れ難いものがありました。
cronはとても便利な仕組みですが、システム管理者でもなくUnix世界に定住していたのでもない一ユーザーとしてはあまりお世話になることはありませんでした。にも拘わらず、その名前は「なんでそう読むのか判らない」代表例としてずっと頭に棲みつき今に至ります。
あまりに“独特”な読みなので、これは「方言」なのか? その先輩だけがそう呼んでいたということはないか? 英語話者もそのように読むのか? と考えたりもしましたが、pingで触れたように先輩も他のエンジニアからそう教わったのかも知れず、当時はインターネットを検索するという手段もなく、「なんでそう読むのか判らないけどなんかそう読む(らしい)」状態で定着してしまいました。
比較的最近、この読み方はわりと“一般的”らしい――どうやらこの界隈ではそう呼ばれることが多いらしいと知って、「謎」は一応解けたのか解けていないのか、自分の生活にも仕事にも影響はないしそもそも読みがどうでも問題はないしで、「納得はしていないけれど、“放置”」といった状態です。開発者・発案者にインタビューできたら面白いですね。なおウィキペディア日本語版を見ると、名称の由来は書いてありますが読み(発音)は書いてありません(2024年6月29日現在)。
Unix世界はへん
多くの種類のOSを触ったわけではありませんが、そもそもUnixはコマンドの名前のつけ方に「癖」が強い印象を受けます。英字2字~5文字程度の名称のコマンドが多いのは、冷静に考えると不思議ですし(事情はあったにせよ)、略し方が独特で一貫性があまり感じられない……そのためか、読み方(発音)も人によって? さまざまでした。
マニュアルで初めてviという文字列を見た時は「《ヴぃ》って読むのかな?」と思いましたし、edは当初《えど》と読んでいました(ほどなく、《いーでぃー》の方が多数派っぽいので《いーでぃー》に)。
cpは《しーぴー》と読み、mvは《えむぶい》と読みますが(ですよね?)、suは《すー》。
文字数はあまり関係ないのか、三文字のsedになると《せっど》。でもpwdは《ぴーだぶりゅーでぃー》。「母音を表す文字を含むコマンド名は発音しやすい読みをする」という経験則でしょうか。それも既にvi, edという例外に出くわしていますが。
でもshは《えすえっち》と読むより《しぇる》と読む方が圧倒的に多いのでは。
edの姉妹にredというエディタがあって、これは《れっど》ではなく《あーるいーでぃー》で、たぶんそれが「正解」(「Rつきのed」だから)。
chmodになると、途端に略す前の綴りを汲んで《ちぇんじもーど》と読む。綴りに引っ張られて《ちぇんじもっど》と読むことはある。これを《しーえっちもーど(もっど)》とか《ちゅもっど》などと読むのを聞いたことはありません。
他のOSでも似たようなものなのかも知れませんし、使い込むならコマンド名が短いのはかえって楽ですが。
「なんでそうよむの?」から、「なんて読む?」へ
プログラミング言語というか、Cの話
「なんでそうよむの?」から離れていきますが、コンピュータ用語/プログラミング用語には、「人によって、組織/仕事場によって発音が違う」ものもけっこうあります。
特にUnixのシステムコール名、C言語のデータ型や標準ライブラリ関数名には「変わった名前」が多く見られます。
一説には、Cが開発された時の環境の制約から、識別子の長さに制限があったからとか。
これはありそうな話で、自分がプログラマー修行をしていた時代でも、「ソースコード上で8文字より長い識別子名をつけることはできるが、コンパイル時に8文字より長い部分は切り捨てられる」という仕様のコンパイラがありました。
時にはそれで足元をすくわれるプログラマーもいましたし、その制約を回避するために美しくない関数名のつけ方をするのは莫迦げていますが、そういう時代でした。
「どんなことをしてくれるか読むだけで判るような関数名」もいいことばかりでもなく、長い名前は、互いの識別をするのには便利だけど、タイプする手間・時間はかかるし、ミスタイプの危険も高まるし、読み上げるのも面倒です。
UnixのシステムコールやCの標準ライブラリはその点「実利一点張り」というか、潔いというか、徹底しています。そしてそれが「読み方(発音)のぶれ」を生む原因になってもいるわけです。
char
C/C++の基本データ型です。
筆者はこれを綴りの通りに《ちゃー》と読みます。getchar, putcharは《げっとちゃー、ぷっとちゃー》です。
きっとプログラミング研修で講師(先輩)がそういう読み方をしていたんだと思います。そうでなくとも、自分にはそれが「自然」な感じでした。
(なお同様の働きをする関数getch, putchは、筆者は《げっとしーえっち》《ぷっとしーえっち》と読んでいました。《げっち》《ぷっち》と読む人もいた)
後輩たちも記憶する限り他の読みをする人がいませんでしたから、教育の影響力は大きい。
中途で来た人や、よその仕事場の人には、《きゃら》と読む人もいました。charがcharacterから来ているからでしょう。この派の人はgetchar, putcharを《げっときゃら、ぷっときゃら》と読みます。
書いていて、《ちゃー》派の中にも《げっちゃー、ぷっちゃー》と呼ぶ人もいたような気がしてきました。
charを《きゃらくた/きゃらくたー》と読む人もいたかも知れません(記憶にはありませんが、いたような気もしてきている)。
なお整数のデータ型であるintを《いんてじゃー》と切り詰めない読み方をする人にも会った記憶がありません。
Cの標準ライブラリには関数名が発音し難いものがある・文字列操作系
strcpy, strcat, strcmpという文字列操作系の関数群があります。自分はこの"str"を「stringの略なんだよな」と解して、《すとりんぐこぴー、すとりんぐきゃっと》などと読んでいました。charを《ちゃー》と読むくせに。
他には、《すとら*》と読む人がいました。
《えすてぃーあーる》と読む人もいたような気がしますが、数は多くなかったかと思います。またそういう人も、後半のcpyは《こぴー》と読んでいたんじゃなかったかな。
なお、文字列操作関数の兄弟にmemcpy, memsetの一族がいます。筆者はこれらを《めむ*》と読んでいました。
発音し難いものがある・stdio系
ファイルに対する書式つき入出力のfprintfやfscanf、メモリ(文字配列)に対する書式つき入出力のsprintf, sscanf。
これらは「原形」のprintf, scanfに接辞(接頭辞のfやs、接尾辞のf)がついたと考えて、接辞を「英字一文字」として《えふぷりんとえふ、えすすきゃんえふ》と発音するのが「多数派」でしょうか。(でも筆者は最初のうちsprintfを英単語に引っ張られて《すぷりんとえふ》と読もうとしていた)
printf、最初はどう読むのか判りませんでした。《ぷりんとふ》(「ふ」は「f」の子音のみ発音)と読むのかと思っていて、でも発音しづらいし、ひそかに悩んでいました。
その他、思い出せるもの
動的にメモリを獲得するmallocという関数があります。自分は《えむあろっく》と読んでいましたが、《まろっく》と読む人(たち)がいました。
筆者には、先頭のmはmemoryを表す接頭辞、という感覚です。(mallocで割り当てたメモリを開放する関数が接頭辞なしのfreeなのは謎)
ただ「色々な読み方(をする人)がいた」というだけの話(´・ω・)
現場では、関数名やデータ型名に人によって読み(発音)が違っても、それによって混乱などが起こることはなかったことは記しておきます。
読みを聞けば大体は何を指しているか判りましたし、それで意思の疎通ができたからでしょう。
誰しも最初に覚えた読み(発音)に親しむものですし、ソフトウェアの開発をしているのであって「どんな読み方が正しいか勝負」をやってるわけじゃありません。
「自分の仕事場では《ちゃー》と読む人が多かった。よその仕事場の人には《きゃら》と読む人もいた」は、ひっくり返せば「《きゃら》と呼ぶ人たちの仕事場に自分が入っていくこともある」ことになります。
こうして振り返って我ながら思うのは
自分自身の(Cの標準ライブラリの関数名やUnixコマンドの読み方の)一貫性のなさにやっと気づくとともに、この「一貫性のなさ」は何なんだろうなと思わずにいられません。
charを《ちゃー》と読むならstr*は《すとら*》と読むのが妥当だと、今これを書いていて思うのに、当時そうはならなかった。
str*を《すとりんぐ*》と読んでいるくせに、mem*を《めむ*》と読む。
読み方にルールを設けてそのルールに沿って読むのではなく、綴りを都合のよいように(読みやすいように)読んでいた、ということなんでしょうか。
あまり「かっこいい」ことじゃないよなと思いながら、「名称をへんに圧縮するUnixのせいだ」と思いたい自分がいます。
あれこれ綴ってきましたが、「ともかく、自分が慣れ親しんでいる読み方(発音)をしていないからと言ってその人を莫迦にするのは止そう」
「誰しもその読み(発音)に慣れているだけだし、自分もそうであるに過ぎないのだから」
と、無理やりまとめっぽいことを書いて終わりにします。
(いつかこんなことも書き残しておけたらいいと思っていたことを書けました……)
(2024-06-30 R001)