Front Matterのデフォルト
front matterの使用は、サイトのページやポストに特別な設定行う方法の一つです。デフォルトのレイアウトやタイトルのカスタマイズ、ポストの正確な日時の指定のような設定は、ページやポストのfront matterで追加することができます。
度々、多くのオプション設定を繰り返す場合が出てくるでしょう。各ファイルへの同じレイアウトの指定、ポストへの同じカテゴリの指定等です。著者名といったカスタム変数の追加も、ブログの多数のポストで同じです。
新しいポストやページを作成する度に設定を繰り返す代わりに、Jekyllはサイト設定でこれらのデフォルトを設定する方法を提供しています。これを行うには、プロジェクトのrootディレクトリの_config.yml
にdefaults
キーを使用してサイト全体のデフォルトを設定します。
defaults
キーはデフォルトを定義する特定のpathとscopeとvalueのペアの配列で指定します。オプションでパスのファイルの種類を指定することもできます。
サイトの全てのページとポストのデフォルトレイアウトを追加したい場合です。以下を_config.yml
ファイルに追加します。
defaults:
-
scope:
path: "" # an empty string here means all files in the project
values:
layout: "default"
一度止めて`jekyll serve`コマンドを再実行します
グローバル設定と変数定義が含まれているマスター設定ファイルの_config.yml
は、実行時に一度だけ読み込まれます。自動再生成をしている時に_config.yml
に変更を加えても、次の実行まで読み込まれません。
Dataファイルは自動再生成時も再読込されます。
ここでは、scope
パスの中に存在するファイルにvalues
に当てはめています。pathに空の文字列が指定されているので、プロジェクトの全ファイルに適用されます。例えばcssファイルのように、全てのファイルにはレイアウトを設定したくないでしょう。scope
キーにtype
を指定することができます。
defaults:
-
scope:
path: "" # an empty string here means all files in the project
type: "posts" # previously `post` in Jekyll 2.2.
values:
layout: "default"
これで、posts
タイプのファイルにのみレイアウトが設定されます。pages
やposts
、drafts
、サイトのコレクションをtypeで使用することができます。type
はオプションですが、scope/values
ペアを指定するときはpath
を指定する必要があります。
前述のように、defaults
には複数のscope/valuesペアを指定することができます。
defaults:
-
scope:
path: ""
type: "pages"
values:
layout: "my-site"
-
scope:
path: "projects"
type: "pages" # previously `page` in Jekyll 2.2.
values:
layout: "project" # overrides previous default layout
author: "Mr. Hyde"
このdefaultsで、全てのページはmy-site
レイアウトを使用します。projects/
フォルダのhtmlファイルはproject
レイアウトを使用し、page.author
liquid変数にMr. Hyde
を指定します。
collections:
my_collection:
output: true
defaults:
-
scope:
path: ""
type: "my_collection" # a collection in your site, in plural form
values:
layout: "default"
この例では、my_collection
というコレクションにlayout
はdefault
だと設定します。
Front MatterデフォルトでのGlobパターン
デフォルトをマッチさせるために、Globpパターンを使用することもできます(現在は、*
を含むパター限定です)。例えば、section
フォルダのサブフォルダにある各special-page.html
に特定のレイアウトを設定することができます。3.7.0
collections:
my_collection:
output: true
defaults:
-
scope:
path: "section/*/special-page.html"
values:
layout: "specific-layout"
Globとパフォーマンス
パスをGlobで指定するとパフォーマンスへの悪影響があることが知られており、特にWindowsでは最適化されていません。パスをGlobで指定すると、コレクションディレクトリの大きさに応じて構築時間が長くなります。
優先順位
Jekyllは_config.yml
のdefaults
セクションで指定された設定を全て適用します。他の特定のパスへのscope/valuesペアを設定することで、上書きすることができます。
上に戻って下から3つ目の例を見てください。まず、my-site
へのデフォルトページレイアウトを設定しています。そして、project
用のprojects/
パスのページへのデフォルトを設定しています。ページやポストのfront matterに設定する任意の値で実行可能です。
最後に、_config.yml
ファイルにdefaults
セクションを追加してサイト設定のデフォルトを設定した場合、それらの設定はページやポストで上書きできます。ページやポストのfront matterで設定を行うだけです。例えば、
# In _config.yml
...
defaults:
-
scope:
path: "projects"
type: "pages"
values:
layout: "project"
author: "Mr. Hyde"
category: "project"
...
# In projects/foo_project.md
---
author: "John Smith"
layout: "foobar"
---
The post text goes here...
projects/foo_project.md
は、layout
にはproject
の代わりにfoobar
が、author
にはMr. Hyde
の代わりにJohn Smith
がサイト構築時に設定されます。