| この記事の要点 |
|
前提
本記事は Node.js と Express の最小構成で HTTP サーバを立ち上げる手順をまとめます。Node.js(および npm)はインストール済みとします。Express 単体の概念は Express 側で扱っているので、ここでは「動かす」ことに集中します。
1. プロジェクトの初期化と Express のインストール
mkdir my-express-app && cd my-express-app
# package.json を生成(質問は全部 Enter で OK)
npm init -y
# Express を依存に追加
npm install express
これで node_modules と package.json に express が登録されます。
2. 最小サーバスクリプト(server.js)
「/ にアクセスすると Express!! と返す」だけの最小構成です。CommonJS 版(require)から見ていきます。
// server.js (CommonJS)
const express = require('express');
const app = express();
const PORT = process.env.PORT || 8000;
// ルーティング: GET /
app.get('/', (req, res) => {
res.send('Express!!');
});
// サーバ起動
app.listen(PORT, () => {
console.log(`サーバ起動中: http://localhost:${PORT}/`);
});
ESM(import)派の場合は package.json に "type": "module" を追記したうえで、次のように書きます。
// server.js (ESM)
import express from 'express';
const app = express();
const PORT = process.env.PORT || 8000;
app.get('/', (req, res) => {
res.send('Express!!');
});
app.listen(PORT, () => {
console.log(`サーバ起動中: http://localhost:${PORT}/`);
});
3. 起動
node server.js
コンソールに サーバ起動中: http://localhost:8000/ と出れば成功です。ブラウザで http://localhost:8000/ を開くと、画面に Express!! と表示されます。
4. ルートを増やす(基本のルーティング)
ルーティングはメソッド名のメソッド(app.get / app.post / ...)に「パス」と「コールバック」を渡すだけで定義できます。
app.get('/health', (req, res) => res.json({ status: 'ok' }));
app.get('/users/:id', (req, res) => {
res.json({ id: req.params.id, name: 'sample' });
});
app.post('/echo', express.json(), (req, res) => {
res.json({ received: req.body });
});
express.json() は Content-Type: application/json のリクエストボディを req.body に展開するビルトインミドルウェアです。POST 受け取りでは必須なので忘れずに。
5. 開発時の自動再起動(nodemon)
node server.js はソース変更時に手動で再起動しないと反映されません。開発中は nodemon を使うとファイル変更で自動再起動してくれます。
# 開発依存に追加
npm install --save-dev nodemon
# 起動
npx nodemon server.js
package.json の scripts に登録しておくとチームでも揃えやすくなります。
{
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js"
}
}
6. ポート番号と環境変数
ポート番号 は次の優先度で決めるのが定番です。
- 環境変数
PORTがセットされていればそれを使う(Heroku / Cloud Run など PaaS の前提) - 無ければ開発用の固定値(
8000/3000)にフォールバック
const PORT = Number(process.env.PORT) || 8000;
ローカルでも環境変数を切り替えたい場合は dotenv パッケージで .env 読み込みを使うと管理しやすくなります。
7. 終了時の後片付け(Graceful Shutdown)
本番運用するなら、SIGTERM を受け取って既存リクエスト処理を完了してから終了する処理を入れておくべきです。コンテナ環境では特に重要になります。
const server = app.listen(PORT, () => {
console.log(`listening on ${PORT}`);
});
const shutdown = () => {
console.log('shutting down...');
server.close(() => {
console.log('http server closed');
process.exit(0);
});
};
process.on('SIGTERM', shutdown);
process.on('SIGINT', shutdown);
よくあるエラーと対処
| エラー | 原因 / 対処 |
|---|---|
Error: listen EADDRINUSE :::8000 | 同じポートを別プロセスが既に使っている。lsof -i :8000(macOS/Linux)/ netstat -ano | findstr :8000(Windows)で PID を確認し、kill / taskkill でリリース |
Cannot find module 'express' | npm install 忘れ、または別フォルダで実行している |
SyntaxError: Unexpected token import | ESM 構文を CommonJS モードで実行している。package.json に "type": "module" を追加するか require 版に書き換え |
req.body が undefined | POST で JSON を受けるのに express.json() を入れていない |
| CORS で弾かれる | 別オリジンの API として呼ぶ場合は cors パッケージを app.use(cors()) で導入 |
関連
子ページはありません
- インストール方法
- サーバーの起動
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09