Node.jsってなんやねん?なんで知っとかんとあかんねん?
という超初歩的な疑問に対して答えようと思うのじゃ。
元々はphpとSQLというウェブの作り方はもう時代遅れだから、既存のサイトを全てnodeとnon-SQLに置き換えたいというプロジェクトへのオファーがあり、20年以上ウェブの現場から遠ざかっていた身としては、nodeっていうのはphpみたいなサーバー側の言語かのぉくらいに思っていたわけですが、調べると、サーバー側で動くJavascriptっていう言い方がよくされていて、さらに触れてみると、その言い方も間違いで、サーバー側でJavascriptを動かす為の実行環境と便利なモジュール群が正しい表現の仕方かなと。
元々javascriptって、ブラウザ上でしか動かないんで、サーバーサイドはphpとかpythonとか他の言語で書かないといけなかったわけです。
で、そんなんやったら、両方で動いたほうが便利やん!って思ったギークたちがGoogleからV8エンジンを運び出し、両方で動くようにしてしまったわけです。
つまり、javascriptでOSの機能とかファイルシステムにもアクセスできてしまうわけです。phpで書いていたのを、javascriptの.jsで代替できるっていうことでもあります。
で、どうやって使うねん?と思うかも知れませんが、https://nodejs.orgからNode.jsをあなたのコンピューター(サーバー)にダウンロードするだけです。
で、それから、どうやって使うねん?って? 基本的にコマンドラインからの操作か、コードエディタでサーバー側コードをJavascriptで書いて、サーバー側で実行です。クライアントサイドのjavascriptはブラウザで動作確認できるよね?
nodeをインストールしたら、コマンドラインを立ち上げて、node とコマンドを打つだけで環境が立ち上がります。
ubuntu@ubuntu-aurora-r4:~$ node
Welcome to Node.js v13.14.0.
Type ".help" for more information.
>
ubuntu@ubuntu-aurora-r4:~$ node
Welcome to Node.js v13.14.0.
Type ".help" for more information.
>
> let x=11; let y=15; let sum=x+y; console.log(sum)
26
> const name='henoheno'; console.log(name);
henoheno
>
ブラウザが無くても、OSの中(つまりサーバー内)でjavascriptが動いてるよね?
つまりこれがnodeの力。
ブラウザからフォームとかを通してjavascriptで書かれたリクエストが来ると、サーバー側のjavascript(node)でそのリクエストを処理して、送り返すっていう感じ。
普通のjavascriptと何が違うんじゃい?
例えば、ブラウザ側で使われるjavascriptにあるような、Windowオブジェクトとか、Documentオブジェクトはありません。だってOS側の操作にブラウザとか画面は関係ないんだから。
その代わりに、fsコマンドや、Processオブジェクトなど、ファイルの操作に使うようなオブジェクトやメソッドが存在します。
ブラウザ側ではAPIからデータを持ってくる場合、fetch()を使いますが、node側ではrequestモジュールを使ったり、そういった細かい違いはあるけども、結局javascriptです。javascriptのシンタックスとか書き方で動きます。
基本的に、元々のnodeに入ってるモジュールはグローバルと言って、ほんの少ししか入っていないので、ほぼ裸の状態です。色々便利なモジュールは、別途インストールして自分で服を着ていかないといけません。
モジュールのインストールや、操作はnpmっていうモジュールをインストールして行います。
こいつがいないと、node環境での作業は捗りません。まさにnode界のドラえもんです。
ノビグラマー「npmえもん!簡単にAPIをたたいてデータを持ってきてくれる道具なんか無いかな!くそだるくて、一から書いてられないよ!」、npmえもん「ノビくんはしょーがないなー、いつも楽することばっかり考えて。”Request~”☆☆☆彡!!!。使い方は公式ドキュメントで勝手にしらべるんだよ。」っていう感じ。
なんでnodeやねん!phpでもええんやないのか?
nodeはNetflix、Facebook、PaypalやAmazonでも使われています。
勉強していくとわかるんだけど、どちらかというと今までみたいなメニューがずらっと並んでてリンクがあるようなサイトよりも、Web APPやAPI、ヘッドレス、シングルページのウェブに非常に向いてる感じ。
デプロイの仕方も全然違います。
nodeの特徴としてよく言われるのが、”ノンブロッキングI/O”というコンセプト。
javascriptはシングルスレッドで、1個づつしかコードを実行できないんだけど、ポイントは”待ち時間”。
料理に例えると分かりやすい。シングルスレッドなので、シェフは一人でサラダとスープとステーキとデザートを作るとする。
スープから作るとすると、スープを煮込んでる間にサラダの準備とステーキの仕込みが出来るのが、”ノンブロッキング”。スープが仕上がるまで、鍋の前で待っていないといけないのが、”ブロッキング”。phpは元々これ。
この場合、ステーキが焼き上がるまで、デザートの準備も出来ないことになり、全てのコースが揃うまで膨大な時間が必要になる。
その点、ノンブロッキングは一度コードを実行させると、待ってる間に他のコードも複数実行させる事が出来る。
ここでJavascriptのPromiseが、出来上がったでーって知らせてくれて、次の処理の段取りも立ててくれる。
nodeはこの点が非常に優れており、結果的に多くのリクエストをすばやく効果的に捌けるため、超軽くて速いっていう事になる。
実際にサーバーの立て方、ディレクトリの構成、ページの作り方を少しづつアップしていく予定です。がんばれ、俺。