Node.jsは、サーバーサイドJavaScriptの実行環境として誕生して以来、開発現場において欠かせない存在となりました。

2026年現在、Node.jsはかつての「JavaScriptをサーバーで動かすためのツール」という枠を超え、TypeScriptのネイティブサポートや高度な標準ライブラリの拡充により、さらに洗練されたプラットフォームへと進化を遂げています。

本記事では、Node.jsの基本的な実行方法から、現代の開発で主流となっているES Modules(ESM)の扱い、そして2026年の開発シーンにおいて最も注目すべきTypeScriptの直接実行までを詳しく解説します。

これからNode.jsを学び始める方はもちろん、最新の仕様を確認したいプロフェッショナルの方にとっても役立つ情報を網羅しました。

Node.jsを実行する最も基本的な方法

Node.jsをインストールした後、最初に行うのがコマンドラインからの実行です。

Node.jsには大きく分けて2つの実行モードがあります。

1つは対話型シェルであるREPL、もう1つはスクリプトファイルの実行です。

REPL(対話型評価環境)での実行

REPL(Read-Eval-Print Loop)は、入力したコードをその場で評価し、結果を即座に表示する環境です。

短いコードの動作確認や、JavaScriptの構文をテストする際に非常に便利です。

ターミナル(またはコマンドプロンプト)を開き、引数なしでnodeコマンドを入力します。

JavaScript
// ターミナルで node と入力して実行
> const message = "Node.js 2026";
> console.log(message.toUpperCase());
実行結果
NODE.JS 2026
undefined

REPLを終了するには、Ctrl + Cを2回押すか、.exitと入力します。

スクリプトファイルを作成して実行する

実際の開発では、JavaScriptのコードをファイルに保存し、それをNode.jsに読み込ませて実行するのが一般的です。

拡張子は.jsを使用します。

例えば、app.jsというファイルを作成し、以下のコードを記述します。

JavaScript
// app.js
const platform = "Node.js";
const version = process.version;

// 実行環境の情報を出力
console.log(`Hello from ${platform}!`);
console.log(`Current version: ${version}`);

このファイルをターミナルから実行するには、nodeコマンドにファイル名を指定します。

Shell
node app.js
実行結果
Hello from Node.js!
Current version: v24.x.x (または v26.x.x)

モジュールシステムの使い分け:CommonJSとES Modules

Node.jsには、歴史的に使用されてきたCommonJS(CJS)と、ブラウザ標準と共通のES Modules(ESM)の2種類のモジュールシステムが存在します。

2026年現在はESMが標準となっていますが、プロジェクトによって使い分けが必要です。

CommonJSでの実行(従来の方式)

CommonJSではrequireを使用してモジュールを読み込みます。

特別な設定がない場合、拡張子が.jsのファイルはデフォルトでCommonJSとして扱われることが多いです。

JavaScript
// math.js (CommonJS)
module.exports.add = (a, b) => a + b;

// main.js
const { add } = require('./math.js');
console.log(add(10, 5));

ES Modulesでの実行(推奨される現代的な方式)

現代のNode.js開発では、ES Modulesの使用が強く推奨されていますimportおよびexport構文を使用できるのが特徴です。

Node.jsでファイルをESMとして実行するには、主に2つの方法があります。

  1. 拡張子を .mjs にする
  2. package.json に “type”: “module” を追記する

以下はpackage.jsonを利用する例です。

JSON
{
  "name": "my-node-app",
  "version": "1.0.0",
  "type": "module"
}
JavaScript
// app.js (ES Modules)
import { promises as fs } from 'node:fs';

async function readFile() {
  // 非同期でファイルを読み込む(トップレベル await も使用可能)
  const content = await fs.readFile('./hello.txt', 'utf-8');
  console.log(content);
}

readFile();

注意点として、ESM環境では __dirname や __filename といったCommonJS特有の変数が使用できません。 代わりに import.meta.url を使用してパスを取得する必要があります。

2026年の新常識:TypeScriptのネイティブ実行

かつてNode.jsでTypeScriptを実行するには、tscでコンパイルするか、ts-nodetsxといった外部ツールが必要でした。

しかし、近年のNode.jsではTypeScriptの型定義を無視して直接実行する機能(Type Stripping)が標準で組み込まれています。

外部ツールなしで .ts ファイルを実行する

Node.js 22以降、実験的に導入された型情報の除去機能が安定化し、現在ではフラグを付与することで直接.tsファイルを実行できます。

TypeScript
// main.ts
interface User {
  id: number;
  name: string;
}

const user: User = { id: 1, name: "Node.js User" };
console.log(`User Name: ${user.name}`);

このファイルを、トランスパイルの手間なしにそのまま実行します。

Shell
node --experimental-strip-types main.ts
実行結果
User Name: Node.js User

