質問: タイトルの通りですが、EJSとかPugとかってVue.jsとかReactとかと役割がかぶって結局いらないのですか? JSフレームワークとか,テンプレートエンジンとかがつかみきれなくて困っています。
回答: そうですね。 一部の役割は被っていますし、 私もEJSやPugは最近殆ど触っていません。 JSフレームワークは「HTML風テンプレート」を読み込ませて、 JSフレームワーク流儀の変数変更を行うと、 自動的にHTML風テンプレートから最新のDOMツリーに変更してくれるライブラリを指します。 この「HTML風テンプレート」がReactならJSXが主流ですし、 VueやAngularにも自前の様式があります。 Webアプリを作りたいという要望ならばEJSやPugを覚えたけど何処で使うの?という感じになる疑問はわかります。 対するEJSやPugはテンプレート言語です。 自前のルールのファイルを作ると、 それを解析してHTMLを払い出してくれるソフト・ライブラリを指します。 EJSは変数やJSを使えるほぼネイティブHTMLといった立ち位置なので、 Express等と組み合わせる昔ながらのHTTPリクエストを使ったWebサイトという形になりがちです。 PugはHaml、Slim由来の簡素な書き方が出来る事が特徴です JSフレームワークが要求する「HTML風テンプレート」を作るのに Pugで作れば良いじゃん?という用途・思想は結構あります。 私は以前職場でAngularJSとPugを組み合わせて利用していました。 PugからHTMLファイルにコンパイル、その出力結果をAngularJSが「HTML風テンプレート」として利用するという仕組みを構築しました。 私はその後Reactに逃げたのでAngular(バージョン2でJSが取れた)は使っておらずわかりませんが。 Vue.jsは公式がPugを併用した仕組みを準備しています。 Using Pre-Processors - Vue.js ドキュメント ReactはJSXが主流ですが、 createElementをラッピングしてJavaScriptの関数宣言でラッピングしまくる感じでやれば Pugに非常によく似たフォーマットでテンプレートを表現することが可能です。 私はこのPugで培ったやり方を愛用しており、無駄では無かったなぁと感じています。