🙊

もう「JavaScript」って名前やめない?

に公開

TypeScriptがある現代において、JavaScriptはもはや凡人が書くべきものではなくなっています。プロジェクト内のJavaScriptはTypeScriptで置き換えられ、「TS」もしくは「DT」バッジのないnpmパッケージは白い目で見られ、TypeScriptをそのまま実行できるDenoやBunが登場し、Node.jsにすらTypeScriptの大部分の構文のサポートが入り、⸺そういう時代です。

生JavaScriptを書くのをやめるだけでなく、JavaScriptの名前を出すこと自体をやめ、代わりにTypeScriptと呼びませんか。実行時の挙動の話であってもです。TypeScriptはJavaScriptのスーパーセットなのですから、それをTypeScriptの話だとしても問題ありません。また、仮にWebブラウザーが型注釈をサポートし始めたとしてもです。仕様が追加されても、実装ができても、依然として型注釈のないJavaScriptで書かれた遺産は世の中に存在し続け、むしろそういった呪術的なコードの方が正統なJavaScriptであったという事実は変わらないわけで、そのような言語をTypeScriptより持て囃す必要はありません。

一般にWebフロントエンド開発の入門者は、「HTML」「JavaScript」「CSS」という3つの言語がセットで語られているのを見て、この3つをまず学習しなければならないのだな、と考えるでしょう。しかしこれは誤りです。最初にTypeScriptを飛び越えてJavaScriptを学ぶべき理由など一つもありません。現代ではコマンド1つ叩くだけでWebアプリケーションをTypeScriptで書く環境が整うのですから。

JavaScriptを学ぶ、というのは一部の変態や天才、異常者[1]の所業です。つまり言語仕様やコンパイラーや実行エンジンなどの最上流の開発者たちのやることです。もしくは㋔㋟㋗。そしてそれは、実のところECMAScriptを学ぶのと同じことです。したがって真にJavaScriptという名前を出すべきケースというのはほぼ存在しません。その必要があるとしたら、この記事のような歴史的文脈においてのみでしょう。


異論は認めますが、その多くには反駁ができます。

  • ECMAScriptは仕様でJavaScriptは実装

仕様と実装とで言語の名前を分けるというのはむしろ珍しいことです。JavaScript絶対殺すマン(一人称)が他に思いつく限りでは、CommonMarkとMarkdownの関係くらいでしょうか[2]。Markdownは構文論レベルでの独自拡張が巷に溢れているので仕方のないことですが、ECMAScriptにはそういうことはありません。Schemeほどたくさんの実装がある言語でも、言語名としてはどれも仕様と同じくSchemeです[3]。ECMAScriptの場合も、新仕様への追従度合いに違いはあっても、みなお行儀よく仕様どおりの構文論と意味論を実装していくので、やはりこれは呼び分ける理由にはなりません。

  • JavaScript = ECMAScript + Web API

APIに言及するならそのAPIセットやそれを提供する実行環境の名前を出せばよく、言語仕様に言及するならECMAScriptと呼べばいいだけです。また、Web APIをサポートしない実行環境も全然JavaScriptランタイムと呼ばれているので、いずれにせよこの等式は成り立ちません。

  • 初学者はJavaScriptから学び始めるべきでは?

この記事の主旨は、どちらかというと「JavaScript対TypeScript」よりも、タイトルにあるとおり「「JavaScript」という名前を使うのをやめよう」です。したがって、まずこの疑問は「初学者はECMAScriptから学び始めるべきでは?」と読み替えられます。

教育方針は人それぞれなのでこのトピックには様々な主張がありうるでしょうが、JavaScript絶対殺すマン(一人称)の考えでは、人間の意図をコメントよりも変数名よりもまず型として表現でき、コンパイルを通すためにはその意図を理解しなければならない、というような言語[4]を最初に学ぶべきです。適当に書いたコードをすぐ動かすことよりも、あらゆる構文やAPIの意図を考えながら書くことの方が重要です。その仕草さえ身につけば、何かが動かないときに調べることも誰かに聞くことも簡単になります。

  • 実際にJavaScriptとECMAScriptは異なる

そのような違いを意識することがある人は異常者ですので、JavaScriptという名前を出しても問題ないです。どう違うのか教えてほしいです。

  • JavaScriptはOracleの登録商標である[5]

そのようなことを意識することがある人は異常者ですが、それを知っているならなおのことECMAScriptという名前を使った方がいいでしょう[6]


草草

脚注
  1. もちろん褒め言葉ですが、最初に見習うべきではありません。 ↩︎

  2. ECMAScriptもCommonMarkも、後から仕様が作られたという点で似ています。既存実装を後出しで仕様違反と言えてしまうようになるのを避けるためでしょう。ECMAScriptの場合は商標の問題もありそうです(後述)。 ↩︎

  3. Racketのようなあまりにかけ離れた言語になる場合はその限りではありませんが。 ↩︎

  4. ECMAScriptの闇を全部含んでいるという意味ではTypeScriptも大概ですが、現状Web開発のエコシステムは大体そこをベースにしているので仕方ありません。 ↩︎

  5. なお、TypeScriptはMicrosoftの登録商標です。 ↩︎

  6. DenoがOracleと係争しているようです。Oracleが正しくないことをしているという点には同意できますが、そこまでしてJavaScriptという名前を解放させたいモチベーションは個人的には理解できません。TypeScriptやECMAScriptの存在を知ったうえで、そのどちらでもなくJavaScriptというネームバリューが好きな人、なんて本当に居るのでしょうか? ↩︎

Discussion