jekyllの変数のデータ構造

liquidjekyllの変数を色々弄るのに、どんなデータ構造の構造体になっているのか気になったので調べてみました。

前提

GitHub Pagesで使用されているバージョンjekyll 3.9.2を前提に説明します。が、jekyll 4.0以降でもあまり変わりがないようです。(キャッシュの設定が追加されただけ?)

データ構造についてはJavascriptライクな似非言語で書いています。自分が理解するためだけに書いたので適当です。
大文字で書かれている変数名やオブジェクト名は、説明のため当方で勝手に付けた名称ですので注意してください。

調べるにあたって、以下のjekyllの公式ドキュメントサイトを参考にしています。

実際に動作を確認しながら書いていますが、誤りがあるかもしれません。その点はご了承ください。

データ構造一覧

全てのオブジェクトはグローバルのlayoutpagepaginatorsiteのいずれかにぶら下がる構成となっています。

GLOBAL = {
  "content"           : <string>,
  "layout"            : LAYOUT<object>,
  "page"              : PAGE<object>,
  "paginator"         : PAGINATOR<object>,
  "site"              : SITE<object>
};

LAYOUT = {
  "layout"            : <string>
  // other custom parameter start (ex.)
    ...etc (custom parameter)
  // other custom parameter end
}

PAGE = {
  "content"           : <string>,
  "output"            : <string>,
  "next"              : PAGE<object>
  "previous"          : PAGE<object>
  "id"                : <string>,
  "relative_path"     : <string>,
  "collection"        : <string>,
  "categories"        : <array> , // => [CATEGORY_NAME<string>, ...];
  "draft"             : <bool>  ,
  "tags"              : <array> , // => [TAG_NAME<string>, ...];
  "slug"              : <string>,
  "ext"               : <string>,
  "dir"               : <string>,
  "name"              : <string>,
  "url"               : <string>, 
  "path"              : <string>,
  "title"             : <string>,
  "layout"            : <string>,
  "date"              : <string>,
  "excerpt"           : <string>,
  // front matter start (ex.)
  "image"             : <string>,
  "author"            : <string>,
  "description"       : <string>,
  "summary"           : <string>,
    ...etc
  // front matter end
}

PAGINATOR = {
  "page"              : <integer>,
  "per_page"          : <integer>,
  "posts"             : <array>  , // => [PAGE<object>, ...];
  "total_posts"       : <integer>,
  "total_pages"       : <integer>,
  "previous_page"     : <integer>,
  "previous_page_path": <string>,
  "next_page"         : <integer>,
  "next_page_path"    : <string>
}

