Node.jsは、サーバーサイドのJavaScript実行環境で、開発者に非同期I/O操作、イベント駆動型のプログラミング、そしてシングルスレッドモデルを提供します。この特徴により、高速で効率的なアプリケーションを開発することができます。この記事では、Node.jsの基本的なユニットや機能について詳しく説明します。
1. Node.jsのインストールとセットアップ
Node.jsを使用するには、まず公式サイトからインストーラーをダウンロードしてインストールする必要があります。インストール後、node
とnpm
(Node Package Manager)という2つのコマンドラインツールが使用可能になります。

インストール手順:
- Node.jsの公式サイト(https://nodejs.org/)から最新の安定版をダウンロード。
- ダウンロードしたインストーラーを実行。
- インストールが完了したら、コマンドラインで以下のコマンドを実行して、インストールが成功したか確認します。
bashnode -v npm -v
これで、Node.jsとnpmが正しくインストールされていれば、バージョン番号が表示されます。
2. モジュールとパッケージ管理
Node.jsはモジュールベースで動作します。モジュールとは、特定の機能を持った再利用可能なコードの集まりで、Node.jsで開発を行う際にはモジュールを頻繁に使用します。モジュールには、Node.jsの標準ライブラリ(例:fs
、http
)や、外部ライブラリ(例:express
、lodash
)が含まれます。
モジュールの使用方法:
Node.jsでは、require
関数を使ってモジュールを読み込みます。
javascriptconst fs = require('fs'); // ファイルシステムモジュールの読み込み
npmは、外部のパッケージを管理するツールで、npm install <パッケージ名>
というコマンドを使って、必要なパッケージをプロジェクトにインストールできます。
bashnpm install express
3. 非同期処理とコールバック
Node.jsの最大の特徴の1つは、非同期I/O操作をサポートしている点です。これにより、ファイル操作やデータベースクエリなど、時間のかかる操作を待機することなく他の処理を実行でき、アプリケーションのパフォーマンスが向上します。
非同期処理は、主にコールバック関数、Promise、async/await
を使って行います。
コールバックの例:
javascriptconst fs = require('fs');
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) {
console.error('Error reading file', err);
} else {
console.log('File content:', data);
}
});
この例では、ファイルを読み込んだ後にコールバック関数が実行されます。もしファイルの読み込みに成功すれば、その内容がdata
に格納されます。
4. HTTPサーバーの作成
Node.jsは、HTTPサーバーを非常に簡単に作成することができます。http
モジュールを使って、リクエストを処理するサーバーを作成できます。
HTTPサーバーの作成例:
javascriptconst http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello, World!');
});
server.listen(3000, () => {
console.log('Server is running at http://localhost:3000/');
});
このコードは、3000番ポートでリクエストを待機し、リクエストを受けると「Hello, World!」と応答します。
5. イベント駆動型プログラミング
Node.jsは、イベント駆動型のプログラミングモデルを採用しています。これは、特定のイベントが発生したときに、それに対する処理を定義するという方法です。イベントをリッスンするために、Node.jsのEventEmitter
クラスが使用されます。
イベントの使用例:
javascriptconst EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log('An event occurred!');
});
myEmitter.emit('event');
この例では、event
というイベントを発生させ、それに対するリスナーが処理を実行します。
6. ファイルシステム操作
Node.jsのfs
モジュールは、ファイルやディレクトリの操作を行うための基本的な方法を提供します。これを使うことで、ファイルの読み書き、削除、ディレクトリの作成などが簡単にできます。
ファイルの読み書きの例:
javascriptconst fs = require('fs');
// ファイルにデータを書き込む
fs.writeFile('output.txt', 'Hello, Node.js!', (err) => {
if (err) throw err;
console.log('File has been saved!');
});
// ファイルを非同期で読み込む
fs.readFile('output.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
7. デバッグとロギング
Node.jsには、デバッグツールが組み込まれており、コードの実行を追跡するのが簡単です。また、console
オブジェクトを使って、アプリケーションの状態をログに記録できます。
ログの例:
javascriptconsole.log('This is a log message');
console.error('This is an error message');
8. モジュールのエクスポート
Node.jsでは、モジュールを作成する際にその機能を他のファイルから利用できるようにエクスポートすることができます。これにより、コードをモジュール化し、再利用性を高めることができます。
モジュールのエクスポートとインポート例:
math.js:
javascriptmodule.exports.add = (a, b) => a + b;
module.exports.subtract = (a, b) => a - b;
app.js:
javascriptconst math = require('./math');
console.log(math.add(2, 3)); // 5
console.log(math.subtract(5, 2)); // 3
9. クラスとオブジェクト指向
Node.jsでは、JavaScriptのクラスとオブジェクト指向プログラミングの概念を使用することができます。class
を使ってオブジェクトの構造を定義し、インスタンスを作成できます。
クラスの例:
javascriptclass Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
const person = new Person('Alice', 25);
person.greet(); // Hello, my name is Alice and I am 25 years old.
10. Expressフレームワーク
Node.jsの人気のあるフレームワークであるExpressは、Webアプリケーションを迅速に開発できるツールを提供します。Expressを使うことで、ルーティング、ミドルウェア、リクエストの処理を簡単に行うことができます。
Expressの例:
javascriptconst express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello from Express!');
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
このコードは、Expressを使って簡単なWebサーバーを作成し、ルートURLにアクセスすると「Hello from Express!」というメッセージを返します。
以上のように、Node.jsは非常に多機能で拡張性の高いランタイム環境です。モジュール、非同期処理、HTTPサーバー、イベント駆動型プログラミングなどの基本的なユニットを理解することで、Node.jsを使った効率的でスケーラブルなアプリケーション開発が可能になります。