7.2 Node.jsのモジュールシステム
ブラウザと並ぶTypeScript(およびJavaScript)の主要な実行環境である「Node.js」特有のモジュールシステムやパッケージ管理の仕組みについて学習します。
7.2.1 Node.jsの組み込みモジュール
Section titled “7.2.1 Node.jsの組み込みモジュール”追加のインストールなしで、Node.jsに最初から備わっているモジュール群です。
- インポート方法: ファイルの相対パス(
./など)ではなく、直接モジュール名(例:"fs","path","readline")を指定してインポートします。このようなモジュールは「外部モジュール」として扱われます。 - 主な機能: 対話的な入出力(
readline)、ファイルシステムへのアクセス(fs)、ファイルパスの変換(path)、ネットワーク通信(http)など、OSの機能を利用するためのAPIを提供します。
コラム36 CommonJSモジュールとは
Section titled “コラム36 CommonJSモジュールとは”ES Modules(import/export)が標準化される前からNode.jsで広く採用され、現在も使われている歴史あるモジュールシステムです。
- インポート:
const path = require("path");のように、require関数を用いて読み込みます。import宣言とは異なり、プログラムの途中(if文の中など)で動的に呼び出すことが可能です。 - エクスポート: あらかじめ用意された
exportsオブジェクトやmodule.exportsにプロパティを代入することで、外部にデータを公開します。 - 重要性: npmで配布されているパッケージの多くや、JavaScriptで書かれた設定ファイルを扱う際には、今でもCommonJSの知識が必要になります。
7.2.2 npmとは
Section titled “7.2.2 npmとは”Node.jsに同梱されている公式のパッケージマネージャです。世界中の開発者が作成したサードパーティパッケージ(外部モジュール)をダウンロードして利用できます。
- インストール: ターミナルで
npm install パッケージ名を実行します。 - 保存場所: インストールされたパッケージは、プロジェクト固有の
node_modulesディレクトリに保存されます(グローバル環境を汚染しません)。 - 利用: 組み込みモジュールと同様に、
import fastify from "fastify";のようにモジュール名のみを指定してソースコードから読み込むことができます。
7.2.3 package.jsonとpackage-lock.jsonの役割
Section titled “7.2.3 package.jsonとpackage-lock.jsonの役割”Node.jsプロジェクトの構成と依存パッケージを管理するための重要なファイル群です。
package.json: プロジェクトの基本設定や、依存するライブラリの一覧(dependenciesやdevDependencies)を人間が管理するファイルです。npm initコマンドでひな形を作成できます。package-lock.json:npm install実行時に自動生成されるファイルです。依存ライブラリがさらに依存しているパッケージも含め、実際にインストールされた正確なバージョン情報を記録(ロック)します。これにより、他の開発者の環境でも全く同じ状態のnode_modulesを再現できるようになります。