テンプレート
テンプレートシステム
概要
PureBuilder Simplyでページを生成する際にはテンプレートが必要になります。
実際に使用されるテンプレートの形式は、選択したドキュメントプロセッサにより異なります。 多くの場合、eRubyを用いたテンプレートが使われます。
テンプレートシステムを活用すると生成時に動的な要素を組み込むことができます。
現在「テーマ」と呼ばれているものも「テンプレート」と呼ばれていた時代があり、一部のドキュメントにはその形跡が残っています。
テンプレートファイルの指定方法
テンプレートファイルは設定ファイルのtemplate
の値として指定することができます。
ここで指定されるテンプレートの種類はドキュメントプロセッサに依存します。
省略した場合、ドキュメントソースルートのtemplate.html
(Pandocの場合)もしくはtemplate.erb
(eRubyテンプレートシステムを使うもの)が使用されます。
eRubyテンプレートのパラメータ
eRubyテンプレートからは次の変数が見えるようになっています。
変数名 | 内容 |
---|---|
dir |
ドキュメントルートからの相対ディレクトリ |
filename |
ソースファイル名 |
frontmatter |
blessの行われたメタデータ |
orig_filepath |
処理対象のもとのファイルパス |
procdoc |
ソースとして実際に処理されているファイルパス |
article_body |
生成されたHTMLドキュメント |
ほとんどの場合、frontmatter
とarticle_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_encoded でself_url_external_prefix を使うもの |
|
page_html_escaped |
system | 当該ドキュメントの生成後のURLのHTMLエンコードされたもの | |
page_html_escaped_external |
system | page_html_encoded でself_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 を使う |