テンプレート

テンプレートシステム

概要

PureBuilder Simplyでページを生成する際にはテンプレートが必要になります。

実際に使用されるテンプレートの形式は、選択したドキュメントプロセッサにより異なります。 多くの場合、eRubyを用いたテンプレートが使われます。

テンプレートシステムを活用すると生成時に動的な要素を組み込むことができます。

現在「テーマ」と呼ばれているものも「テンプレート」と呼ばれていた時代があり、一部のドキュメントにはその形跡が残っています。

テンプレートファイルの指定方法

テンプレートファイルは設定ファイルのtemplateの値として指定することができます。

ここで指定されるテンプレートの種類はドキュメントプロセッサに依存します。

省略した場合、ドキュメントソースルートのtemplate.html(Pandocの場合)もしくはtemplate.erb(eRubyテンプレートシステムを使うもの)が使用されます。

eRubyテンプレートのパラメータ

eRubyテンプレートからは次の変数が見えるようになっています。

変数名 内容
dir ドキュメントルートからの相対ディレクトリ
filename ソースファイル名
frontmatter blessの行われたメタデータ
orig_filepath 処理対象のもとのファイルパス
procdoc ソースとして実際に処理されているファイルパス
article_body 生成されたHTMLドキュメント

ほとんどの場合、frontmatterarticle_bodyを使います。

さらに使うことは稀ですが、次のインスタンス変数も見えるようになっています。

インスタンス変数名 内容
@config .pbsimply.yamlの内容
@indexes コンパイルされたインデックスデータベース

テンプレートから見る範囲では、@indexesは不完全である可能性が高いです。 なぜならば、@indexesは本来、全ドキュメントを生成したあとに完全な状態になるものであるためです。

インスタンス変数は廃止されたpluginsの機能のために用意された側面が大きく、テンプレートでの利用は推奨されません。 既にこの機能へのeRubyテンプレートからのアクセスはdeprecatedとなっています。

Pandocにおけるテンプレート機能

Pandocをドキュメントプロセッサとして使う場合、Pandocのテンプレート機能が使われます。

Pandocの中ではFrontmatterの値を使った変数展開が可能です。 PureBuilder Simplyには自動的にFrontmatterに追加で値をセットするようになっているほか、Blessingによる介入も可能で、Pandocのテンプレートの機能を積極的に活用します。

Pandocのテンプレート機能についてはPandoc User’s Guide#Templatesを参照してください。

Frontmatter

PureBuilder SimplyにおけるFrontmatter

ドキュメントプロセッサの文脈における “Frontmatter” はほとんどの場合Markdown文書の冒頭に置くことができるYAML形式のメタデータ記述である “YAML Frontmatter” を指します。 ただし、PureBuilder SimplyはYAML Frontmatterに限定せず、統合されたドキュメント単位のメタデータのことを “Frontmatter” と呼んでいます。

メタデータの所在

Markdown YAML Frontmatter

Markdownでは文書の冒頭にYAML形式でメタデータを記載することができます。 これはYAML Frontmatterと呼ばれています。

---
title: This is first document
date: 2020-07-14
author: Harukamy
---

YAML FrontmatterはMarkdownにおける基本的な規則ではありませんが、多くのMarkdownプロセッサが対応しています。

PureBuilder SimplyではMarkdown形式のファイルの場合、ドキュメントプロセッサがYAML Frontmatterに対応しているか否かにかかわらず常にYAML Frontmatterをサポートします。

reStructuredText docinfo

reStructured Textではドキュメント内の最初の非コメント要素がフィールドリストである場合、docinfoというメタデータとして扱うことになっています。

  :title: This is first document
  :date: 2020-07-14
  :author: Harukamy

PureBuilder Simplyはこれを理解してfrontmatterとして扱うため、もしdocinfoを理解しないreStructuredTextプロセッサが追加されたとしてもfrontmatterとして扱うことができるはずです。

ただし、実際にPureBuilder SimplyでreStructuredTextを使っているユーザーは少ないため、現在の機能で十分に機能するかは不明です。 もし問題がある場合はGitHubのissueにて報告してください。

