はじめに
この記事では、Node.jsの基本的な概念と使い方を学んでいきます。JavaScriptをブラウザの外で動かせるNode.jsの世界に触れてみましょう。
Node.jsとは
Node.jsは、ブラウザの外でJavaScriptを実行できる環境です。
従来のJavaScriptはWebブラウザ上でしか動作しませんでしたが、Node.jsを使うことで以下のようなことが可能になります。
- Webサーバーの構築
- ネイティブアプリケーションの開発(例: Visual Studio Code)
- コマンドラインツールの作成
- ファイル操作やデータベース接続
Node.jsのインストール
インストール方法
推奨バージョン: LTS(Long Term Support)版を選択することをおすすめします。
インストールの確認
ターミナルまたはコマンドプロンプトで以下のコマンドを実行してください。
node --version
npm --version
バージョン番号が表示されれば、インストール成功です。
ブラウザとNode.jsの違い
Node.js環境では、ブラウザ特有のオブジェクトは使用できません。
主な違い
ブラウザ環境:
-
windowオブジェクトがグローバルスコープ - DOM操作が可能
- ファイルシステムへの直接アクセス不可
Node.js環境:
-
windowオブジェクトは存在しない - DOM操作は不可
- ファイルシステムへの直接アクセスが可能
基本的な使い方
Hello World
まずは簡単なプログラムを作成してみましょう。
hello.jsというファイルを作成します。
console.log('Hello, Node.js!');
実行するには、ターミナルで以下のコマンドを入力します。
node hello.js
コマンドライン引数の取得(Process & argv)
Node.jsでは、プログラム実行時に渡された引数をprocess.argvで取得できます。
// args.js
console.log(process.argv);
実行例:
node args.js arg1 arg2
process.argvは配列で、以下のような構造になっています。
[
'/path/to/node', // Node.jsの実行パス
'/path/to/args.js', // 実行したスクリプトのパス
'arg1', // 1つ目の引数
'arg2' // 2つ目の引数
]
ファイル操作(fsモジュール)
Node.jsでは、fsモジュール(File Systemの略)を使ってファイル操作を行います。
モジュールの読み込み
const fs = require('fs');
同期版と非同期版
fsモジュールには、同期版と非同期版の2種類のメソッドがあります。
非同期版(推奨):
fs.readFile('sample.txt', 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
同期版:
const data = fs.readFileSync('sample.txt', 'utf8');
console.log(data);
非同期版を使用すると、ファイル読み込み中も他の処理を並行して実行できるため、パフォーマンスが向上します。
モジュールシステム
Node.jsでは、コードを複数のファイルに分割し、必要な部分だけを読み込むことができます。
モジュールのエクスポート
他のファイルで使いたい関数をmodule.exportsでエクスポートします。
// math.js
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
module.exports = {
add,
subtract
};
module.exportsは最初は空のオブジェクトです。ここにプロパティとして関数を追加していくイメージを持つと理解しやすいでしょう。
モジュールのインポート
他のファイルで定義された関数を使用するには、require関数を使います。
// app.js
const math = require('./math');
console.log(math.add(5, 3)); // 8
console.log(math.subtract(10, 4)); // 6
ディレクトリのrequire(index.js)
ディレクトリ自体をrequireすることもできます。その際、Node.jsは自動的にindex.jsファイルを探して読み込みます。
myModule/
├── index.js
├── add.js
└── subtract.js
// myModule/index.js
const add = require('./add');
const subtract = require('./subtract');
module.exports = {
add,
subtract
};
// app.js
const myModule = require('./myModule'); // index.jsが自動的に読み込まれる
この仕組みは、他の人が作成したモジュールを使うときに便利です。
パッケージ管理
npmとは
npm(Node Package Manager)は、Node.jsのパッケージを管理するツールです。Node.jsをインストールすると、npmも一緒にインストールされます。
パッケージとライブラリの違い
npmでインストールできるものは「パッケージ」と呼ばれます。パッケージは、ライブラリを含むより広い概念です。
ライブラリ: コアとなる機能を提供するコード
パッケージ: ライブラリ + 設定ファイル + ドキュメント + その他のリソース
package.json
package.jsonは、プロジェクトの情報や依存関係を管理するファイルです。
作成方法
npm init
対話形式で質問に答えると、package.jsonが生成されます。
すべてデフォルト値で良い場合は、以下のコマンドが便利です。
npm init -y
package.jsonの役割
- プロジェクトの基本情報(名前、バージョン、説明など)
- 依存パッケージの管理
- スクリプトコマンドの定義
{
"name": "my-project",
"version": "1.0.0",
"description": "My first Node.js project",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.18.0"
}
}
パッケージのインストール
ローカルインストール
プロジェクトごとにパッケージをインストールします。
npm install パッケージ名
インストールすると、以下のことが自動的に行われます。
-
node_modulesディレクトリにパッケージがダウンロードされる -
package.jsonのdependenciesに追加される -
package-lock.jsonが生成・更新される
依存関係の一括インストール
package.jsonがある状態で以下のコマンドを実行すると、記載されているすべての依存関係が自動的にインストールされます。
npm install
これにより、他の開発者と同じ環境を簡単に再現できます。
グローバルインストール
システム全体で使用するツールは、-gオプションをつけてグローバルにインストールします。
npm install -g パッケージ名
グローバルパッケージは、どのディレクトリからでも実行できるコマンドラインツールとして使用できます。
まとめ
この記事では、Node.jsの基本を学びました。
- Node.jsはブラウザの外でJavaScriptを実行できる環境
-
fsモジュールでファイル操作が可能 -
module.exportsとrequireでコードを分割・再利用できる - npmを使ってパッケージを管理できる
-
package.jsonで依存関係を管理できる
次のステップ
Node.jsの基本を理解したら、以下のトピックに挑戦してみましょう。
- ExpressフレームワークでWebサーバー構築
- 非同期処理の深掘り(Promise、async/await)
- データベース連携
- RESTful APIの作成
Node.jsの世界は広大です。実際に手を動かしながら、少しずつ学んでいきましょう。