データファイル

Jekyllで利用可能な組み込み変数に加えて、Liquidテンプレートシステムを介してアクセスできる独自のカスタムデータを指定できます。

Jekyllは、_dataディレクトリにあるYAMLJSONCSV、およびTSVファイルからのデータのロードをサポートしています。 CSVおよびTSVファイルには、ヘッダー行が必ず含まれている必要があることに注意してください。

この強力な機能により、テンプレートでの繰り返しを回避し、_config.ymlを変更せずにサイト固有のオプションを設定できます。

プラグイン/テーマは、データファイルを利用して設定変数を設定することもできます。

データフォルダ

_dataフォルダは、Jekyllがサイトを生成するときに使用する追加のデータを保存できる場所です。これらのファイルはYAML、JSON、TSV、またはCSVファイル(.yml.yaml.json.tsv、または.csv拡張子を使用)である必要があり、site.dataを介してアクセスできます。

例:メンバーリスト

Jekyllテンプレートでコードの大きな塊をコピー&ペーストすることを避けるために、データファイルを使用する基本的な例を次に示します。

_data/members.yml

- name: Eric Mill
  github: konklone

- name: Parker Moore
  github: parkr

- name: Liu Fengyun
  github: liufengyun

または_data/members.csv

name,github
Eric Mill,konklone
Parker Moore,parkr
Liu Fengyun,liufengyun

このデータには、site.data.membersを介してアクセスできます(ファイルの名前のベース名が変数名を決定するため、同じディレクトリで同じベース名で異なる拡張子を持つデータファイルを持つことは避ける必要があります)。

テンプレートでメンバーのリストをレンダリングできるようになりました。

<ul>
{% for member in site.data.members %}
  <li>
    <a href="https://github.com/{{ member.github }}">
      {{ member.name }}
    </a>
  </li>
{% endfor %}
</ul>

サブフォルダ

データファイルは、_dataフォルダのサブフォルダに配置することもできます。各フォルダレベルは、変数の名前空間に追加されます。以下の例は、GitHub組織がorgsフォルダの下のファイルで個別に定義できる方法を示しています。

_data/orgs/jekyll.yml

username: jekyll
name: Jekyll
members:
  - name: Tom Preston-Werner
    github: mojombo

  - name: Parker Moore
    github: parkr

_data/orgs/doeorg.yml

username: doeorg
name: Doe Org
members:
  - name: John Doe
    github: jdoe

組織には、site.data.orgsに続けてファイル名を指定することでアクセスできます。

<ul>
{% for org_hash in site.data.orgs %}
{% assign org = org_hash[1] %}
  <li>
    <a href="https://github.com/{{ org.username }}">
      {{ org.name }}
    </a>
    ({{ org.members | size }} members)
  </li>
{% endfor %}
</ul>

例:特定の著者へのアクセス

ページと投稿も特定のデータ項目にアクセスできます。次の例は、特定の項目にアクセスする方法を示しています。

_data/people.yml:

dave:
    name: David Smith
    twitter: DavidSilvaSmith

その後、著者を投稿のフロントマターでページ変数として指定できます。

---
title: sample post
author: dave
---

{% assign author = site.data.people[page.author] %}
<a rel="author"
  href="https://twitter.com/{{ author.twitter }}"
  title="{{ author.name }}">
    {{ author.name }}
</a>

サイト(特にドキュメントWebサイトや整理するページが多い別のタイプのJekyllサイト)の堅牢なナビゲーションを構築する方法については、ナビゲーションを参照してください。

CSV/TSV解析オプション

RubyがCSVおよびTSVファイルを解析する方法は、csv_readerおよびtsv_reader構成オプションでカスタマイズできます。各構成キーは同じオプションを公開します。

converters:ファイルを解析するときに使用するCSVコンバーター。利用可能なオプションは、integerfloatnumericdatedate_time、およびallです。デフォルトでは、このリストは空です。encoding:ファイルのエンコーディング。デフォルトは、サイトのencoding構成オプションです。headers:ファイルの最初の行をヘッダーとして解析するかどうかを示すブールフィールド。falseの場合、最初の行をデータとして扱います。デフォルトはtrueです。

csv_reader:
    converters:
      - numeric
      - datetime
    headers: true
    encoding: utf-8
tsv_reader:
    converters:
      - all
    headers: false