2018年8月9日木曜日

静的サイトの公開

1.基本の流れ
①.ejsのテンプレートを作成   ⇒   template.ejs
②CMSからJSON形式データを出力 ⇒   data.json
③gulpfile.jsにタスク作成、HTMLページを自動作成
  ⇒ template.ejs + data.json = page.html

2.詳細


やりたかったこと
  • ヘッダーやフッターなどをインクルード。
  • 同一のテンプレートからページを大量生成。
  • gulpのプラグインとして動作させる。
  • なるべく学習コストを低く。
上記要件に合うものとして、テンプレートエンジン「EJS」がよさそうでした。有名なjekyllMiddlemanは高性能そう且つ実績がありますが、学習/導入コストが高そう。
ひとまず上記に挙げた機能があり、できればgulpで動作するものがよかったので、サンプルコードを見たかんじ簡単そうなEJSを選びました。

gulp-ejsをインストール

npmでプラグインが配布されています。
インストールは以下のコマンド。ページ生成のためにgulp-renameというプラグインも併用します。
npm install gulp-ejs
npm install gulp-rename

JSON形式でページデータを制作する

htmlを生成する際のページの内容は、JSONで記述してテンプレートに渡します。

data.json

gulpfile.jsにタスクを記述

gulpfile.js

JSONをパース→テンプレートに渡してhtmlを生成→ファイル名をリネーム
という流れをfor文で回してページ生成します。

テンプレートを作成

_header.ejs

一行目の<% var data = jsonData; %>で、gulpfile.jsの処理でパースしたJSONデータのオブジェクトからデータを取得できますので、<%= data.title %>のようにするとタイトルが表示できます。

_template.ejs

<% include _header %><% include _footer %>でヘッダー、フッターをインクルードしています。
そしてforEachメソッドでページデータを取り出しています。最初はfor文を使ったのですが、条件式に.lengthを使うとdefinedエラーが出て実行できませんでした。forEachを使うのが良いようです。
※_footer.ejsは割愛します。

テンプレートを作成したら、タスクを実行

以下のコマンドでタスクを実行すると、JSONで設定したidをファイル名にしたhtmlが生成されます。今回はやってませんが、watchで監視して動的に生成することも可能です。
gulp ejs




参考:

gulpでテンプレートエンジン「EJS」を使って静的なwebページ生成を試してみました。