SITE = {
  "tags"              : <array> , // => [TAG<array>, ...];  TAG => [TAG_NAME<string>, PAGES<array>]; PAGES => [PAGE<object>, ...];
  "time"              : <string>,
  "pages"             : <array> , // => [PAGE<object>, ...];
  "posts"             : <array> , // => [PAGE<object>, ...];
  "documents"         : <array> , // => [PAGE<object> or STATIC_FILE<object>, ...];
  "related_posts"     : <array> , // => [PAGE<object>, ...];
  "html_pages"        : <array> , // => [PAGE<object>, ...];
  "static_files"      : <array> , // => [STATIC_FILE<object>, ...];
  "categories"        : CATEGORIES<object> , 
  "collections"       : <array> , // => [COLLECTION<object>, ...];
  "data"              : DATA<object>,
  "source"            : <string>,
  "destination"       : <string>,
  "collections_dir"   : <string>,
  "plugins_dir"       : <string>,
  "layouts_dir"       : <string>,
  "data_dir"          : <string>,
  "includes_dir"      : <string>,
  "safe"              : <bool>  ,
  "include"           : <array> , // => [FILE_DIR_NAME<string>, ...];
  "exclude"           : <array> , // => [FILE_DIR_NAME<string>, ...];
  "keep_files"        : <array> , // => [FILE_DIR_NAME<string>, ...];
  "encoding"          : <string>,
  "markdown_ext"      : <string>,
  "strict_front_matter": <bool> ,
  "show_drafts"       : <bool>  ,
  "limit_posts"       : <integer>,
  "future"            : <bool>  ,
  "unpublished"       : <bool>  ,
  "whitelist"         : <array> , // => [WITELIST_NAME<string>, ...];
  "plugins"           : <array> , // => [PLUGINS_NAME<string>, ...];
  "markdown"          : <string>,
  "highlighter"       : <string>,
  "lsi"               : <bool>  ,
  "excerpt_separator" : <string>,
  "incremental"       : <bool>  ,
  "detach"            : <bool>  ,
  "port"              : <string>,
  "host"              : <string>,
  "baseurl"           : <string>,
  "show_dir_listing"  : <bool>  ,
  "permalink"         : <string>,
  "paginate_path"     : <string>,
  "timezone"          : <string>,
  "quiet"             : <bool>  ,
  "verbose"           : <bool>  ,
  "defaults"          : <array>,  // => [YAML<object>, ...];
  "liquid"            : LIQUID<object>,
  "kramdown"          : KRAMDOWN<object>,
  "livereload_port"   : <integer>,
  "serving"           : <bool>  ,
  "watch"             : <bool>  ,
  "theme"             : <string>,
  "url"               : <string>,
  // _config.yml other custom parameter start (ex.)
  "lang"              : <string>,
  "title"             : <string>,
  "tagline"           : <string>,
  "description"       : <string>,
  "domain"            : <string>,
  "favicon"           : <string>,
  "theme_color"       : <string>,
  "paginate"          : <integer>,
    ...etc (custom parameter)
  // _config.yml other custom parameter end
};

CATEGORIES = {
  CATEGORY_NAME       : <array>, // => [PAGE<object>, ...];
  ...
};

DATA = {
  YAML_FILE_NAME      : YAML_OBJECT<object>,
  ...
};
YAML_OBJECT = #parse_from_file_to_object(YAML_FILE_NAME.yml);

COLLECTIONS = {
  "output"            : <bool>  ,
  "label"             : <string>,
  "directory"         : <string>,
  "docs"              : <array> ,// => [DOC<strings>, ...];
  "relative_directory": <string>,
  "files"             : <array> ,// => [STATIC_FILE<object>, ...];
};

STATIC_FILE = {
  "modified_time"     : <string>,
  "name"              : <string>,
  "basename"          : <string>,
  "extname"           : <string>,
  "collection"        : <string>,
  "path"              : <string>
}

LIQUID = {
  "error_mode"        : <string>,
  "strict_filters"    : <bool>  ,
  "strict_variables"  : <bool>  ,
  ...
}

KRAMDOWN = {
  "auto_ids"          : <bool>,
  "entity_output"     : <string>,
  "toc_levels"        : <string>,
  "smart_quotes"      : <string>,
  "input"             : <string>,
  "hard_wrap"         : <bool>  ,
  "footnote_nr"       : <integer>,
  "show_warnings"     : <bool>  ,
  ...
}

初期値と詳細説明

グローバル変数

キー 初期値 説明
content string - 現在のページの本文
layout object - LAYOUTオブジェクト
現在のページのレイアウトに関するオブジェクト
page object - PAGEオブジェクト
現在のページに関するオブジェクト
paginator object null PAGINATORオブジェクト
現在のページのページネーターに関するオブジェクト。ページ分けしていなければnull
site object - SITEオブジェクト
サイトの設定に関するオブジェクト

LAYOUTオブジェクト

キー 初期値 説明
layout string - layoutの再帰的参照で、一番最後にたどり着いたレイアウト名
custom param     レイアウトファイル内で宣言された変数の集合
 custom string - (例)
  …etc      
end      

PAGEオブジェクト