この機能により、設定ファイル(tsconfig.json)の管理を最小限に抑えつつ、迅速に開発サイクルを回すことが可能になりました。

大規模なプロジェクトでは依然としてビルドステップを設けるのが一般的ですが、スクリプト作成や小規模なツール開発においては、このネイティブサポートが最強の武器となります。

開発を効率化する便利な実行オプション

Node.jsには、実行時に指定することで開発効率を劇的に向上させるオプションが多数用意されています。

ここでは特によく使われるものを紹介します。

ウォッチモード(–watch)による自動再起動

コードを書き換えるたびに手動でコマンドを再実行するのは非効率です。

以前はnodemonなどのツールが使われていましたが、現在はNode.js本体に--watchフラグが搭載されています。

Shell
node --watch server.js

このコマンドで実行すると、server.jsやその依存ファイルが変更された際に自動的にプロセスが再起動されます。

開発中のサーバー再起動の手間を完全に排除できます。

環境変数の読み込み(–env-file)

これまで環境変数の管理にはdotenvというライブラリが必須でしたが、最新のNode.jsでは標準機能で.envファイルを読み込めます。

まずは、.envファイルを作成します。

text
PORT=3000
API_KEY=secret_key_2026

次に、実行時にフラグを指定します。

Shell
node --env-file=.env app.js

プログラム内からはprocess.env.PORTのようにアクセス可能です。

外部ライブラリへの依存を減らすことは、プロジェクトの軽量化とセキュリティの向上に繋がります。

パッケージを通じた実行:npm scriptsとnpx

Node.jsの実行方法は、直接ファイルを指定するだけではありません。

npm(Node Package Manager)を介した実行方法も、プロジェクト管理においては不可欠です。

npm scripts による実行の共通化

チーム開発では、実行コマンドをpackage.jsonscriptsセクションに定義するのがマナーです。

スクリプト名コマンド内容用途
startnode app.js本番環境での起動
devnode –watch app.js開発環境での自動監視起動
testnode –test標準テストランナーの実行
JSON
{
  "scripts": {
    "start": "node app.js",
    "dev": "node --watch --experimental-strip-types index.ts"
  }
}

実行する際は、以下のコマンドを使用します。

Shell
npm run dev

npx を使った一時的な実行

インストールされていないパッケージに含まれる実行ファイル(バイナリ)を一時的に実行したい場合は、npxコマンドを使用します。

例えば、特定のCLIツールを一度だけ試したい場合に便利です。

Shell
npx cowsay "Hello Node.js"

これにより、ローカルにパッケージを永続的にインストールすることなく、コマンドを即座に実行できます。

Node.js実行時のベストプラクティス

Node.jsを安全かつ効率的に運用するためには、いくつかの重要なポイントがあります。

セキュリティを意識した実行

Node.js 20以降、Permission Model(パーミッションモデル)が導入されました。

これにより、スクリプトがアクセスできるファイルシステムやネットワークを制限することが可能になっています。

Shell
# 特定のディレクトリへの書き込みのみを許可して実行
node --experimental-permission --allow-fs-write=/tmp/ app.js

信頼性の低いスクリプトを実行する場合や、強固なセキュリティが求められるサーバー環境では、この機能の活用が推奨されます。

エラーハンドリングの重要性

Node.jsはシングルスレッドのイベントループモデルを採用しているため、予期せぬエラーでプロセス全体が停止してしまうリスクがあります。

JavaScript
// 未処理の例外をキャッチする設定
process.on('uncaughtException', (err) => {
  console.error('予期せぬエラーが発生しました:', err);
  // ログ出力後に安全に終了する
  process.exit(1);
});

// 未処理のPromise拒否をキャッチする設定
process.on('unhandledRejection', (reason, promise) => {
  console.error('処理されなかった拒否:', reason);
});

実行方法を学ぶ際、こうした「アプリケーションを落とさないための工夫」もセットで覚えておくと、実戦で役立つスキルとなります。

まとめ

Node.jsを実行する方法は、単に「nodeコマンドを打つ」というレベルから、現在ではESMの活用、TypeScriptのネイティブ実行、そして標準搭載されたウォッチモードや環境変数管理を使いこなす段階へと進化しました。

最後に、今回紹介した実行方法の要点を振り返りましょう。

  • 基本: node ファイル名.js で実行。
  • モジュール: 2026年は ES Modules(ESM) が標準。
  • TypeScript: --experimental-strip-types でコンパイルなしの実行が可能。
  • 効率化: --watch--env-file といった内蔵機能を積極的に活用する。
  • 運用: npm scripts で実行コマンドを管理し、セキュリティフラグで安全性を高める。

Node.jsは、エコシステムの成熟とともに、外部ライブラリへの依存を減らし、本体だけで完結できることが増えています。

最新の実行オプションを正しく理解し、シンプルで強力な開発環境を構築していきましょう。