Node.js をざっくりキャッチアップ
Node.js とは
Node.js は、ソースコードが公開されていて (open-source)、様々なプラットフォームで動作できる (cross-platform) JavaScript の実行環境 (runtime environment) である。
Node.js は、Google Chrome のコア部分である V8 JavaScript エンジンを、ブラウザ外で動作させるものである。
Node.js アプリは、単一のプロセスとして動作し、リクエストごとに新しいスレッドを作成しない。
Node.js には、標準ライブラリに非同期 I/O を行うためのプリミティブが用意されており、基本的にノンブロッキング I/O を使う。スレッドをブロックしたり busy loop で CPU サイクルを無駄することはせずに、ネットワーク I/O やデータベースやファイルシステムへのアクセスのように、レスポンスが返ってきてから操作を再開する。
上記の特徴によって、Node.js は並列するスレッドの管理をする必要がなく、1つのサーバーで数千の接続を並列処理することができる。
以上から、元々動的な Web サイトを実現するためにフロントエンドで使用されていた JavaScript を、サーバーサイドでも使えるようになった。
インストール方法
様々な方法でインストールすることができるが、複数の Node.js のバージョンを使えるように、バージョンマネージャーを使うのが良い。Node.js の有名なバージョンマネージャーとしては、以下がある。
以下の例では、M1 MacBook Pro で nodebrew をインストールし、安定版の nodejs をインストールしている。
$ brew install nodebrew
$ nodebrew install stable
$ nodebrew use stable
以下のようなものがインストールされる。
-
node
: Node.js ランタイム -
npm
(Node Package Manager): Node.js におけるパッケージマネージャー -
npx
(Node Package Execute): Node.js パッケージの実行を一時的に行うための CLI ツール- 使いたいパッケージのインストール + 実行 + アンインストールをまとめて行ってくれ、環境を汚さずに Node.js パッケージの実行を可能にする。
$ node -v
v20.10.0
$ npm -v
10.2.3
$ npx -v
10.2.3
Hello World!
$ node
Welcome to Node.js v20.10.0.
Type ".help" for more information.
> console.log("Hello World!")
Hello World!
undefined
初めての Node.js プロジェクト
プロジェクト用のディレクトリを作成して、npm init
を実行する。
$ mkdir my-first-app
$ cd my-first-app
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help init` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (my-first-app)
version: (1.0.0)
description: This is my first app using Node.js
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /Volumes/workplace/test/my-first-app/package.json:
{
"name": "my-first-app",
"version": "1.0.0",
"description": "This is my first app using Node.js",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Is this OK? (yes)
これで package.json
というファイルが生成された。
entry point に index.js
を指定したので、index.js
を作成する。
console.log("Hello World!");
実行してみる。
$ node index.js
Hello World!
これを npm
経由で実行できるように、package.json
に start
コマンドを追加する。
{
"name": "my-first-app",
"version": "1.0.0",
"description": "This is my first app using Node.js",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
これによって npm start
で、実行できるようになる。
$ npm start
> my-first-app@1.0.0 start
> node index.js
Hello World!
初めての Web アプリ
Node.js はサーバーサイドで使われることも多く、Web アプリを実際に作成してみる。
先ほどのプロジェクトの index.js
を以下のように変更する。
const http = require('node:http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World!');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}`);
})
実行する。
$ npm start
> my-first-app@1.0.0 start
> node index.js
Server running at http://127.0.0.1:3000
ブラウザから http://127.0.0.1:3000 にアクセスしてみると、"Hello World!" が無事表示される。