【Node.js入門③】超簡単にWebアプリ開発!Expressの使い方!
schedule 2025年12月12日 update 2025年12月12日
皆さんこんにちは、pkkiです!
皆さんは、
「Webアプリ開発してみたいけど、どうやってすれば良いのか分からない…」
「Node.jsインストールしたばかりで、Expressの使い方がさっぱりわからない…」
「Expressの使い方を忘れた…」
と思ったことはありませんか?
そこで今回は、
「超簡単にNode.jsでExpressを使用して、超簡単にWebアプリ開発をする方法!」
を初心者向けに丁寧に解説します!
Webアプリ開発…難しそうだな…
杞憂ですね!
この記事を見れば、誰でもある程度Expressを使いこなすことができます!
おーーそれは有難い!
それでは解説していきましょう!
Express(Express.js)とは?

Expressとは、Node.js用の高速で自由度が高く、軽量なWebフレームワークです。
npm install express --saveまた、Node Package Manager(NPM)と呼ばれるNode.jsのパッケージを管理するためのシステムに登録されており、誰でもnpmからExpressを導入することができます!

また、npmについては上の記事で詳しく解説しているので、是非そちらをご覧ください!
では早速、Expressを使ってWebアプリを開発していきましょう!
Expressのインストール方法

最初に、Webアプリ開発をするためのフォルダーを作成してください。

npm init次に、上のコマンドを実行してください。
※npmで管理するためのpackage.jsonファイルを作成する初期化コマンドです。

また、詳しくはこちらの記事で解説しています。
もし、Node.jsを入れてない場合は、こちらをご覧ください。
npm install express続いて、こちらのコマンドを実行してください。
このコマンドは、Expressをフォルダにインストールして、依存関係リストに追加するコマンドです。

このように、「package.json」の「dependencies」に「express」が追加されていれば成功です!
では、早速使い方を解説します!
ExpressでHello Worldを出力するWebアプリを作ってみよう!

最初に、フォルダ内に「index.js」を作成してください。
const express = require('express'); //expressの読み込み
const app = express(); // Expressアプリケーションのインスタンスを作成
const port = 3000; //port変数に3000代入
// ↓app.get = getリクエスト受信時↓
app.get('/', (req, res) => { //path無しの時(例:http://localhost:3000/)
res.send('Hello World!'); // res = 返答 send = "送る"
});
app.listen(port, () => { //portでlisten(聞く)つまり、3000で外部からのアクセスに備えて待機する
console.log(`Example app listening on port ${port}`);//console=コンソール log=ログ(記録)
});次に、作成したindex.jsファイルを開いて、このプログラムを入力してみましょう。
node index.jsそして、ターミナルで上のコマンドを実行してみましょう!

もし、このように表示されたら「許可」をクリックしてください。

このように、「Example app listening on port 3000」と表示されたら起動成功です。
最後に、http://localhost:3000 を開いてみましょう。

このように、「Hello World!」と出力されたら成功です!
Expressの高速ウェブアプリ生成ツールを使って学ぼう

次に、Expressのある程度の基礎が詰まった高速アプリ生成ツールを使ってみます。
npx express-generator最初に、コンソールで上のコマンドを実行してください。
次に、上の画像の様に、すべての質問に「y」を入力して「Enter」を押してください。

そうすると、このように色々生成されます。
これを今から解説していきます。
しかし、それをする前にどのように動作するのか実行してみましょう。
npm install http-errors path cookie-parser morgan最初に、上のコマンドを実行して必要なパッケージをインストールしましょう。
npm start次に、上のコマンドを実行したら開始できます。

そして、http://localhost:3000 を開いてみましょう。

このように表示されます。
ファイル・フォルダの構成

次に、それぞれのフォルダ・ファイルの役割を解説します。
1. bin フォルダ

