コレクション

コレクションは、チームメンバーや会議での講演など、関連するコンテンツをグループ化するのに最適な方法です。

セットアップ

コレクションを使用するには、まず_config.ymlで定義する必要があります。たとえば、これはスタッフメンバーのコレクションです。

collections:
  - staff_members

この場合、collectionsは、各コレクションに対して追加のメタデータが定義されていないシーケンス(つまり、配列)として定義されています。オプションで、collectionsをシーケンスの代わりにマッピング(つまり、ハッシュマップ)として定義し、追加のフィールドを定義することで、コレクションのメタデータを指定できます。

collections:
  staff_members:
    people: true

コレクションをシーケンスとして定義すると、そのページはデフォルトではレンダリングされません。これを有効にするには、コレクションにoutput: trueを指定する必要があります。これには、コレクションをマッピングとして定義する必要があります。詳細については、「出力」セクションを参照してください。

コレクションをまとめる3.7.0

オプションで、collections_dir: my_collectionsを使用して、すべてのコレクションを同じ場所に格納するためのディレクトリを指定できます。

そうすると、Jekyllはmy_collections/_booksbooksコレクションを、my_collections/_recipesrecipesコレクションを探します。

ドラフトと投稿をカスタムコレクションディレクトリに移動することを忘れないでください。

collections_dir: my_collectionsを使用して、すべてのコレクションを同じ場所に格納するためのディレクトリを指定する場合は、_draftsディレクトリと_postsディレクトリをmy_collections/_draftsmy_collections/_postsに移動する必要があります。コレクションディレクトリの名前は、アンダースコア(`_`)で始めることはできません。

コンテンツを追加

対応するフォルダー(例:<source>/_staff_members)を作成し、ドキュメントを追加します。フロントマターが存在する場合は、フロントマターが処理され、フロントマターの後のすべてのものがドキュメントのcontent属性にプッシュされます。フロントマターが指定されていない場合、Jekyllはそれを静的ファイルとみなし、コンテンツはそれ以上の処理を受けません。フロントマターが指定されている場合、Jekyllはファイルの内容を期待される出力に処理します。

フロントマターが存在するかどうかにかかわらず、Jekyllは、コレクションのメタデータでoutput: trueが設定されている場合にのみ、宛先ディレクトリ(例:_site)に書き込みます。

たとえば、上記で設定したコレクションにスタッフメンバーを追加する方法を次に示します。ファイル名は./_staff_members/jane.mdで、次の内容が含まれています。

---
name: Jane Doe
position: Developer
---
Jane has worked on Jekyll for the past *five years*.

内部的にはコレクションと見なされますが、上記のことは投稿には適用されないことに注意してください。有効なファイル名形式を持つ投稿は、フロントマターを含まない場合でも処理対象としてマークされます。

ディレクトリに正しい名前を付けることを忘れないでください。

フォルダーには、`_config.yml`ファイルで定義したコレクションと同じ名前で、先頭に`_`文字を追加する必要があります。

出力

ページでsite.staff_membersを反復処理し、各スタッフメンバーのコンテンツを出力できるようになりました。投稿と同様に、ドキュメントの本文にはcontent変数を使用してアクセスします。

{% for staff_member in site.staff_members %}
  <h2>{{ staff_member.name }} - {{ staff_member.position }}</h2>
  <p>{{ staff_member.content | markdownify }}</p>
{% endfor %}

Jekyllがコレクション内の各ドキュメントに対してレンダリングされたページを作成するようにする場合は、_config.ymlのコレクションメタデータでoutputキーをtrueに設定できます。

collections:
  staff_members:
    output: true

url属性を使用して、生成されたページへのリンクを作成できます。

{% for staff_member in site.staff_members %}
  <h2>
    <a href="{{ staff_member.url }}">
      {{ staff_member.name }} - {{ staff_member.position }}
    </a>
  </h2>
  <p>{{ staff_member.content | markdownify }}</p>
{% endfor %}

コレクションの特別なパーマリンク変数を使用して、コレクション全体の出力URLを制御できます。

ドキュメントのカスタムソート4.0

