酒呑ガジェット

〜静かな環境であなたに...こちらは音のでないコンテンツです。〜

【衝撃】JavaとJavaScript、似ていたのは名前だけだった。1995年の「便乗」が三十年の勘違いをつくった。

名前の似た2つの言語は、そもそも別の場所へ届けるために生まれた

JavaScriptを学ぼうとして、棚からJavaの入門書を誤って手に取る人は少なくない。頭についているJavaという4文字のせいで、同じ系統の言語に見えてしまう。だがJavaの本を開けば、書き方も、コードが動く場所も、思っていたのと違うことに気づく。

似ているのは名前だけではない。この2つが並んで語られるようになったのは、1995年に2つの企業が手を組んで一緒に売り出した、というビジネスの事情に行きつく。名前の近さには理由があり、中身の遠さにも理由がある。

1995年、2社の思惑が重なる

JavaをつくったSun Microsystemsの狙いは、異なる種類の機械に同じプログラムを持ち運ぶことだった。テレビの操作画面を例に取ると、機種が変われば内部で動く部品も、部品への仕事を頼む方法も変わる。機種の数だけアプリをゼロから作るのは現実的ではない。そこでアプリ側と機種側の間に共通の実行環境を置く道を選んだ。アプリの命令形式を揃え、実行環境の違いは受け取る側が吸収する。機器を超えて動かすための設計だ。

一方、ブラウザをつくっていたNetscapeが欲しかったのは、ウェブページに動きをつける手段だった。入力した内容を送信前にその場で確認したい。別の画面へ移らずに修正できるなら、ユーザーの手間は減る。そこでブラウザの中で短いプログラムを実行できるようにしようと考えた。これがJavaScriptの出発点になる。

片方は機械をまたいで動かすため、もう片方は目の前のページを動かすため。もともとの目的地が違った。

MochaからJavaScriptへ、開発中に2回変わった名前

最初はJavaScriptという名前ではなかった。1995年にBrendan Eichが約10日でつくった動く形のプロトタイプには、Mochaという仮の名がついていた。その後ベータ版ではLiveScriptという名称で登場する。同年12月、NetscapeはSunと共同でJavaScriptという名前を発表した。

Javaを頭につけた理由は、当時の人気に乗るという判断だった。実際、共同発表ではJavaでつくった小さなプログラムとウェブページをJavaScriptでつなぐ使い方が紹介されている。名前の近さは、2つを組み合わせる製品戦略そのものの表れだった。

想像しやすいのは天気のページだ。地域を選ぶボタンがあり、横にはJavaで描かれた天気の絵がある。どの地域が選ばれたかを拾うのはページ側のJavaScriptで、受け取った地域の天気を描くのは埋め込まれたJavaのプログラム。見張る係と描く係に分かれていた。当時話題のJavaと組み合わせられると伝える狙いが、名前にもデモにも込められていた。

手前のブラウザでページを動かし、奥のサーバーで基盤処理を担う2つの言語の分担を表したイメージ

同じパソコンでも、コードの受け手が違う

名前が似ていても、書いたコードを最初に誰が受け取るかが違う。

Javaでは、まずコンパイラがソースファイルを読み込んで変換し、クラスファイルができる。中には特定のCPUに縛られない中間の命令、バイトコードが入っている。それを実際に見て動かすのは、Windows用やLinux用など環境ごとに用意されたJVMだ。命令の形式をアプリ側で揃え、実行環境の違いはJVMが吸収する。ただし動かす側に対応したJVMと、必要な機能や外部ライブラリの準備が前提になる。

JavaScriptでは、ブラウザなどに組み込まれた専用のエンジンがソースを直接受け取る。V8のようなエンジンでは、実行しながらよく通る処理を後から最適化していく。事前に一度まとめて変換してから動かす道と、走りながら整える道。実行経路が違う以上、同じパソコンで動かしても中身は別の工程をたどる。

似た書き方で、結果が変わる

型とオブジェクトのルールも別物だ。もっとも分かりやすいのは足し算の振る舞い違いで、同じプラス記号でも、数値どうしなら計算になり、片方が文字列なら連結になる。注文画面に「10」と「20」が入力されたとき、Java側で文字列のまま渡せば結果は「1020」になる。

0と「0」の比較も分かれる。JavaScriptでは型を変換してから比べる比較と、変換せずに比べる比較が用意されているため、どちらを書いたかで結果が変わる。空欄を数に変換すると意図しない値になるため、注文欄のような画面では、空欄を確かめてから数に変換するのが定型になる。

classというキーワードも、見ためは似ていてもメソッドの探し方が違う。Javaはクラスどうしの継承関係をたどって見つける。JavaScriptはオブジェクトの原型をたどる仕組みを持っており、実行中に見つけられなければ別の場所へ探索が進む。同じ語が別の規則で動いている。

ページに組み込めることが、強みになった

その後の分かれ目になったのは、ブラウザに標準で入っているかどうかだった。JavaScriptはブラウザの標準機能として動く。一方、当時ページに動きを与えたJavaの小さなプログラムは、追加のプラグインを必要とした。読み込みも待ち時間も別管理で、ページの体感に影響する。

さらに通信の待ち時間の扱いが大きい。JavaScriptはサーバーへの送信を待っている間、ブラウザが次の仕事へ進める。待ち時間をページ側の処理で埋められるため、画面の反応が止まりにくい。計算そのものを別の場所へ任せて、結果だけを受け取る使い方も定着した。

言語のルールはECMAScriptという規格として共通に保たれ、実行環境はブラウザの外へ広がった。サーバーやツール、組み込みまで場が増え、使える道具は実行環境ごとに異なる。今の開発現場では、1つのWebサービスの中でJavaScriptが画面を、Javaが注文の確定や在庫の処理といった裏側を担い、結果がまた画面へ戻る、という分担が普通になっている。名前が似ている2つが、同じサービスの両端で別々の役割を持っているのだ。

ネットの反応

当時人気だったJavaの名前にあやかりたかったからだと思う。日本では普通のマーケティングだが、欧米では珍しいやり方じゃないか。訴えられるから。

VBとVBScriptを思い出した。名前が似ているだけの別物、というパターンは他にもある。

JavaScriptを学ぶつもりでJavaの本を買ったことがある。最初の10ページで違うと分かって、そのまま本棚に飾った。

アプレットが消えた今、JavaとJavaScriptが同じ画面に載ることはほぼない。名残だけのつながりだと思う。

同じサービスでもフロントがJSでバックがJavaというのは実感がある。会話するときだけ名前が紛らわしい。

AIの所感

JavaとJavaScriptの関係は、技術の話というより商標の話として語ったほうが整理が良いと思う。人気のある名前に乗せて、異なる用途の製品を同時に届ける。1995年の時点で、それは効果的な販売戦略だった。ただし、名前が約束してしまう期待もある。似ている名前は「似ている中身」だと誤解させ、JavaScriptを学ぼうとしてJavaの本を買う、という小さな失敗を三十年以上生み続けている。

その一方で、2つの言語は本当に補完関係にあった。ブラウザに標準で入る言語がページを動かし、重い処理はサーバー側で。この分担はJavaアプレットの消滅後も残って現在も続いており、名前の提携は、結果的に役割の分担として定着した。

似ているのは名前だけで、違いは動く場所と仕組みにある。初学者がまず覚えるべきは、構文よりもその図なのだと思う。

-パソコン