「お店の開店スイッチ」
- イメージ: 店長が持っている「OPEN」の看板や、電気のスイッチ。
- 解説: ここに入っているファイル(
www)を実行すると、プログラム(お店)が起動します。「ここを押すとスタートするんだな」と思えばOKです。
2. public フォルダ

「お店の内装・インテリア置き場」
- イメージ: 壁紙、ポスター、テーブル、メニュー表など、お客さんにそのまま見せるもの。
- 解説: 画像(.jpg)や、見た目を整えるファイル(.css)、動きをつけるファイル(.js)など、加工せずにそのまま使う素材を入れておく場所です。
3. routes フォルダ

「案内係(ウェイター)」
- イメージ: お客さんの注文を聞いて、厨房に伝える人。
- 解説:
- お客さん:「トップページが見たい(/)」→ ウェイター:「はい、トップページ担当へ伝えます」
- お客さん:「ユーザー情報が見たい(/users)」→ ウェイター:「はい、ユーザー担当へ伝えます」
- このように、「どのURLに来たら、どの処理をするか」という道案内を決めるところです。
4. views フォルダ

「料理の盛り付け場(画面を作る場所)」
- イメージ: お皿に料理を盛り付けて、お客さんに出す完成品(見た目)を作るところ。
- 解説: プログラムのデータを受け取って、最終的にブラウザに表示される「HTML(画面)」のひな形を作っておく場所です。
5. app.js ファイル
「お店のルールブック(設計図)」
- イメージ: 「うちはこのウェイターを使います」「内装はあそこにあります」「営業時間はこうです」と書かれたマニュアル。
- 解説: 全てのファイルの中心です。「
routesフォルダを使って案内してね」とか「viewsフォルダを使って画面を作ってね」といった、全部品を合体させて全体の設定を書く場所です。
それぞれのファイルのプログラムを解説
app.js
アプリケーションの「メイン設定」ファイルです。どのような機能を使うかを定義します。
var createError = require('http-errors'); // エラー作成用モジュールを読み込み
var express = require('express'); // Express本体を読み込み
var path = require('path'); // パス操作用モジュールを読み込み
var cookieParser = require('cookie-parser');// クッキー解析用モジュールを読み込み
//クッキーは、ウェブサイトがユーザーのブラウザ(ChromeやSafariなど)
//に保存する小さなテキストファイルのことです。
//あの「パスワードを保存する」もこれを利用しています
var logger = require('morgan'); // ログ出力用モジュールを読み込み
var indexRouter = require('./routes/index'); // 自作のルーター(トップページ用)を読み込み
var usersRouter = require('./routes/users'); // 自作のルーター(ユーザーページ用)を読み込み
var app = express(); // Expressアプリケーションのインスタンスを作成(ここからアプリの設定が始まります)
// view engine setup (画面表示の設定)
app.set('views', path.join(__dirname, 'views')); // 画面テンプレートファイルがある場所を 'views' フォルダに指定
app.set('view engine', 'jade'); // テンプレートエンジンとして 'jade' を使う設定
// ミドルウェアの設定(リクエストが来るたびに実行される処理)
app.use(logger('dev')); // 開発用モードでログを出力する設定
app.use(express.json()); // JSON形式のリクエストボディを解析して使えるようにする
app.use(express.urlencoded({ extended: false }));// フォームから送信されたデータ(URLエンコードされたデータ)を解析する
app.use(cookieParser()); // クッキーを解析して req.cookies で使えるようにする
app.use(express.static(path.join(__dirname, 'public'))); // 'public' フォルダを静的ファイル(画像やCSS)置き場として公開する
// ルーティングの設定(URLに応じた処理の振り分け)
app.use('/', indexRouter); // 'http://localhost:3000/' にアクセスが来たら indexRouter に任せる
app.use('/users', usersRouter); // 'http://localhost:3000/users' にアクセスが来たら usersRouter に任せる
// 404エラーのハンドリング(どのルートにもマッチしなかった場合)
app.use(function(req, res, next) {
next(createError(404)); // 404エラーオブジェクトを作って、次のエラー処理へ渡す
});
// エラーハンドラー(エラーが起きた時の最終的な処理)
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message; // 画面表示用にエラーメッセージをセット
res.locals.error = req.app.get('env') === 'development' ? err : {}; // 開発環境なら詳細なエラー情報を、本番なら空情報をセット
// render the error page
res.status(err.status || 500); // ステータスコードを設定(なければ500)
res.render('error'); // 'error.jade' テンプレートを使ってエラー画面を表示
});
module.exports = app; // 設定済みの app オブジェクトをエクスポート(wwwファイルで使うため)www(binフォルダ内)
サーバーを実際に起動するための実行ファイルです。
#!/usr/bin/env node
// ↑ これはシェバンと言い、このファイルをnodeコマンドで実行することを指定しています。
/**
* Module dependencies.
*/
var app = require('../app'); // 先ほど解説した app.js を読み込みます
var debug = require('debug')('hello-world:server'); // デバッグログツールを初期化
var http = require('http'); // Node.js標準のHTTPサーバーモジュールを読み込み
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000'); // ポート番号を決定(環境変数PORTがあればそれ、なければ3000番)
app.set('port', port); // Expressアプリにポート番号を設定
/**
* Create HTTP server.
*/
var server = http.createServer(app); // Expressアプリを使ってHTTPサーバーを作成
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port); // 指定したポートでサーバーを待機状態(起動)にする
server.on('error', onError); // エラーが起きたら onError 関数を実行するよう登録
server.on('listening', onListening); // 起動が完了したら onListening 関数を実行するよう登録
/**
* Normalize a port into a number, string, or false.
* ポート番号が正しい形式かチェック・変換する関数
*/
function normalizePort(val) {
var port = parseInt(val, 10); // 数値に変換
if (isNaN(port)) {
// named pipe (数値でなければパイプ名としてそのまま返す)
return val;
}
if (port >= 0) {
// port number (正の数ならポート番号として返す)
return port;
}
return false; // それ以外は不正
}
/**
* Event listener for HTTP server "error" event.
* サーバーエラー発生時の処理
*/
function onError(error) {
if (error.syscall !== 'listen') { // listen以外のエラーなら
throw error; // そのままエラーを投げる
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// よくある特定のエラーに対する親切なメッセージ処理
switch (error.code) {
case 'EACCES': // 権限がない場合(例:低いポート番号を使おうとした)
console.error(bind + ' requires elevated privileges');
process.exit(1); // プログラム終了
break;
case 'EADDRINUSE': // すでにポートが使われている場合
console.error(bind + ' is already in use');
process.exit(1); // プログラム終了
break;
default:
throw error; // その他のエラーはそのまま投げる
}
}
/**
* Event listener for HTTP server "listening" event.
* サーバー起動成功時の処理
*/
function onListening() {
var addr = server.address(); // サーバーのアドレス情報を取得
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind); // "Listening on port 3000" のようなログを出す
}index.jade(views内)
トップページのHTMLテンプレートです。※.jadeはPug(HTMLを効率よくコーディングするためのテンプレートエンジン)を使っている。
extends layout // layout.jade を継承します
block content // layout.jade の content 部分に以下を埋め込みます
h1= title // 変数 title の内容を h1タグで表示
p Welcome to #{title} // "Welcome to [titleの中身]" という段落を表示error.jade(views内)
エラー画面のHTMLテンプレートです。
extends layout // layout.jade の内容を継承(ベースにする)します
block content // layout.jade 内の "block content" の部分を以下の内容で上書きします
h1= message // 変数 message の内容を h1タグとして表示
h2= error.status // 変数 error.status の内容を h2タグとして表示
pre #{error.stack} // 変数 error.stack(エラーの詳細ログ)を preタグで表示layout.jade(views内)
全ページ共通の枠組み(ヘッダーなど)を定義するテンプレートです。
doctype html
html
head
title= title // ページタイトルを変数 title から設定
link(rel='stylesheet', href='/stylesheets/style.css') // CSSファイルを読み込み
body
block content // ここに、継承した各ページ(index.jadeなど)の内容が差し込まれますindex.js(routesフォルダ内)
トップページ (/) へのアクセスを処理するファイルです。
var express = require('express');
var router = express.Router(); // ルーターオブジェクトを作成
/* GET home page. */
// '/' (ルート) に GETリクエストが来た時の処理
router.get('/', function(req, res, next) {
// 'index' というテンプレート(index.jade)を使ってレスポンスを返す
// その際、テンプレート内で使う title 変数に 'Express' という文字を渡す
res.render('index', { title: 'Express' });
});
module.exports = router; // ルーターをエクスポート(app.jsで使うため)users.js(routesフォルダ内)
ユーザーページ (/users) 関連のアクセスを処理するファイルです。app.js で /users に割り当てられているため、ここの / は実際には http://localhost:3000/users/ を意味します。
var express = require('express');
var router = express.Router();
/* GET users listing. */
// '/users/' に GETリクエストが来た時の処理
router.get('/', function(req, res, next) {
res.send('respond with a resource'); // 文字列をそのままレスポンスとして返す(画面表示)
});
module.exports = router;// ルーターをエクスポート(app.jsで使うため)そして、「www」からコードを解説を見ながら辿ってみてください。
そうすると、徐々にやっている処理が見えてくるはずです。
これを元に、色々書き換えたりしてWebアプリ開発をしていくのが良いと思います!
なるほど、色々分かってきました!
しかし、ここまでしなくても、index.jsと「views」フォルダさえあれば十分にWebアプリ開発は可能です!