キー 初期値 説明
content string - 現在のページの本文
output string null <html>を含む全ての内容
【postを含むコレクションに属するページのみ】
next object null PAGEオブジェクト
site.posts順で次の記事のオブジェクト。存在しない場合はnull
【postを含むコレクションに属するページのみ】
previous object null PAGEオブジェクト
site.posts順で前の記事のオブジェクト。存在しない場合はnull
【postを含むコレクションに属するページのみ】
id string - 各ページを識別する一意なID
【postを含むコレクションに属するページのみ】
relative_path string - 現在のブログ記事(post)の元ファイルへの相対パス
【postを含むコレクションに属するページのみ】
collection string - 現在のページが属するコレクション名。ブログ記事はpostsとなる
【postを含むコレクションに属するページのみ】
categories array [ ] CATEGORY_ARRAY => [CATEGORY_NAME<string>, …];
現在のブログ記事(post)が属するカテゴリ名のリスト
【postを含むコレクションに属するページのみ】
draft bool false 草稿記事かどうかのフラグ。_drafts内の記事にはフラグが立つ
【postを含むコレクションに属するページのみ】
tags array [ ] TAG_ARRAY => [TAG_NAME<string>, …];
現在のブログ記事(post)が属するタグ名のリスト
【postを含むコレクションに属するページのみ】
slug string - 現在のブログ記事(post)の元ファイルの拡張子を除いたファイル名
【postを含むコレクションに属するページのみ】
ext string - 現在のブログ記事(post)の元ファイルの拡張子
【postを含むコレクションに属するページのみ】
dir string - 現在のページの元ファイルがあるディレクトリへのパス
【コレクションに属さない静的ページのみ】
name string - 現在のページの元ファイルのファイル名
【コレクションに属さない静的ページのみ】
url string - 現在のページのドメインを含まないURL
path string - 現在のページの元ファイルへのパス
title string - (front matterで設定)現在のページのタイトル名
layout string - (front matterで設定)現在のページのレイアウト名
date string - (front matterで設定)現在のページに割り付けられた日時
excerpt string - (front matterで設定)現在のページの抜粋
front matter     現在のページのfront matterで宣言された変数の集合
 image string - (例)
 author string - (例)
 description string - (例)
 summary string - (例)
  …etc      
end      

PAGINATORオブジェクト

キー 初期値 説明
page integer - 現在のページのページ番号
per_page integer - 1ページに表示される記事数
posts array - PAGE_ARRAY => [PAGE<object>, …];
現在のページに表示されている記事のPAGEオブジェクトのリスト
total_posts integer - 記事の総数
total_pages integer - ページ分けされたページの総数
previous_page integer null 前のページのページ番号
previous_page_path string null 前のページへのパス
next_page integer null 次のページのページ番号
next_page_path string null 次のページへのパス

SITEオブジェクト

