Web関係の情報を探していると必ずと言っていいほど現れるよくわかんないやつらNode.jsと
npm。
出会う機会も増えてきたのでそろそろざっくりでいいから知ろうと思って調べてみました。
今の所Node.js自体を使って開発をするつもりはないので本当にざっくりです。
しかもあたかも紛れもない事実の様に語りますが間違っているかもしれないので参考程度にお願いします。あと間違っていたらよければ教えてください。
今回はNode.js。npmは次回にしようと思います。
Node.jsとは#
Node.jsとはサーバサイドでjavascriptを動かすための実行環境(プラットフォーム)です。
短く言うとサーバサイドJavaScript環境 です(WIkipediaより)。
結構「Node.jsはサーバサイドJavaScriptです」って書いてあるところが多くて言語の一つなのかと思いがちですが実行環境であって言語ではないです。
ブラウザじゃないところでJavaScriptを動かすために入れるのがNode.jsで、書くのはあくまでもJavaScripということですね。
Node.js上で動くJavaScriptの事をNode.jsと呼びがちです。
Node.jsが実行環境だとわかったらpugやgulpを使う際になぜNode.jsを入れなければいけないかもわかってきました。
**pugやgulpはJavaScriptで実装されていて、そのJavaScriptを実行するためにNode.jsが必要だということです。**ブラウザじゃないところで動かす必要がありますからね。
pugのGithubページにも「implemented with JavaScript for Node.js (Node.js向けのJavaScriptで実装されているよ)」とちゃんと書かれていました(and browsersとも書いてあるように実はブラウザでも動きます)。
ということでJavaScriptで作られた便利なツールを使うためにNode.jsは入れておきましょう。
CommonJSについて#
Node.jsについて調べているとCommonJSという言葉がよく出てくるのでついでに調べてみました。
とりあえずWikipedia
サーバーサイドなどのウェブブラウザ環境外におけるJavaScriptの各種仕様を定めることを目標としたプロジェクトである
ですって。
JSってついていますがこれもまた別に言語じゃないです。
要するにブラウザ以外で使うJavaScriptではこういう場合はこう書きましょうねっていう約束ごとを定めようっていうのがCommonJSです。(多分)
約束事を定めるプロジェクトもしくは約束事そのもののことを指します。
後者の方が多い気がします。「CommonJSはJavaScriptの仕様です」みたいな。
そいつが一体どこにまとめてあるとかだれがやってんのかとかの実体が全くつかめてないので詳しくは正直よくわかんないです、
と思ったんですが今やっと見つけましたホームページ。
だれがやってるのかはよくわかりませんがとにかくここにその約束事が書かれているのでしょう。
このCommonJSに則したjavaScript(言葉の使い方としてあってるのかわかりませんが)のことをCommonJSと呼ぶこともあるみたいです(正しいかはわかりませんが少なくともネット上では見ます)。
で、なぜNode.jsを調べてるとCommonJSって言葉がよく出てくるかというと、Node.jsはCommonJS(に則して書かれたJavaScript)を動かすことができるからです。
代表的なのがexports/requireです。これが使えると確かに便利です。説明は割愛しますが、多分TypeScriptの回で出てくると思います
因みにNode.jsのAPIはCommonJSに則して作られている部分もあるにはありますが別に完全に則しているわけじゃないんですって。なんのこっちゃ。
さらに因むとどうやらこの仕様のブラウザ内バージョンがECMAScript(エクマスクリプト)。
ESと略され現在ES6(別名ES2015)が最新らしいです。追記:7もあるらしい。
ES6はまだ対応していないブラウザが多いので一旦ES6で書いてからES5にコンパイル(トランスパイル?)するBabelが結構流行っているらしい。
TypeScriptとライバル関係にあるようです。
まとめ#
まとまりのない感じになってしまいましたがまとめると
- Node.jsはブラウザ以外でJavaScriptを実行するための環境である
- pugやgulpなどはJavaScriptで作ってあるので実行するのにNode.jsが必要
- CommonJSはJavaScriptの書き方の約束事を決めようぜっていうプロジェクト(言語じゃない)
- 「CommonJS」の一単語が「CommonJSプロジェクトで定められた仕様」という意味で使われることも多々ある
- Node.jsはCommonJS(に則したJavaScript)を実行できるがNode.jsのAPIはCommonJSに完全に則しているわけではない(ウケる)
- ECMAScriptもJavaScriptの仕様
- BabelとTypeScriptが双璧
ってところでしょうか。
なんとなくとはいえ、理解できて大分すっきりしました。あってるかどうかはさておき。
言語じゃないのに末尾にScriptってつけるのやめてほしい。
次回はnpmについて書きます。短く終わる気がします。
ではまた。