このように、「○○.js」にすべての処理を書き込むのも一応ありです。
しかし、特定の処理を探したりするのに時間がかかってしまうので、上のように色々ルーター等で分けた方が、効率が良いわけです。
加えて、静的フォルダだけというのもありです。
Node.jsをAPIサーバーとして利用する感じです。
なるほど、ブラウザのJSでサーバーに情報を取得・送信して色々する感じか。
最後に:まずは「改造」から始めてみよう!
最後まで読んでいただきありがとうございます! これであなたも、Node.jsとExpressを使った開発環境を構築できました!
「理屈はわかったけど、次は何をすればいいの?」 と思ったら、まずは今回作ったアプリの「改造」から始めてみましょう。
views/index.jadeの “Welcome to Express” を “Hello [自分の名前]” に変えてみるroutes/index.jsの処理を少し変更してみるpublic/stylesheetsのCSSをいじって背景色を変えてみる- 新たなルーターを作成して、ユーザー認証機能を作成してみる。
プログラミング上達の近道は、「壊れてもいいから、たくさん触って遊ぶこと」だと私は思います。
もしエラーが出ても、それは成長のチャンス。 ぜひExpressを使い倒して、Webアプリ開発を楽しんでください!
改めて、最後までご覧いただき有難うございました!
もし、トラブルがありましたら、お気軽にコメント欄で質問してください!
この記事を書いた人

このサイトの管理人のpkkiです。マインクラフトサーバーやWebサーバー等を運用しています。パソコン歴は8年程度で、サーバー運用歴は5年程度です。何かあればいつでもお問い合わせください。早ければ当日返信します。

【2025年版】Uptime Kumaのインストールと設定方法
schedule 2025年11月16日
【超簡単】Radmin VPNでマイクラJava版をマルチプレイする方法
schedule 2025年11月23日
【初心者向け】ゆっくりMovieMaker4(YMM4)のインストール方法を解説!
schedule 2025年11月8日
【2025年版】UptimeRobotの使い方と設定方法
schedule 2025年11月17日
【無料】最強バックアップソフト「BunBackup」の使い方
schedule 2025年11月29日
実は誰も使いこなしてない!PowerPoint作業を爆速化するWindows裏機能5選
schedule 2025年10月14日
