言語名
Last Updated: 2026-09-28 02:00
結論
melangという名前は仮称であり、現時点では正式名称を確定しない。
プログラミング言語の名前(言語名)は、一度公開すると変更コストが非常に高い。GitHubリポジトリ・パッケージレジストリ・ドメイン・ドキュメントURL・コミュニティでの通称など、あらゆる場所に一度刻まれてしまうためである。一方で、処理系の実装が進む前の段階では、どんな名前が適切かを判断する材料(言語の性格、コマンド名として何が使いやすいか、どんな衝突が実際に問題になるか)がまだ揃っていない。
そのため、正式名称の決定は処理系の理解・実装がある程度進んだ段階まで先送りし、それまではmelangという作業用の名前で開発を進める。これは「決めない」という消極的な判断ではなく、決定に必要な材料が揃うまで意図的に決定を遅らせるという設計判断である。
他言語比較
プログラミング言語の名前の付け方で実際に問題となった観点を、既存言語の事例で比較する。表記揺れ、他ソフトウェアとの名前衝突、検索でのヒットしやすさ、拡張子やCLIコマンド名との乖離など、命名時点では見えにくかった問題が後から表面化したケースが多い。
| 言語 | 拡張子 | CLIコマンド | 説明 |
|---|---|---|---|
| Rust | .rs | rustc / cargo | 言語名とCLIコマンド名(`rustc`)が異なる。表記揺れはほぼない。 言語名は`Rust`だが、コンパイラソースコードを解析し、実行可能な形式(機械語や中間表現)に変換するプログラム。静的型付け言語では、実行前にコンパイラが型の不整合などをチェックする役割も担う。のコマンド名は`rustc`、パッケージマネージャは`cargo`と、場面ごとに別の名前を持つ。言語名自体は一般名詞から離れた固有の綴りのため、検索時に他の意味と衝突しにくく、大文字・小文字の表記揺れも起きにくい。 |
| MoonBit | .mbt | moon | "Moon" + "Bit"の合成語。新興言語として一意な名前を最初から設計できた例。 既存語との衝突を避けるため作られた新しい合成語で、ドメイン・パッケージレジストリ・GitHub上の名前空間を後発でも確保しやすい。新興言語は歴史的制約がない分、命名の自由度が高く、衝突回避を最初から設計に組み込める。 |
| Swift | .swift | swift / swiftc | 一般名詞かつAppleの既存製品名と衝突していた。 「速い」を意味する一般名詞であり、発表当時すでに複数の同名ソフトウェア・商標が存在していた。Apple自身が開発・商標登録して統一を図ることで、後発でも実質的に名前を確保できた例。個人・小規模チームには真似しにくい、企業の商標力に依存した解決策。 |
| Kotlin | .kt | kotlinc | フィンランドの島の名前に由来し、既存語との衝突がない固有名詞。 開発元JetBrains本社近くの島`Kotlinsaari`(コトリン島)に由来する。一般語ではないため検索性・一意性が高く、大文字・小文字の表記揺れも起きにくい。地名由来の命名は、意味を持たせずに固有の識別子を得る手段として機能する。 |
| Java | .java | java / javac | 地名・飲料名に由来する固有名詞で、衝突は少ないが商標管理が絡む。 インドネシアの地名兼コーヒーの俗称に由来する固有名詞で、一般的なプログラミング用語との衝突は少ない。一方で`Java`は当初Sun Microsystems、現在はOracleの商標であり、言語名が単なる識別子ではなく法的に管理された商標である点が、コミュニティ主導のOSS言語とは異なる性質を持つ。 |
| Scala | .scala | scalac / scala | "scalable language"の略で、意味を持つ合成的な命名。 "scalable"(拡張可能)と"language"を組み合わせた名前で、設計目標(小規模から大規模まで同じ言語で書ける)をそのまま言語名に込めている。意味のある名前は覚えやすい反面、その意味に沿わない機能を追加しづらくなるという制約も生む。 |
| C# | .cs | csc / dotnet | 記号を含み、発音(シーシャープ)と表記が一致しない。 `#`(シャープ)を含み、音楽の調号を模した名前だが、ファイル名や多くの文脈では`#`をそのまま使えず`csharp`や`cs`に置き換えられる。発音は自然だが表記の面で常に変換が必要という、C++と同種の課題を持つ。 |
| C++ | .cpp / .h | g++ / clang++ | 記号を含む言語名で、ファイル名・URL・識別子に使えない。 `+`という記号を含むため、そのままではファイル名・パッケージ名・多くの識別子規則に使えない。`cpp`という代替表記が広く使われ、コンパイラソースコードを解析し、実行可能な形式(機械語や中間表現)に変換するプログラム。静的型付け言語では、実行前にコンパイラが型の不整合などをチェックする役割も担う。も`g++`・`clang++`のように独自の命名になっている。記号を含む名前は視認性やインパクトはあるが、機械的な取り扱いの面で常に読み替えが必要になる。 |
| C | .c / .h | gcc / clang / cc | 前身言語Bの次のアルファベットという単純な由来で、検索性は最低クラス。 前身であるB言語(BCPL由来)の次のアルファベットという、意味を持たせない単純な理由で名付けられた。一文字の言語名は一般的な検索エンジンでの絞り込みがほぼ不可能で、"C programming language"のように文脈を添えないと使えない。ISO標準化以降は`C89`・`C99`・`C11`・`C17`・`C23`のように制定年(西暦下2桁)を付けたバージョン呼称が定着し、こちらが版を区別する事実上の名前として機能している。 |
| Go | .go | go | 一般名詞で検索性が低く、`Golang`という別名が定着した。 `Go`は日常英単語であり、検索エンジンで言語のドキュメントに絞り込みにくい。この問題を避けるため、コミュニティは`golang`という別名(ドメインも`golang.org`)を早期から用意し、事実上の第二の名前として定着させた。一般名詞をそのまま言語名にすると、名前の一意性を別の手段(別名・ドメイン)で補う必要が生じる例。 |
| Zig | .zig | zig | 一般名詞に由来しない短い固有の名前で、拡張子・コマンド名・言語名が一致する。 `Rust`や`Kotlin`と同様に一般名詞ではない短い名前で、`.zig`という拡張子・`zig`というCLIコマンド名・言語名がすべて一致しており、Go(`Golang`という別名が必要)やSwift(既存製品名との衝突)のような問題を持たない。命名の由来について、詳細を裏付ける公式一次情報は確認できていないため、具体的な語源はここでは断定しない。MoonBit同様、新興言語としてドメイン(ziglang.org)や名前空間を早期から一意に確保できた例。 |
| OCaml | .ml / .mli | ocaml / ocamlc / dune | "Objective Caml"の略称で、大文字小文字の表記揺れが長らく問題になった。 前身言語Caml(Categorical Abstract Machine Language)にオブジェクト指向機能を加えた"Objective Caml"の略称。正式表記は`OCaml`(先頭2文字のみ大文字、以降小文字)だが、`OCAML`や`Ocaml`といった表記揺れが普及初期から見られ、公式サイトが正しい綴りを案内する文書を用意するほどだった。略称化で名前は短くなった反面、大文字・小文字の並びという新たな表記ルールを覚える必要が生じた例。 |
| F# | .fs / .fsi / .fsx | dotnet fsi / dotnet build | "Functional"の頭文字とC#由来の"#"を組み合わせた命名で、記号ゆえの表記揺れも継承した。 Microsoft Researchで開発され、C#と同じ.NET上で動くことを示すために、C#の"#"という命名パターンをそのまま踏襲し、関数型(Functional)であることを表す"F"と組み合わせた。前身であるOCamlからの影響は名前からは読み取れない。C++・C#と同様に`#`はファイル名や多くの文脈でそのまま使えず、`fsharp`という表記に置き換える必要がある。 |
| Haskell | .hs | ghc | 人名(数学者Haskell Curry)に由来する固有名詞。 論理学者Haskell Curryの名(ファーストネーム)に由来する。人名由来の命名は一般語との衝突を避けやすいが、綴りの読み方が英語話者にも自明でない(「ハスケル」と読む)という副作用がある。 |
| Erlang | .erl / .hrl | erl / erlc | 開発元エリクソン社と数学者の名を掛けた人名・社名由来の固有名詞。 開発元Ericsson(エリクソン)社の略称と、数学者Agner Krarup Erlang(待ち行列理論の創始者で、通信分野の単位「アーラン」にも名を残す)の名を掛けた命名とされる。固有名詞のため一般語との衝突は少ないが、開発したEricsson社内での呼称という側面が強く、対外的な知名度はElixirの後発ブームに助けられて広がった面がある。処理系(VM)を指す`BEAM`という別名も持ち、言語名・VM名・実行コマンド(`erl`)が三者三様である点はRustに似た構造を持つ。 |
| Elixir | .ex / .exs | elixir / iex | 「不老不死の霊薬」を意味する一般名詞。他分野・他言語との衝突は少ない。 化学・錬金術用語である「万能薬」を意味する語から取られている。一般名詞ではあるが日常会話での使用頻度が低いため、検索性はGoやSwiftほど悪化していない。Erlang VM上で動く後発言語として、印象的で覚えやすい名前を優先した例といえる。 |
| TypeScript | .ts | tsc | "Type" + "JavaScript"の合成語で、既存言語との関係を名前に含める。 JavaScriptに型を付けるという設計目的をそのまま名前にした合成語。既存言語の拡張であることが名前から一目で伝わる利点がある一方、"Script"を含むためコマンド名は`tsc`のように略される。 |
| JavaScript | .js | node | Javaとの類似性を利用したマーケティング目的の命名(言語的関連はない)。 開発当初`Mocha`、次に`LiveScript`と呼ばれていたが、当時人気だったJavaに肖ってNetscapeが`JavaScript`と改名した。技術的にはJavaと直接の関係を持たないにもかかわらず類似名を採用したため、初学者の混同や「JavaはJavaScriptの一部」という誤解を今も生み続けている。 |
| PHP | .php | php | "Personal Home Page"の略が起源だが、現在は再帰的頭字語に意味が変わった。 元々"Personal Home Page Tools"の略だったが、言語が本格化した後に"PHP: Hypertext Preprocessor"という自己言及的な(再帰的)頭字語に意味を変えた。名前の綴りを変えずに意味だけを再定義するという、ブランド刷新の一手法。 |
| Ruby | .rb | ruby | 前身言語Perlの宝石名にちなんだ命名(誕生月の誕生石)。 開発者まつもとゆきひろ氏が、同僚の誕生石(ルビー)にちなみ、当時人気だったPerl(真珠)より価値のある宝石名を選んだという逸話が知られる。一般名詞(宝石名)だが、プログラミング言語としての用法とは文脈が分かれるため実務上の衝突は起きにくい。 |
| Python | .py | python / python3 | イギリスのコメディ番組名に由来し、動物のパイソンとは無関係。 開発者Guido van RossumがMonty Python's Flying Circus(イギリスのコメディ番組)のファンだったことに由来し、ヘビの意味ではない。ただし現在ではヘビをモチーフにしたロゴ・グッズ・コミュニティ文化が定着しており、由来と現在のイメージが乖離した例。 |
トレードオフ
意味のある名前(合成語・頭字語)
- 利点:
TypeScriptやScalaのように、名前から言語の性格や設計目標が伝わる。初見の開発者への説明コストが下がる。 - 欠点: 名前が示す意味に縛られ、その意味から外れた機能追加がしづらくなる。また合成語は綴りが長くなりやすく、CLIコマンド名では結局
tscのように別名に短縮されることが多い。
固有名詞(人名・地名など)
- 利点:
KotlinやHaskellのように、既存の一般語と衝突しないため検索性・一意性が高い。ドメインやパッケージ名も確保しやすい。Zigのように、由来を明確に語らない短い造語も同様の一意性を持つ。 - 欠点: 名前自体に言語の特徴を示す手がかりがなく、由来を知らないと覚えにくい。またPythonの例のように、由来と後年のコミュニティイメージが乖離することもある。
一般名詞(既存の単語)
- 利点:
GoやRubyのように親しみやすく、覚えやすい。 - 欠点: 検索エンジンで言語のドキュメントに絞り込みにくく、
Golangのような別名で補う必要が生じる。既存の一般的な意味との混同も起きやすい。
CLIコマンド名との一致・不一致
- 利点(一致させる場合): 言語名とコマンド名が同じであれば、利用者が覚える名前が1つで済む(
Zigは拡張子・CLIコマンド・言語名がすべてzigで一致する)。 - 欠点(一致しない場合):
Rustとrustc、C++とg++のように、記号や長さの制約でコマンド名が言語名と異なる例は多い。この場合、利用者は「言語名」と「打つコマンド」という2つの名前を覚える必要がある。melangでどちらを志向するかは、正式名称の決定と合わせて検討する。
以上のように、どの命名方針にも一長一短があり、実装が浅い段階で決め切ることはできない。したがって現時点ではmelangという仮称のまま設計・実装を進め、正式名称は改めて別途決定する。