投稿日: 2022年09月25日 12:00 JST
更新日: 2022年12月31日 00:00 JST
liquidでjekyllの変数を色々弄るのに、どんなデータ構造の構造体になっているのか気になったので調べてみました。
前提
GitHub Pagesで使用されているバージョンjekyll 3.9.2を前提に説明します。が、jekyll 4.0以降でもあまり変わりがないようです。(キャッシュの設定が追加されただけ?)
データ構造についてはJavascriptライクな似非言語で書いています。自分が理解するためだけに書いたので適当です。
大文字で書かれている変数名やオブジェクト名は、説明のため当方で勝手に付けた名称ですので注意してください。
調べるにあたって、以下のjekyllの公式ドキュメントサイトを参考にしています。
実際に動作を確認しながら書いていますが、誤りがあるかもしれません。その点はご了承ください。
データ構造一覧
全てのオブジェクトはグローバルのlayout、page、paginator、siteのいずれかにぶら下がる構成となっています。
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>, …];jekyllやliquidで処理されない画像ファイルやスクリプトなどのオブジェクトのリスト |
| 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 | trueでwhitelistにないカスタムプラグインを無効化 |
| 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 | 端末からサーバーを切り離すかどうかのフラグtureでjekyllのプロセスをバックグランドで実行させる【 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 |
- | サイトを公開するドメインのurljekyll serverで実行された場合site.hostとsite.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 |