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 のファイルにのみ設定されます。利用可能な異なるタイプは、pagespostsdrafts、またはサイト内の任意のコレクションです。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 は、サイトがビルドされるときに、layoutproject ではなく foobar に設定され、authorMr. Hyde ではなく John Smith に設定されます。