メタファイル

文書と同一ディレクトリ内に.meta.${filename}もしくは.meta.${filename}.yamlあるいは.meta.${filename}.ymlというファイルが存在する場合、PureBuilder Simplyはこれを代替のfrontmatterとみなしてロードします。

これは主に文書にfrontmatterを埋め込むのが難しい場合に向けたものとなります。

例えばPandocを使用する場合、text2tagなどMarkdownでもreStructured Textでもない形式を使用することができますが、形式によってはメタデータを記載する方法がない場合があります。そのような場合でも分離メタファイルを使用すればドキュメントにメタデータを付与できます。

パラメータ

Frontmatterにはシステムが使用する値や、便宜のためにシステムが設定した値が含まれます。 これを利用することで、動的要素を持つページを静的生成でまかなえる範囲を大きくすることができます。

以下の表においてSet byがfrontmatterになっているものはユーザーがfrontmatterとして明示的に記述することを意味しています。 多くの場合、「存在すればなにか特別な意味を持った値として扱われる」ということを意味しています。

Set byがsystemになっているものはPureBuilder Simplyが自動的に設定するものであることを意味します。

Key Set by Used by Description
title frontmatter template / system 文書タイトル。必須
author frontmatter Pandoc template 著者
date frontmatter/system template or system. 執筆日
lang frontmatter additional option / Pandoc template lang/xml:lang
keywords frontmatter additional option / Pandoc template An array, HTML metaタグのキーワードとして使うもの
description frontmatter additional option / theme HTML metaタグのdescriptionとして使うもの
draft frontmatter additional option / system 草稿。真である場合プロセッシングから除外される
skip_normalize frontmatter system Boolean. 真である場合、unicode_normalizeが設定されていてもノーマライズを省略する
skip_update frontmatter system Boolean. 真である場合、常に更新が省略される。-fオプションよりも優先される。
_last_proced system system Integer. 最後にPureBuilderで処理された時刻。. はじめてのプロセッシングの場合(あるいはデータベースを削除した場合)0になる
last_updated system system String. 最後にPandocで生成した時刻
_size system system ファイルサイズ (byte)
_mtime system system Integer. mtime of this file.
_filename system system ファイル名
_docformat system system Document Format. Markdown or ReST.
categories frontmatter ACCS ドキュメントのカテゴリ。ACCSによって使われる
pagetype frontmatter/config ACCS ページタイプ。デフォルトはpost。ACCSによって生成されるインデックスページはaccsindex
source_directory system system ソースディレクトリ
source_file system system ソースファイル名
source_path system system ソースファイルパス
dest_path system system 出力ファイルパス
normalized_docdir system /で始まる正規化されたソースディレクトリ
normalized_docpath system /で始まる正規化されたドキュメントパス
page_url system 当該ドキュメントの生成後のURL
page_url_encoded system 当該ドキュメントの生成後のURLのURIエンコードされたもの
page_url_encoded_external system page_url_encodedself_url_external_prefixを使うもの
page_html_escaped system 当該ドキュメントの生成後のURLのHTMLエンコードされたもの
page_html_escaped_external system page_html_encodedself_url_external_prefixを使うもの
title_encoded system タイトルをURIエンコードしたもの
title_html_escaped system タイトルをHTMLエスケープしたもの
timestamp frontmatter frontmatter / system dateよりも詳細なドキュメントの日時を記載する項目
timestamp_xmlschema system system XMLスキーマでフォーマットされたドキュメント日時。timestampが定義されていない場合、dateを使う
timestamp_jplocal system system 日本のローカル形式でフォーマットされたドキュメント日時。timestampが定義されていない場合、dateを使う
timestamp_rubytimestr system system RubyのTime#to_sのようなフォーマットされたドキュメント日時。timestampが定義されていない場合、dateを使う
timestamp_str system %Y-%m-%d[ %H:%M:%S %Z]形式の日時。 timestampが定義されていない場合、dateを使う