ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
EJS のタグ一覧
EJS には用途別に複数のタグがあります。最低限この 3 つを覚えれば実用上ほぼ困りません。
| タグ | 意味 | 出力 |
|---|---|---|
<%= 値 %> | 値を出力(HTML エスケープあり) | < 等に変換される |
<%- 値 %> | 値を出力(エスケープなし、生 HTML) | そのまま出る |
<% 文 %> | JavaScript 文の実行(if / for など) | 何も出ない |
<%# コメント %> | テンプレート内コメント | 何も出ない |
<%% / %%> | リテラルの <% / %> を出力 | <% / %> |
最小サンプル ─ http モジュールで動かす
素の Node.js(Express を使わない)構成で、EJS を使って test.ejs をレンダリングしてレスポンスする最小例です。
server.js
const http = require('http');
const ejs = require('ejs');
const fs = require('fs');
// テンプレートを 1 回だけ読み込む(毎リクエストで読むと遅い)
const template = fs.readFileSync('test.ejs', 'utf-8');
const server = http.createServer((req, res) => {
// EJS でレンダリング(第 2 引数のオブジェクトがビューに渡る変数)
const html = ejs.render(template, {
val1: 'val1',
});
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.write(html);
res.end();
});
server.listen(8000);
console.log('サーバー起動中... http://localhost:8000/');
test.ejs
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>EJSサンプル</title>
</head>
<body>
<!-- エスケープなし(生 HTML 込み) -->
<p><%- val1 %></p>
<!-- エスケープあり(推奨) -->
<p><%= val1 %></p>
<!-- for ループ -->
<% for (let i = 0; i < 5; i++) { %>
<p><%= i %></p>
<% } %>
</body>
</html>
起動と動作確認
# ejs をインストール
npm install ejs
# サーバ起動
node server.js
# ブラウザで開く
# http://localhost:8000/
ブラウザでアクセスすると、val1 の中身と 0〜4 の数字が表示されます。
出力結果

<%= %> と <%- %> の使い分け
| タグ | 用途 |
|---|---|
<%= %> | ユーザ入力 / DB から読んだ値 / 文字列全般。XSS 対策のため標準はこちら |
<%- %> | 事前に安全と分かっている HTML 断片を埋め込みたいとき(部分テンプレートやサニタイズ済みエディタ出力) |
区別を間違えると Cross-Site Scripting(XSS)に直結します。デフォルトは必ず <%= %> を使い、<%- %> は明確に意図したときだけにしてください。
if 文 / 配列ループ
<!-- 条件分岐 -->
<% if (user) { %>
<p>こんにちは <%= user.name %> さん</p>
<% } else { %>
<p>ログインしてください</p>
<% } %>
<!-- 配列を回す -->
<ul>
<% items.forEach(item => { %>
<li><%= item.name %> ─ <%= item.price %>円</li>
<% }) %>
</ul>
Express で使う場合
素の http サーバではなく Express を使うと、ビューエンジン登録だけで res.render から呼び出せます。
const express = require('express');
const app = express();
app.set('view engine', 'ejs');
app.set('views', './views'); // ./views/*.ejs を探す
app.get('/', (req, res) => {
res.render('index', { val1: 'val1', items: [1, 2, 3] });
});
app.listen(3000);
関連
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- インストール
- 値の表示と処理の記述
- テンプレートの共通化(組み込み)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?