「JavaとJavaScriptって何が違うの?」に100点満点で答えるための雑学

JavaとJavaScriptの名前の由来
Java や JavaScript という単語は聞いたことがあるけど、違いが全く分からないという凄く狭い需要に応える記事を書こうと思いたった。しかしながら、そもそも「 Java と JavaScript は何が違うの?」という疑問を持つ貴方は、どういう状況なのだろうか?
Java と JavaScript はどちらもプログラミング言語であり、名称の先頭四文字が同一である。だからこそプログラミングに馴染みのない人からしてみれば、どっちも似たようなものなのだろうと思ってしまうことは理解できる。「Java と JavaScript を拡張したものなのかな?」と、名前だけからは判断できてしまう気もする。
しかし、どちらも実装して触れたことのある者からしてみれば、この両者は全く別物だ。パンダとレッサーパンダくらい違う。それらの違いは列挙していけばキリがないくらいなのだが、後半で端的にまとめるとして、とりあえず「どうして名前が似ているのか?」という疑問を解決しよう。
Javaの名前の由来
サン・マイクロシステムズ(現在はOracleに買収されている)は「どのようなハードウェアでも動く言語」としてJavaの前身である「Oak」を1992年に開発した。しかし導入が期待された家電業界において浸透せず、商業的には失敗となった。
そんな中、我々が今は当たり前に使っているウェブブラウザが急速に浸透し、「どのようなハードウェアでも動く言語」すなわち「どのOSでも動かすことができる言語」であるOakは、その流れに合致している思想だということに気づき、正式にOakをリリースすることに決めた。
そこで問題となって立ち塞がったのが商標の問題であった。当時、「オーク・テクノロジー(Oak Technology)」という半導体メーカーがOakの商標を取得しており、それと競合してしまうために名前を変えることを求められたのだ。そのブレインストーミングの場で出た案の一つが、アメリカのスラングにおいて、「コーヒー」そのものを指す言葉「Java」だった。
そうして決まった名前を引っ提げて1995年5月のIT展示会「SunWorld '95」にて、初めて全世界にJavaを発表した。この発表時、当時のシェアNo.1ブラウザを擁するNetscape社が「自社ブラウザ(Netscape Navigator)にJavaを標準搭載する」と表明したことで、IT業界全体に「Javaフィーバー」が巻き起こった。その後、1996年に正式パッケージとして「Java Development Kit (JDK) 1.0」がリリースされるに至る。
JavaScriptの名前の由来
Netscape社はWebページに動きを与えるスクリプト言語としてLiveScriptをリリースした。しかし先ほどのJavaを開発したサン・マイクロシステムズとNetscape社との間で業務提携を結んだことで、世間的な大ブームを引き起こしたJavaにあやかって、LiveScriptをJavaScriptに改名した。
つまり、JavaScriptの名前は「Javaに似ている」ということは全くなく、マーケティング戦略の一環でつけられた名称なのである。
JavaとJavaScriptの違い
ここまでの話から分かってもらう通り、互いに似たプログラミング言語だから名前が似ているということではない。そのため言語としての違いを列挙していくと全くキリがない。とりあえず、下記に示す2軸で整理していくこととする。
実行場所
- Java : サーバー側(Java仮想マシン: JVM上)
- JavaScript : ブラウザ側(ユーザーの手元のPC/スマホ)
Javaはサーバー側、つまりはバックエンドといわれるシステムの裏側で使われることが多い。また、Androidアプリの開発でも使われる。堅牢で安全性の高い大規模システムを作るのに向いている言語とされている。
一方のJavaScriptはブラウザ側、つまりはフロントエンドといわれる実際にユーザーが触れて操作するUIの開発で使われることが多い。サイト上で「ボタンを押したらモーダルが開く」「画像がスライドする」といった動的な動きや操作は、JavaScriptによって実装されていると思っていいだろう。
文法の厳格さ
- Java : 静的型付き言語(コンパイル言語)
- JavaScript : 動的型付き言語(スクリプト言語、インタプリタ言語)
Javaでコードを書いた後、それを動かすためには一度コンパイルする必要がある。コンパイルとは人間が書いた人間が読めるコードを、機械が読んで理解できる形式に変換して実行ファイルというものを生成する処理のことである。その際、型があっているかどうかのチェックが厳密に行われ、問題があればエラーを出して実行ファイルを生成しない。
一方、JavaScriptでコードを書いた後、それを実行する際にコンパイルは必要ない。ブラウザがコードを1行ずつ読み込んで実行してくれるのだ。そのため厳密な型チェックは行われずに動的に型チェックが行われない。
まとめ
ここまでの内容を踏まえると「 Java と JavaScript は何が違うの?」という質問には簡単に答えられるようになったことだろう。それぞれ全く違う言語であるため、むしろ答えられる要素が多すぎるので、「コンパイル言語とスクリプト言語だよ」だとか「バックエンドとフロントエンドだよ」とか、それぞれ思い思いの違いを言ってもらえればいい。
さらに踏み込んで、どうして名前が似ているのかという点に踏み込んで答えてあげれば、100点満点の回答といえるだろう。
「ただの当時の大人の事情(マーケティング)だよ」と。
