Middleman v4 からの新しいテンプレートシステム


Middleman はプロジェクトの初期化の際にテンプレートを指定することができます。

$ middleman init PROJECT -T slim

v3系では, 初期化時に指定できるテンプレートは次のものでした。

  • ~/.middleman ディレクトリの中に保存してあるもの
  • gem で提供されインストールされているもの (ex. middleman-slim)

新しいテンプレートシステム

  • git リポジトリを参照する
  • 初期化時の処理コードを用意しなくても動作する

呼び出し例

具体的な呼び出し例を列挙してみます。

1. テンプレートを指定しない場合

$ middleman init PROJECT

この場合, Middlemanは github 上にあるデフォルトテンプレートを clone し PROJECT ディレクトリの中にファイルを展開します。

2. Middleman Directory のテンプレートを指定する場合

Middleman Directory に登録してあるテンプレートの場合, 短い名前で呼び出すことができます。例として "Amicus" を指定します。

$ middleman init PROJECT -T amicus

この場合 Middleman は次の手順でテンプレートを取得します。

  1. Middleman Directory の API にアクセス => Amicus の場合はココ
  2. API から github のリポジトリを取得
  3. clone し PROJECT ディレクトリに展開

3. github にあるテンプレートを指定する場合

github のテンプレートを指定したい場合, そのリポジトリの ユーザ名/リポジトリ名 で指定できます。例えば middleman-slim であれば次のようになります。

$ middleman init PROJECT -T yterajima/middleman-slim

ユーザ名/リポジトリ名 形式が指定された場合, github の clone 用 URL を作って PROJECT ディレクトリ以下に展開します。

4. git リポジトリのテンプレートを指定する場合

github 以外の git リポジトリで管理されているテンプレートを利用することもできます。その場合, 単純にパスで指定します。git@ から始まるもの, または :// が含まれる場合に有効です。

$ middleman init PROJECT -T [email protected]:yterajima/middleman-slim.git

または

$ middleman init PROJECT -T https://github.com/yterajima/middleman-slim.git

Middleman は clone を行い PROJECT ディレクトリにファイルを展開します。

ブランチを指定したい場合

1-4 の方法でテンプレートを指定できますが, リポジトリのブランチを指定したい場合はあるかもしれません。その場合, 1-4 それぞれの指定方法の末尾に #ブランチ名 で指定できます。

$ middleman init PROJECT -T yterajima/middleman-slim#v4

v4からのテンプレートの作り方

1. そのままごっそり管理する場合

次の構造のテンプレートを git(github) で管理したいとします。

Directory
  - Gemfile
  - config.rb
  - source
    - index.html.erb
    - layouts/layout.erb

Directory 以下をそのままリポジトリに push してください。後は先述のいずれかの方法でテンプレートとして利用できます。コードを書く必要はありません。デザイナーさんでも git さえ使えればコードが書けなくてもオリジナルテンプレートが利用できます。

ただし, .gitignore がリポジトリに含まれていたとしても init した場合, そのディレクトリの中に展開されないので注意してください。

2. 対話的にプロジェクトの初期化を行いたい場合

Thorfile をリポジトリ直下に置いておくと対話的にオプションを指定しつつ初期化することができます。詳細は middleman/middleman-template-defaultThorfile を参照してください。

その他参考情報

  • middleman-cli/lib/middleman-cli/init.rb に処理があります。コード読める人は読んだほうが早いですね。
  • テンプレートのテストを書きたい人は cli_init.feature を参照すると書けると思います。
  • Middleman の新しいステッカーが DevSwag で買えるようになりました。