キー 初期値 説明
tags array - TAGS_ARRAY => [TAG<array>, …];
TAG => [TAG_NAME<string>, PAGES<array>];
PAGES => [PAGE<object>, …];
page.tagsとは異なるので注意
time string - jekyllを起動した日時
pages array - PAGE_ARRAY => [PAGE<object>, …];
投稿記事以外の閲覧可能な静的なページとCSSやsitemapなどの機械可読なページのオブジェクトのリスト
(jekyllのドキュメントサイトの説明と違う?)
posts array - PAGE_ARRAY => [PAGE<object>, …];
全投稿記事のページのオブジェクトのリスト(新しい順)
documents array - PAGE_ARRAY => [PAGE<object> or STATIC_FILE<object>, …];
postを含む全てのコレクションのドキュメントのオブジェクトのリスト
related_posts array - PAGE_ARRAY => [PAGE<object>, …];
関連するページのオブジェクトのリスト
変数を解釈しているベージが投稿記事(post)の場合のみ有効。それ以外はnull
html_pages array - PAGE_ARRAY => [PAGE<object>, …];
投稿記事以外の閲覧可能な静的なページのオブジェクトのリスト
static_files array - STATIC_FILES_ARRAY => [STATIC_FILE<object>, …];
jekyllliquidで処理されない画像ファイルやスクリプトなどのオブジェクトのリスト
categories object - CATEGORIESオブジェクト
カテゴリー別ページ一覧のオブジェクト
page.categoriesとは異なるので注意
collections array - COLLECTIONS_ARRAY => [COLLECTION<object>, …];
postを含むコレクションのオブジェクトのリスト
data object - DATAオブジェクト
_dataフォルダ内のymlファイルの内容が入る
source string ”.” jekyllが読み込みを行うルートディレクトリ。_config.ymlがあるディレクトリ?
destination string ”./_site” jekyllが書き出しを行うルートディレクトリ
collections_dir string ”.” コレクションがまとめられているディレクトリが存在しているディレクトリのパス
plugins_dir string “_plugins” プラグインファイルが存在するディレクトリの名称
layouts_dir string “_layouts” レイアウトファイルが存在するディレクトリの名称
data_dir string “_data” site.dataで参照されるファイルが存在するディレクトリの名称
includes_dir string “_includes” includeコマンドで用いられるファイルが存在するディレクトリの名称
safe bool false truewhitelistにないカスタムプラグインを無効化
include array => [“.htaccess”]
jekyllの実行時に強制的に変換に含めるファイルやディレクトリのリスト
exclude array => [“Gemfile”, “Gemfile.lock”, “node_modules”, “vendor/bundle/”, “vendor/cache/”, “vendor/gems/”, “vendor/ruby/”]
jekyllの実行時に変換から除外するファイルやディレクトリのリスト
ドットファイルはこの設定如何によらず基本除外される
keep_files array => [“.git”, “.svn”]
サイト生成時残しておきたいファイルやディレクトリのリスト
サイト生成のたび_siteの内容は消去されるので、消去から除外する設定
encoding string “utf-8” ファイルの文字エンコーディングの設定
markdown_ext string => “markdown,mkdown,mkdn,mkd,md”
マークダウン記述ファイルであることを認識させる拡張子一覧
strict_front_matter bool false front matterにYMAL構文エラーがある場合ビルドを停止させるかどうかのフラグ
show_drafts bool false 草稿(draft)を出力するかのフラグ
limit_posts integer 0 解析および公開する投稿数の制限。”0”に設定すると無制限?
future bool false 未来の日付のページも出力するかのフラグ
unpublished bool false front matter内で、published: falseとした記事でも出力するかのフラグ
whitelist array [ ] WHITELIST_ARRAY => [WITELIST_NAME<string>, …];
ホワイトリストとして登録したプラグインのリスト
plugins array [ ] PLUGINS_ARRAY => [PLUGINS_NAME<string>, …];
プラグインのリスト
markdown string “kramdown” jekyllで使用するMarkdownレンダラー
highlighter string “rouge” jekyllで使用する構文ハイライト
lsi bool false 関連記事のインデックスを作成するかのフラグ
classifier-rebornプラグインが必要。GitHub Pagesでは非対応
excerpt_separator string “\n\n” デフォルトでは本文冒頭から最初の段落\n\nがあるところまでを抜粋と設定
incremental bool false 【実験的機能】インクリメンタルビルド機能を有効化するかどうかのフラグ
変更が加えられたファイルに関連するページのみを再ビルドする機能
detach bool false 端末からサーバーを切り離すかどうかのフラグ
turejekyllのプロセスをバックグランドで実行させる
jekyll server時のみ有効】
port string “4000” 内蔵webサーバーのポート番号
jekyll server時のみ有効】
host string “127.0.0.1” 内蔵webサーバーのホスト名
jekyll server時のみ有効】
baseurl string "” 生成したファイルを公開サーバーのどこのディレクトリに配置するかを設定
baseurl: "sample"とした場合、http://domain/sample/となる
show_dir_listing bool false ディレクトリリストを表示させるかどうかのフラグ
trueとするとhttp://domain/にアクセスした場合http://domain/index.htmlの代わりにディレクトリリストを表示する
jekyll server時のみ有効】
permalink string “date” front matterで設定されなかった場合のパーマリンクの設定
paginate_path string “/page:num” ページ分けされたページの出力先
timezone string null タイムゾーンの設定。設定がない場合、環境変数TZを継承
quiet bool false ビルド時のログを出力させないかどうかのフラグ
verbose bool false ビルド時に詳細なログを出力するかどうかのフラグ
defaults array [ ] DEFAULTS_ARRAY => [YAML<object>, …];
front matterで設定しなかった場合のデフォルト値の設定
_config.yml内のdefaults:のyamlオブジェクトの内容が格納されている
liquid object - LIQUIDオブジェクト
liquidの動作に関する設定のオブジェクト
kramdown object - KRAMDOWNオブジェクト
kramdownの動作に関する設定のオブジェクト
livereload_port integer 35729 livereloadを通知するポートの設定
jekyll server時のみ有効】
serving bool - jekyll serverで起動されているかのフラグ
watch bool true ファイルに変更が加えられた時に自動再生成を行うかのフラグ
jekyll server時のみ有効】
theme string - 現在使用しているテーマの名称
url string - サイトを公開するドメインのurl
jekyll serverで実行された場合site.hostsite.portで設定された値が入る
_config.yml     _config.ymlで宣言された変数の集合
 lang string - (例)
 title string - (例)
 tagline string - (例)
 description string - (例)
 domain string - (例)
 favicon string - (例)
 theme_color string - (例)
 paginate integer - (例)
  …etc      