デフォルトでは、コレクション内の2つのドキュメントは、両方のドキュメントのフロントマターにdateキーがある場合、date属性でソートされます。ただし、いずれかまたは両方のドキュメントのフロントマターにdateキーがない場合、それらはそれぞれのパスでソートされます。

コレクションのメタデータを介してこのソートを制御できます。

フロントマターキーでソート

ドキュメントは、sort_byメタデータをフロントマターキー文字列に設定することにより、フロントマターキーに基づいてソートできます。たとえば、キーlessonに基づいてチュートリアルコレクションをソートするには、構成は次のようになります。

collections:
  tutorials:
    sort_by: lesson

ドキュメントは、キーの値の昇順に配置されます。ドキュメントにフロントマターキーが定義されていない場合、そのドキュメントはソートされたドキュメントのすぐ後に配置されます。複数のドキュメントにフロントマターキーが定義されていない場合、それらのドキュメントは日付またはパスでソートされ、ソートされたドキュメントのすぐ後に配置されます。

ドキュメントの手動順序付け

また、目的の順序でファイル名を一覧表示したorderメタデータを設定することにより、ドキュメントを手動で順序付けすることもできます。たとえば、チュートリアルコレクションは次のように構成されます。

collections:
  tutorials:
    order:
      - hello-world.md
      - introduction.md
      - basic-concepts.md
      - advanced-concepts.md

リストエントリと一致しないファイル名を持つドキュメントは、再配置されたドキュメントの後に配置されます。ドキュメントがサブディレクトリの下にネストされている場合は、エントリにも含めます。

collections:
  tutorials:
    order:
      - hello-world.md
      - introduction.md
      - concepts/basics.md
      - concepts/advanced.md

両方のメタデータキーが正しく定義されている場合、orderリストが優先されます。

Liquid属性

コレクション

コレクションはsite.collectionsでも利用できます。ここには、_config.ymlで指定したメタデータ(存在する場合)と、次の情報が含まれます。

変数 説明

label

コレクションの名前(例:`my_collection`)。

docs

ドキュメントの配列。

files

コレクション内の静的ファイルの配列。

relative_directory

サイトソースに対するコレクションのソースディレクトリへのパス。

directory

コレクションのソースディレクトリへのフルパス。

output

コレクションのドキュメントが個別のファイルとして出力されるかどうか。

ハードコードされたコレクション

自分で作成したコレクションに加えて、`posts`コレクションはJekyllにハードコードされています。`_posts`ディレクトリがあるかどうかに関係なく存在します。これは、`site.collections`を反復処理するときに注意すべきことで、フィルタリングする必要がある場合があります。

フィルターを使用してコレクションを検索することができます:`{{ site.collections | where: "label", "myCollection" | first }}`

コレクションと時間

ハードコードされたデフォルトコレクション`posts`内のドキュメントを除き、作成したコレクション内のすべてのドキュメントは、割り当てられた日付(もしあれば)に関係なくLiquidを介してアクセスでき、レンダリング可能です。

ドキュメントは、関連するコレクションメタデータに`output: true`がある場合にのみ、ディスクに書き込まれようとします。さらに、未来の日付のドキュメントは、`site.future`がtrueの場合にのみ書き込まれます。

ドキュメントのディスクへの書き込みをより詳細に制御するには、ドキュメントのフロントマターで`published: false`(デフォルトは`true`)を設定することで可能です。

ドキュメント

ドキュメントの対応するファイルで提供されたフロントマターに加えて、各ドキュメントには次の属性があります。

変数 説明

content

ドキュメントの(レンダリングされていない)コンテンツ。フロントマターが指定されていない場合、Jekyllはコレクション内にファイルを生成しません。フロントマターが使用されている場合、これはフロントマターの終端の`---`以降のファイルの内容すべてです。

output

ドキュメントのレンダリングされた出力(`content`に基づく)。

path

ドキュメントのソースファイルへのフルパス。

relative_path

サイトソースに対するドキュメントのソースファイルへのパス。

url

レンダリングされたコレクションのURL。ファイルは、それが属するコレクションがサイトの構成で`output: true`を持っている場合にのみ宛先に書き込まれます。

collection

ドキュメントのコレクションの名前。

date

ドキュメントのコレクションの日付。