JavaScriptとECMAScript、CommonJS/AMD/Browserify/RequireJS/Webpack、TypeScriptに関する覚え書き

NewImage

タイトルのままですが、いまいちすっきりしなかったので調べ物をしました。以下、今のところの理解をざっくりと。なお、突っ込みどころ満載かと思いますが生暖かく読んでもらえればと思います。

あと気にはなっているのですがReactとかはまだ調べてません!

■ JavaScript今昔物語

  • Netscapeが開発。最初Livescriptとしていたけど当時Javaが人気だったのでそれにあやかって(←おかしい)JavaScriptと命名。JavaとJavaScript、言語的にはまったく関係ない。「あ、今Java勉強しています!」「…JSだよね」的な悲劇の始まり。
  • 無料のNetscapeに搭載されたJavaScriptを見てMicrosoftがその人気に嫉妬。Internet Explorerにも載せよう!と思ったらまさかのNetscapeからのライセンス拒否。「ちっ、しゃーねーな」ということで似たようなJScriptを独自で開発開始。しかしブラウザ戦争とともに両社の仕様は乖離するばかり。「もうやめて!開発者のライフはゼロよ!」
  • このままじゃまずいってことでEcmaインターナショナルなる国際団体が「まぁまぁ、ちょっと仕様まとめようぜ!」と名乗りをあげる。いろいろあってECMAScript 3なるバージョンが完成(ちなみに読み方は「エクマスクリプト」。テクマクマヤコンに似てますね!)。だいたいのブラウザで実装される。
  • ECMAScript 4ではさらにモダンにクラスだなんだと盛り込もうとしたけど「いや、今のバージョンと違いすぎね?」「ECMAScript 3.1作ってたのに!(Yahoo!&Microsoft)」という事態になってしまい、バージョン4は幻と消える。
  • そのあともいろいろあったけど和解してECMAScript 3.1をベースにしたECMAScript 5が完成。モダンブラウザでほぼ実装が完了。ただ厳密モードとかJSONまわりとかがちょっと便利になった感じの変更である。
  • 現在(2015年)ではJavaScriptがそうとう盛り上がってきたため、ECMAScript 6(ES6)が完成に向けて進行中。ES6ではクラスベースのオブジェクト指向やモジュール、静的型付などが盛り込まれ、大規模開発にも耐えられる本格的な言語になる予定。

■ JavaScriptにおける大規模開発をめぐる動き

  • ES6が盛り上がる前から「JavaScriptがいい感じなので大規模開発に使いたい!」というニーズが顕在化。
  • 「JavaScript、ブラウザだけで使えるのもったいない、どこでも使えるようにしよう!でも今の仕様だと無理ゲーっぽい(泣)」「よーし、仕様作っちゃうぞ!その名もServerJSだ」「サーバーだけじゃなくない?」「じゃ、CommonJSだ!」といって出来たのがCommonJS。あくまで任意団体が決めた仕様。主な実装としてはNodeJSがある、と言い張っているが、NodeJS側では「うーん、どうかな☆」という態度。
  • CommonJSではさまざまな仕様を策定していたが、主なものはモジュール管理。大規模開発になると複数ファイルの依存関係とか管理しないといけないのでそのあたりの仕様を決めようとしていた。
  • 「なんかCommonJSのモジュールの仕様、全然決まらなくない?」「だよねー、じゃ、俺達で決めよう!その名もAMD(Asynchronous Module Definition)、非同期っぽくやるよ!」といって生まれたのがAMD。
  • モジュール管理でCommonJSとAMDが出てきて「えー・・・なんか一緒にしちゃおうよ」と言って生まれたのがUMDだけどあんまり話題になっていない模様(悲しい)。
  • どちらにしろCommonJS派とAMD派に分かれて実装が検討された結果、AMD派からRequireJSが生まれる。これを使えばたくさんのJSを読み込み順にずらずらと並べる必要がなくなって依存関係がすっきり書けるように。
  • CommonJS派からも対抗してBrowserifyが生まれる。関係ないけどロゴがハリーポッター風。
  • 「RequireJSとBrowserifyのいいとこどりして、さらに機能拡張するぜ!」といって生まれたのがWebpack(← だいたいイマココ)。

■ やっぱりES6でしょ

  • 「CommonJSとAMDもいいけど、やっぱりES6にもモジュール管理あるし、それ待ちたいなぁ・・・あ、ES6の仕様を先取りしたTypeScriptがあるじゃん!」ということでTypeScriptも盛り上がっている模様。
  • 余談ですが「ま、とりあえずES6で書いておこうぜ。現行のブラウザに対応するためのライブラリがあればいいんじゃろ?」と言って生まれたのが6to5(現在はBabelに改名)。

というわけで個人的にはTypeScriptを勉強したいと思います。VisualStudioのMacOS版出ないかなぁ・・・(無理か)。

Pocket

SPONSORED LINK

Leave a Reply

Your email address will not be published. Required fields are marked *