end      

COLLECTIONオブジェクト

キー 初期値 説明
output bool false コレクションに属するページを個別ファイルとして出力するかのフラグ
label="posts"はデフォルトでtrue
label string - コレクションの名称
directory string - コレクションがまとめられているディレクトリへのフルパス
docs array [ ] DOCS_ARRAY => [DOC<strings>, …];
コレクションに属するページの本文のリスト
relative_directory string - コレクションがまとめられているディレクトリへのサイトからの相対パス
files array [ ] FILES_ARRAY => [STATIC_FILE<object>, …];
コレクションに属する静的ファイルのオブジェクトのリスト

STATIC_FILEオブジェクト

キー 初期値 説明
modified_time string - ファイルの更新日時のタイムスタンプ
name string - ファイルのファイル名
basename string - ファイルの拡張子を含まないファイル名
extname string - ファイルの拡張子
collection string null ファイルが属するコレクション名
path string - ファイルへのパス

LIQUIDオブジェクト

キー 初期値 説明
error_mode string “warn” liquid解釈中に例外をキャッチした場合の反応の設定
デフォルトでは警告を出力し解釈は継続
strict_filters bool false 存在しないフィルターが呼ばれた場合の反応の設定
trueで例外をthrowする
strict_variables bool false 定義されていない変数が参照された場合の反応の設定
trueで例外をthrowする
 …etc      

KRAMDOWNオブジェクト

キー 初期値 説明
auto_ids bool true <h1>, <h2>などの見出しタグの自動的にIDを生成するかどうかのフラグ
entity_output string “as_char” デフォルトではhtmlエンティティは可能であれば文字として出力される
toc_levels string “1..6” どのレベルまで目次に表示させるかを設定
“1..3”であれば第1階層から第3階層まで表示し、それ以下は省略する
smart_quotes string => “lsquo,rsquo,ldquo,rdquo”
スマートクォートとして出力させるhtmlエンティティを設定
input string “GFM” デフォルトではGitHub Flavored Markdownをサポート
GFMを外したい場合input: Kramdownと設定
hard_wrap bool false 改行を改行として解釈するかどうかのフラグ
footnote_nr integer 1 最初の注釈番号の設定
show_warnings bool false ???
 …etc      

Previous Post
jekyllのカスタマイズ(その他)

Share

最近の投稿

gitの入れ子管理
gitの入れ子管理

gitのリポジトリは入れ子にして管理できます。

jekyllの変数のデータ構造
jekyllの変数のデータ構造

jekyllの変数のデータ構造を紹介します

jekyllのカスタマイズ(その他)
jekyllのカスタマイズ(その他)

その他の設定を紹介します