Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9299

EJSの基本的な使い方と、今後のゆくえ (2020)

$
0
0

2020年12月19・20日に調べた
EJS(テンプレートエンジン)の使い方と
EJSの今後(2020〜)について考えました
想定としては、React, Angular, Vue を覚える前のサーバ初心者が
Node + Express を使って
サーバ側でレンダリングを気軽にやってみたいなと思った時に
EJS で手軽に出来るよ、という内容です

目次

  1. 始めに
  2. サーバ側の事前準備
  3. タグ
  4. include()
  5. EJSの今後
  6. まとめ

始めに

この記事で

想定している事

  • HTMLを数分〜数十分でレンダリングする
  • Node + Express を使ってサーバ側でレンダリングする
  • 基本タグ (<% %>, <%= %>, <%- %>) を足すだけなので学習コストが低い
  • クライアント側でのinclude(パス, オブジェクト値)のあつかい方も簡単に紹介
  • ローカルサーバ側のオブジェクト値が、クライアント側に送れているかを確認する

想定していない事

  • 複雑な事や中〜大規模な事は React, Angular, Vue で覚えて下さい
  • 複数ではなく、1ページのみのレンダリングを想定しています
  • gulp は使いません
    • 代わりに nodemon でレンダリングの自動更新を行います


環境
ubuntu18.04conda4.8.4npm6.14.8node12.4.0express4.16.1


Terminal
$ express -h

  Options:

    -e, --ejs            add ejs engine support
        --pug            add pug engine support
        --hbs            add handlebars engine support
    -H, --hogan          add hogan.js engine support

express -hコマンドを試してみると、ejs 以外にも pug, hbs, hogan があつかえる


サーバ側の事前準備

サーバ環境構築は下記の記事を参考にしてみて下さい

(Node, npm は既にインストールされている事とします)

ターミナルで express nodemon ejs をインストールして

Terminal
$ mkdir myFirstEJSapp
$ cd myFirstEJSapp
$ npm init -y$ npm install--save express nodemon ejs

index.js ファイルを作り、最低限の設定をします

index.js
constexpress=require('express') // expressを準備constapp=express()constport=3000// express に ejs のテンプレートエンジンを設定app.set("view engine","ejs");// express に ejs のテンプレートエンジンを設定した場合// /views フォルダが index.ejs のデフォルトになりますapp.get("/",function(req,res){res.render("index");// これで /views/index.ejs をレンダリング});app.listen(port,()=>{console.log(`Example app listening at http://localhost:${port}`)})

次に、 package.json ファイルに "start": "nodemon ./index.js"
を加えて、 npm startで nodemon が起動する様にします

package.json
{"name":"myFirstEJSapp","version":"1.0.0","description":"","main":"index.js","scripts":{"start":"nodemon ./index.js","test":"echo \"Error: no test specified\"&& exit 1"},"keywords":[],"author":"","license":"ISC","dependencies":{"ejs":"^3.1.5","express":"^4.17.1","nodemon":"^2.0.6"}}

次に、 index.ejs ファイルを views フォルダ内に作成します

views/index.ejs
<!DOCTYPE html><html><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width, initial-scale=1.0"/><title>myFirstEJSapp</title></head><body><div>テスト
    </div></body></html>


今の段階で

myFirstEJSapp (root)
--- node_modules
--- views
------ views/index.ejs
--- index.js
--- package-lock.json
--- package.json

といった構成になります

この段階で
ターミナルで npm startとやると
nodemon(自動更新)が作動し
index.ejs が、サーバ側からレンダリングされた状態で
http://localhost:3000にローカルサーバが構築されています

もしローカルサーバを構築するのも大変な人は、
ここまでで疲れてしまう人もいるかもしれませんが
ここまで来れば、ほぼ終わったも同然ですので頑張ってみて下さい

EJSの使い方

ここからEJSの使い方を紹介していきます

タグ

この記事では
基本的な4つのタグの使い方を紹介していきます
タグは全て index.ejs 内で使っていく事を想定しています

元ネタ

  1. <%# %>コメント用タグ
  2. <% %>コード用タグ
  3. <%= %>出力用タグ(タグはエスケープ)
  4. <%- %>出力用タグ(タグ込)

下記は省略
- <%_
- <%%
- %%>
- %>
- -%>
- _%>

もしローカルサーバを構築出来なかった人・今は手元にない人でも
オンラインでコードをテスト出来る、下記サイトを使ってみて下さい

https://ionicabizau.github.io/ejs-playground/

1. <%# %>コメント用タグ

先ず、最初に紹介したいのは
<%# %>コメント用タグで
HTML(クライアント)側には見られない
サーバ側だけが読めるコメントになります

これは
javascript で言う所の // コメント
HTML で言う所の <!-- コメント -->
になります

先ずは下記リンクで

https://ionicabizau.github.io/ejs-playground/

サンプルコード
<%#これはコメント用%>

と試してみて下さい
何も表示されない筈です

index.ejs内(サーバ側)でも
<%# これはコメント用 %>が見られますが

index.ejs
<!DOCTYPE html><html><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width, initial-scale=1.0"/><title>myFirstEJSapp</title></head><body><div>テスト</div><%#これはコメント用%><---サーバ側からは見られる</body></html>

