【gulp】htmlテンプレート「gulp-jade」についてメモメモ(1)~導入

【gulp】htmlテンプレート「gulp-jade」についてメモメモ(1)~導入

みなさま、こんにちは。昨年は、『ちはやふる』や『めぞん一刻』、そして『孤独のグルメ』などにハマり続け、夫婦で聖地めぐりをしていた kouraku です。とりあえず、『ちはやふる』の聖地巡り(分倍河原:東京、近江神宮:滋賀、芦原温泉:福井)はコンプリートしました。

さて、昨年はhtmlテンプレートとして「gulp-html-extend」を紹介してきましたが、簡単で分かりやすい反面、かゆいところに全く手が届かない場面などに多々遭遇します。

「あぁ、ここで条件文が使えれば余計なレイアウトなんて作らなくて良いのに・・・」
とか、
「変数が多くなると見辛いし設定しづらいな・・・」
とか。

こうした悩みを解決すべく、ここ最近(自分が)あまり使わなくなってしまった「jade」をおさらいしようと思いました。ということで、そのおさらい内容をメモメモ。

まずは構成から・・・

今回の構成は、下図のとおりです。若干これまでのものから、ネーミングや役割を変えています。
詳細はGitの内容をご覧ください

┬ [gulptasks] ─── タスク用ディレクトリ
|   ├ browser-sync.coffee
|   ├ htmlhint.coffee
|   ├ taskload.coffee ─── gulptasks内のタスクを読み込む
|   └ watch.coffee ─── ファイル監視
├ [htdocs]
├ [node_modules] ─── plugins
├ [src] ─── テンプレートエンジン用
| └ [jade] ─── jade用
|   ├ [_common] ─── レイアウト用
|   ├ [_modules] ─── 個別パーツ用
|   └ [pages] ─── ページ(実体)用
├ .gulpconfig.json
├ .htmlhintrc.json
├ gulpfile.coffee
└ package.json

ここから、タスク等を追加していきます。

gulp-jade のインストールとタスク作成

それでは、gulp環境で jade が使えるようにします。
プラグインは「gulp-jade」を使用します。

$ npm install gulp-jade --save-dev

インストールが完了したら、タスクを作ります。
ちょっと冗長的な感じになりますが、今後のことも踏まえ、今回はメインとプリプロセッサでタスクを分けます。

ではまずは、プリプロセッサから。ファイル名及びタスク名は「jade」とします。

[gulptasks/jade.coffee]

gulp = require 'gulp'
config = prop.config
plugins = prop.plugins

# ExtendHTML
module.exports = do ->
  gulp.task 'jade', ->
    console.log 'start COMPILE-JADE!!!'
    gulp
      .src config.paths.src+'/jade/pages/**/*.jade'
      .pipe plugins.plumber
        errorHandler: plugins.notify.onError 'Error: <%= error.message %>'
      .pipe plugins.jade
        basedir: config.paths.src+'/jade'
      .pipe gulp.dest config.paths.pub

「gulp-jade」でもベースパスを決めることができるので、とりあえず今回はその設定だけ入れます。

      .pipe plugins.jade
        basedir: config.paths.src+'/jade'     <----- ベースパス設定

これを設定することで、extendを使用する際、呼び元がどの階層にいてもベースパスからの指定でOKとなります。

次にメインです。ファイル及びタスク名は「compile-html」とします。
プリプロセッサのタスクを、ここで呼び出すように設定します。

[gulptasks/compile-html.coffee]

gulp = require 'gulp'
config = prop.config
plugins = prop.plugins

# Compile HTML
module.exports = do ->
  gulp.task 'compile-html', (cb) ->
    plugins.runSequence(
      'jade'
      cb
    )

続いて、jadeファイルを変更したら「compile-html」が動くよう、watchタスクを追加をします。

[gulptasks/watch.coffee]

gulp = require 'gulp'
plugins = prop.plugins
config = prop.config

# Watch : ファイル監視
module.exports = do ->
  gulp.task 'watch', ->

     :

    gulp.watch [
      config.paths.src+'jade/**/*.jade'    <----- jadeディレクトリ内のjadeファイルをすべて監視
    ], ['compile-html']     <----- jadeファイルに更新が入ったら、compile-html を実行

最後に、gulpfile.coffe のデフォルトタスクに compile-html を登録して、gulpコマンドで起動するように設定します。

[gulpfile.coffee]

     :
# 以下コマンド -----------------------------

# デフォルト
gulp.task 'default', (cb) ->
  plugins.runSequence(
    [
      'compile-html'     <----- compile-html タスクを追加
    ]
    'htmlhint'
    'browser-sync'
    'watch'
    cb
  )

これで、jade を使う準備が整いました。

jadeサンプル作成

では、早速簡単なサンプルを作ります。
ここでは極力シンプルなコードにしたいと思います。

まずは、大枠のレイアウトを作ります。

[src/jade/_common/_layout_default.jade]

block localVars
doctype html
html(lang='ja', dir='ltr')
  head
    meta(http-equiv='X-UA-Compatible', content='IE=edge')
    meta(charset='utf-8')
    title #{pageTitle} | gulp
  body
    .container
      block content

「block localVars」は各ページで指定した変数を(コンテンツ内容とは別に分けておきたいので)、
「block content」は各ページのコンテンツを参照します。

次に、ページを作ります。

[src/jade/pages/index.jade]

extends /_common/_layout_default

block localVars
  - var pageTitle = 'gulp-jade サンプル'

block content
  include /_modules/_mod_header
  h1 このページは、#{pageTitle}です。
  p Lorem ipsum dolor sit amet, consectetur adipisicing elit. Placeat, vel eveniet nemo repudiandae dolore consequatur similique dicta voluptates accusamus laboriosam earum sed itaque ex aliquam unde minima illo et obcaecati?

先ほど作成した「_layout_default.jade」を使ってページを生成するために、

extends /_common/_layout_default

を指定しています。
また、includeで個別パーツを参照するサンプルとして、

  include /_modules/_mod_header

を入れてます(無理やり感は否めませんが、サンプルなので…)。

あと、ページごとのローカル変数を定義する場所として

block localVars
  - var pageTitle = 'gulp-jade サンプル'

を入れてます。

最後に、個別パーツを作成します。

[src/jade/_modules/_mod_header.jade]

header
  h1 #{pageTitle}
  ul
    li aaaaaa
    li bbbbbb
    li cccccc

上記のとおり、ページ内で定義した変数「pageTitle」は、レイアウトや個別パーツでも使用可能です。

では、このサンプルコードをコンパイルします。

$ gulp

ブラウザが立ち上がり、下図のような画面が表示されました。

20160203_mori.jpg

これで「gulp-jade」の導入と動作確認ができました。

今回のサンプルデータ
※サンプルの動作を確認したい場合は、「npm install」してから「gulp」コマンドを叩いてください。

まとめ

今回はここまでです。やっぱり jade は良いですね。記述量が少ないし、何より閉じタグを書く必要が無い!つまり、「閉じタグ忘れ」という人為的ミスが起こらないから、それだけでも工数削減につながりますよね。気を付けるべきところは、タブの量・・・くらいでしょうか。

次回は、生成されたコードを整形したりしてみたいと思います。

そういえば、今月の半ばにようやく『スターウォーズ』の最新作を観に行きました。すると、それまで興味を持たなかった嫁が『スターウォーズ』好きに・・・。そして、次に出てくる言葉が・・・

「『スターウォーズ』の聖地めぐりしよう!」

ええええええええ!?次は海外ですか。。。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