Front Matter のデフォルト設定
Front Matter を使うことは、サイトのページや投稿の設定を指定する一つの方法です。デフォルトのレイアウトの設定、タイトルのカスタマイズ、投稿のより正確な日時指定などはすべて、ページや投稿の Front Matter に追加できます。
多くの場合、多くの設定オプションを繰り返していることに気づくでしょう。各ファイルで同じレイアウトを設定したり、投稿に同じカテゴリ(複数可)を追加したり、ブログのほとんどの投稿で同じになる可能性のある著者名のようなカスタム変数を追加したりします。
新しい投稿やページを作成するたびにこの設定を繰り返す代わりに、Jekyll はサイト設定でこれらのデフォルトを設定する方法を提供します。これを行うには、プロジェクトのルートディレクトリにある _config.yml
ファイルで、defaults
キーを使用してサイト全体のデフォルトを指定できます。
defaults
キーは、特定のファイルパス、およびオプションでそのパス内のファイルタイプに対して、どのデフォルトを設定する必要があるかを定義する、スコープ/値ペアの配列を保持します。
サイト内のすべてのページと投稿にデフォルトのレイアウトを追加するとします。これを _config.yml
ファイルに追加します。
defaults:
-
scope:
path: "" # an empty string here means all files in the project
values:
layout: "default"
`jekyll serve` コマンドを停止して再実行してください。
_config.yml
マスター設定ファイルには、実行時に一度読み込まれるグローバル設定と変数定義が含まれています。自動再生成中に `_config.yml` に行われた変更は、次の実行までロードされません。
注:データファイルは、自動再生成中に含まれて再ロードされます。
ここで、values
のスコープを scope
パスに存在するすべてのファイルに適用します。パスが空の文字列として設定されているため、プロジェクト内のすべてのファイルに適用されます。たとえば、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
はオプションですが、scope/values
ペアを作成するときは、path
の値を指定する必要があります。
前述したように、defaults
に複数のスコープ/値ペアを設定できます。
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"
これらのデフォルトでは、すべてのページで 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"
この例では、layout
は、my_collection
という名前のコレクション内で default
に設定されています。
Front Matter のデフォルト設定でのグロブパターン
デフォルトのマッチング時にグロブパターン(現在は *
を含むパターンに制限されています)を使用することも可能です。たとえば、section
フォルダの任意のサブフォルダにある各 special-page.html
に特定のレイアウトを設定することが可能です。3.7.0
collections:
my_collection:
output: true
defaults:
-
scope:
path: "section/*/special-page.html"
values:
layout: "specific-layout"
グロブとパフォーマンス
パスのグロブ化は、パフォーマンスに悪影響を与えることが知られており、特に Windows では現在最適化されていないことに注意してください。パスをグロブ化すると、関連付けられたコレクションディレクトリのサイズに比例してビルド時間が長くなります。
優先順位
Jekyll は、_config.yml
ファイルの defaults
セクションで指定したすべての設定を適用します。スコープに対してより具体的なパスを指定することで、他のスコープ/値ペアの設定を上書きすることを選択できます。
上記の最後から 2 番目の例で、それを見ることができます。まず、デフォルトのページレイアウトを my-site
に設定しました。次に、より具体的なパスを使用して、projects/
パスのページのデフォルトレイアウトを project
に設定しました。これは、ページまたは投稿の 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
に設定されます。