ローカルサーバ ( http://localhost:3000 ) の
クライアント側 ( index.html ) からは
何も表示されません

index.html
<html><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>myFirstEJSapp</title></head><body><div>テスト</div>              <---クライアント側からは見られません</body></html>

2. <% %>コード用タグ

次に紹介したいのが
<% %>コード用タグ

通常 JavaScript コードを
HTMLに反映させたい時は <script></script>タグ内にコードを書いていきますが
EJS内のコードをHTMLに反映させたい時は
<script></script>タグを使わず
<% %>タグを使って JavaScript コードを書いていきます

ここでのポイントは、
最終的なゴールは
<% %>内で定義した代数(例: const daisu = "代数")や関数を
<%= %>, <%- %> に出力して
HTML上で見られるようにする事です

例えば
下のサンプルコードの様に
先ずは <% %>内で test_codeという代数を定義して
<%= %>内で "このコードが見られます" という出力を出します

サンプルコード
<%#下記で代数を定義します%><%consttest_code = "このコードが見られます"%><%=test_code%>

先ずは
下記リンクで上記のコードがどんな風に出力されているか試してみて下さい

https://ionicabizau.github.io/ejs-playground/

次に
index.ejs(サーバ側)で下記の様に書くと

index.ejs
<!DOCTYPE html><html><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width, initial-scale=1.0"/><title>myFirstEJSapp</title></head><body><div>テスト</div><%#下記で代数を定義します%><%consttest_code = "このコードが見られます"%><%=test_code%><---ここの内容しかHTML上では見られません</body></html>

HTML上(クライアント側)に出力されているのは
<%= %>
内の部分だけになり
他のコードは見られません

index.html
<html><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>myFirstEJSapp</title></head><body><div>テスト</div>
    "このコードが見られます"
  </body></html>

出力用タグ ( <%= %><%- %> ) の違い

<% %>タグ内で定義した代数を
<%= %>タグ内で出力出来る様になりました

次は
<%= %>タグと <%- %>タグの違いについて説明していきます

<%= %>はタグ内で定義したタグをエスケープして出力する
<%- %>はタグ内で定義したタグをエスケープしないで出力する

サンプルコードで説明すると

https://ionicabizau.github.io/ejs-playground/

このリンクで、下記のサンプルコードを試すと

サンプルコード
<%#下記で代数を定義します%><%consttest_code = "<p>このコードが見られます<p>"%><%=test_code%>

&lt;p&gt;このコードが見られます&lt;p&gt;

(<>がエスケープされて上記の状態になる)

といった出力になるのに対して

下記のサンプルコードを試すと

サンプルコード
<%#下記で代数を定義します%><%consttest_code = "<p>このコードが見られます<p>"%><%-test_code%>

<p>このコードが見られます<p>

という風に<p>タグや色んなタグを出力出来るようになり
HTMLの見た目をサーバ側から弄ることが出来るようになります

なのでEJS上で
<>タグが使いたい場合は<%- %>
オブジェクト値を確認したり、純粋な出力の値だけを確認したい場合は<%= %>
と使い分ける事が出来ます

include()

incldue()の使い方は

来週書き足しますが

@y_hokkey さんの書いた

テンプレートエンジンEJSで使える便利な構文まとめ

を参考にしてみて下さい

今後

2020年12月現在
Qiitaサイト内で
EJS ( 又はテンプレートエンジン ) についての記事を調べていると
勢いがあったのは大体2-4年前までの記事な気がしました

下記の英語の質問箱を見ると

Are template engines still relevant in 2020? - DEV

原因としては
React, Vue, Angular の登場でテンプレートエンジン自体が下火になっている説
フロントエンドの方が人気でバックエンドはあまり人気が無い説
もうテンプレートエンジンの機能をアップデートする必要性があまり無い説
があるそうです

そこで
2020年現在
テンプレートエンジンを使うメリットを考えてみると

  • 小規模、パイロットプロジェクトをテスト・デバッグが簡単に出来る
  • JAM (JavaScript, API, Markup) stack 人気がきている

といった利点があるらしいです

JAM stackとは (Qiita 記事@ozaki25)

なので
サーバ初心者、特にレンダリングが良く分からない
React, Angular, Vue を触る前の

サーバ側からどうやってHTMLをレンダリングしているか
ちょっといじってみたい人用に
ちょっと小規模テスト・べバッグ用に使いたい人用に
EJS、他テンプレートエンジンは使い勝手が良いのかな?
と思いました

まとめ

来週まとめます

参考リンク & Qiita内トップEJS記事まとめ (2020)

3年以内

テンプレートエンジンEJSで使える便利な構文まとめ - Qiita

@y_hokkey
2017年02月02日に更新

EJSの基本的な書き方 - Qiita

@miwashutaro0611
2018年06月23日

Expressにおけるejsの使い方 - Qiita

@kamihork
2018年10月07日に更新


3年以上前

gulpで手軽にEJSテンプレートをHTMLに変換 - Qiita

@yuichiroharai
2014年10月15日に更新

ejsでextendっぽいことをする方法 - Qiita

@fnobi
2013年07月25日

EJS+gulpで静的サイトのHTML生成 - Qiita

@oden
2016年03月15日




トップ JavaScript テンプレートエンジン (2020)


"JavaScript template engine 2020"とググった時に出てきた

人気 JavaScript テンプレートエンジン 6 (2020)

.Pug (Jade)HandlebarsMustachedoTEJSNunjucks
記事数11109988
npmLINKLINKLINKLINKLINKLINK
githubLINKLINKLINKLINKLINKLINK
LicensesMITMITMITMITApache-2.0BSD-2-Clause
Dependecies850014
Weekly Downloads1,121,3337,265,7261,933,955240,7928,145,826294,753
Unpacked Size59.7 kB2.72 MB113 kB73.8 kB134 kB1.74 MB
npm内: 人気61%67%60%33%80%47%
npm内: 質63%63%63%75%62%93%
npm内: メンテ28%33%33%47%33%33%
npm collaborator253215
github star19.8k15.7k14.3k4.6k5.1k7.1k
github used by286k3m21514.1k-121k
github contributor24817511013113137
ソース記事

Viewing all articles
Browse latest Browse all 9299

Trending Articles