テーマ
Jekyllには、コミュニティで管理されているテンプレートとスタイルを活用してサイトの表示をカスタマイズできる、拡張性の高いテーマシステムがあります。Jekyllのテーマはプラグインを指定し、アセット、レイアウト、インクルード、スタイルシートを、サイトのコンテンツで上書きできる方法でパッケージ化します。
テーマを選ぶ
さまざまなギャラリーでテーマを探してプレビューできます
- GitHub.com #jekyll-theme リポジトリ
- jamstackthemes.dev
- jekyllthemes.org
- jekyllthemes.io
- jekyll-themes.com
参照:リソース。
gemベースのテーマについて
新しいJekyllサイトを作成する(jekyll new <PATH>
コマンドを実行する)と、JekyllはMinimaというgemベースのテーマを使用するサイトをインストールします。
gemベースのテーマでは、サイトの一部のディレクトリ(assets
、_data
、_layouts
、_includes
、_sass
ディレクトリなど)はテーマのgemに格納され、直接表示されません。ただし、必要なすべてのディレクトリは、Jekyllのビルドプロセス中に読み取られ、処理されます。
Minimaの場合、Jekyllサイトディレクトリには次のファイルのみが表示されます
.
├── Gemfile
├── Gemfile.lock
├── _config.yml
├── _posts
│ └── 2016-12-04-welcome-to-jekyll.markdown
├── about.markdown
└── index.markdown
Gemfile
とGemfile.lock
ファイルは、Bundlerによって使用され、Jekyllサイトの構築に必要なgemとgemのバージョンを追跡します。
gemベースのテーマを使用すると、テーマ開発者は、テーマgemを持っているすべての人が利用できる更新プログラムを簡単に作成できます。更新がある場合、テーマ開発者は更新をRubyGemsにプッシュします。
テーマgemをお持ちの場合は、必要に応じてbundle update
を実行して、プロジェクト内のすべてのgemを更新できます。または、<THEME>
をminima
などのテーマ名に置き換えて、bundle update <THEME>
を実行して、テーマgemのみを更新することもできます。テーマ開発者が行った新しいファイルや更新(スタイルシートやインクルードなど)は、プロジェクトに自動的に取り込まれます。
gemベースのテーマの目標は、堅牢で継続的に更新されるテーマのすべての利点を、すべてのテーマファイルが邪魔になったり、主な焦点であるコンテンツの作成を過度に複雑にすることなく、すべての人に享受できるようにすることです。
テーマのデフォルトを上書きする
Jekyllのテーマは、デフォルトのデータ、レイアウト、インクルード、スタイルシートを設定します。ただし、テーマのデフォルトは、独自のサイトコンテンツで上書きできます。
テーマのレイアウトまたはインクルードを置き換えるには、変更する特定のファイルの_layouts
または_includes
ディレクトリにコピーを作成するか、上書きするファイルと同じ名前を付けてファイルを作成します。
たとえば、選択したテーマにpage
レイアウトがある場合、_layouts
ディレクトリ(つまり、_layouts/page.html
)に独自のpage
レイアウトを作成することで、テーマのレイアウトを上書きできます。
コンピューターでテーマのファイルを見つけるには
-
bundle info --path
の後にテーマのgemの名前を入力して実行します。たとえば、Jekyllのデフォルトテーマの場合はbundle info --path minima
です。これにより、gemベースのテーマファイルの場所が返されます。たとえば、Minimaテーマのファイルは、macOSでは
/usr/local/lib/ruby/gems/2.6.0/gems/minima-2.5.1
にある場合があります。 -
Finderまたはエクスプローラーでテーマのディレクトリを開く
# On MacOS open $(bundle info --path minima) # On Windows # First get the gem's installation path: # # bundle info --path minima # => C:/Ruby26-x64/lib/ruby/gems/3.1.3/gems/minima-2.5.1 # # then invoke explorer with above path, substituting `/` with `\` explorer C:\Ruby26-x64\lib\ruby\gems\3.1.3\gems\minima-2.5.1 # On Linux xdg-open $(bundle info --path minima)
Finderまたはエクスプローラーウィンドウが開き、テーマのファイルとディレクトリが表示されます。Minimaテーマgemには、これらのファイルが含まれています
. ├── LICENSE.txt ├── README.md ├── _includes │ ├── disqus_comments.html │ ├── footer.html │ ├── google-analytics.html │ ├── head.html │ ├── header.html │ ├── icon-github.html │ ├── icon-github.svg │ ├── icon-twitter.html │ └── icon-twitter.svg ├── _layouts │ ├── default.html │ ├── home.html │ ├── page.html │ └── post.html ├── _sass │ ├── minima │ │ ├── _base.scss │ │ ├── _layout.scss │ │ └── _syntax-highlighting.scss │ └── minima.scss └── assets └── main.scss
テーマのファイルが明確に理解できたら、Jekyllサイトディレクトリに同じ名前のファイルを作成することで、テーマファイルを上書きできます。
たとえば、2番目の例として、Minimaのフッターを上書きしたいとします。Jekyllサイトで、_includes
フォルダーを作成し、footer.html
という名前のファイルをそのフォルダーに追加します。Jekyllは、Minimaテーマgemのfooter.html
ファイルの代わりに、サイトのfooter.html
ファイルを使用するようになります。
スタイルシートを変更するには、メインsassファイル(Minimaテーマでは_sass/minima.scss
)をサイトのソースの_sass
ディレクトリにもコピーするという追加の手順を実行する必要があります。
Jekyllは、次のフォルダーで要求されたファイルについて、テーマのデフォルトを探す前に、まずサイトのコンテンツを探します
/assets
/_data
/_layouts
/_includes
/_sass
テーマファイルのコピーを作成すると、それらのファイルのテーマの更新を受信できなくなることに注意してください。すべてのスタイルシートでテーマの更新を引き続き取得するための代替方法は、独自の追加の、元の名前のCSSファイルで、より特異性の高いCSSセレクターを使用することです。
上書きできるファイルの詳細については、選択したテーマのドキュメントとソースリポジトリを参照してください。
_data
ディレクトリのあるテーマ4.3.0
バージョン4.3.0以降、Jekyllはテーマの_data
ディレクトリも考慮します。これにより、データをテーマ全体に配布できます。
典型的な例は、デザイン要素内で使用されるテキストです。
テーマがインクルードファイルtestimonials.html
を提供しているとします。このデザイン要素は、ページに新しいセクションを作成し、お客様の声のリストの上にh3見出しを配置します。
テーマ開発者は、おそらく見出しを英語で作成し、HTMLソースコードに直接配置します。
テーマの利用者は、インクルードファイルをプロジェクトにコピーして、見出しを置き換えることができます。
_data
ディレクトリを考慮することで、この標準タスクの別の解決策があります。
デザイナーは、テキストをデザインテンプレートに直接入力する代わりに、テキストカタログ(例:site.data.i18n.testimonials.header
)への参照を追加し、テーマのデータディレクトリに_data/i18n/testimonials.yml
ファイルを作成します。
このファイルでは、見出しはheader
キーの下に配置され、残りはJekyllが処理します。
テーマ開発者にとって、これは一見すると以前よりも大きな労力です。
ただし、テーマの利用者にとっては、カスタマイズが大幅に簡素化されます。
ドイツの顧客がテーマを使用しているとします。彼女がお客様の声のデザイン要素の翻訳された見出しを取得するには、site.data.i18n.testimonials.header
キーを使用してプロジェクトディレクトリにデータファイルを作成し、ドイツ語の翻訳または選択した見出しをその上に配置するだけで、デザイン要素はすでにカスタマイズされています。
彼女はもはやインクルードファイルをプロジェクトディレクトリにコピーしてカスタマイズする必要がなく、最も重要なことは、テーマ開発者がテキストファイルを使用してテキストモジュールを中央で変更する可能性を提供してくれたため、テーマのすべての更新を放棄する必要がなくなりました。
データファイルは高度な柔軟性を提供します。テーマ開発者がテキストモジュールを配置する場所は、テーマの利用者の場所とは異なる場合があり、予期せぬ問題が発生する可能性があります。
上記の例に関連して、テーマの_data/i18n/testimonials.yml
ファイルからの上書きキーsite.data.i18n.testimonials.header
は、コンシューマーサイトの3つの異なる場所に配置できます。
-
_data/i18n.yml
(キー:testimonials.header
) -
_data/i18n/testimonials.yml
(キー:header
)(上記の例のレイアウトを反映) -
_data/i18n/testimonials/header.yml
(キーなし、見出しはファイルに直接入力できます)
テーマ開発者は、テーマが提供するデザイン要素のテキストモジュールの設定に迷っている利用者をサポートする場合、このあいまいさを念頭に置いておく必要があります。
データ機能を使用する場合、導入するキーは、存在する場合にテーマの動作を変更するものなのか、それとも単に表示されるデータなのかを自問自答してください。テーマの動作を変更する場合は、site.config
に配置する必要があります。そうでない場合は、site.data
で提供しても問題ありません。
テーマの動作を変更するデータをバンドルすることは、**アンチパターン**と見なされ、使用は強くお勧めしません。提供されるすべてのデータが、必要に応じてテーマの利用者によって簡単に上書きできることを保証することは、テーマの作成者次第です。
gemベースのテーマを通常のテーマに変換する
gemベースのテーマを取り除き、すべてのファイルがJekyllサイトディレクトリに存在し、テーマgemには何も格納されていない通常のテーマに変換したいとします。
これを行うには、テーマgemのディレクトリからファイルをJekyllサイトディレクトリにコピーします。(たとえば、Jekyllサイトを/myblog
に作成した場合は、/myblog
にコピーします。詳細は前のセクションを参照してください。)
次に、テーマによって参照されていたプラグインについてJekyllに指示する必要があります。これらのプラグインは、テーマのgemspecファイルでランタイム依存関係として見つけることができます。たとえば、Minimaテーマを変換する場合、次のように表示される場合があります
spec.add_runtime_dependency "jekyll-feed", "~> 0.12"
spec.add_runtime_dependency "jekyll-seo-tag", "~> 2.6"
これらの参照は、次の2つの方法のいずれかでGemfile
に含める必要があります。
それぞれをGemfile
と_config.yml
の両方に個別にリストすることもできます。
# ./Gemfile
gem "jekyll-feed", "~> 0.12"
gem "jekyll-seo-tag", "~> 2.6"
# ./_config.yml
plugins:
- jekyll-feed
- jekyll-seo-tag
または、以下のように、GemfileにJekyllプラグインとして明示的にリストし、_config.yml
を更新しないこともできます。
# ./Gemfile
group :jekyll_plugins do
gem "jekyll-feed", "~> 0.12"
gem "jekyll-seo-tag", "~> 2.6"
end
いずれの場合も、bundle update
を実行することを忘れないでください。
GitHub Pagesで公開する場合は、GitHub PagesはBundler経由でプラグインを読み込まないため、_config.yml
のみを更新する必要があります。
最後に、Gemfile
と設定ファイルからテーマgemへの参照を削除します。たとえば、minima
を削除するには、
Gemfile
を開き、gem "minima", "~> 2.5"
を削除します。_config.yml
を開き、theme: minima
を削除します。
これで、bundle update
を実行しても、テーマgemの更新は取得されなくなります。
gemベースのテーマのインストール
jekyll new <PATH>
コマンドは、gemベースのテーマを使用して新しいJekyllサイトを作成する唯一の方法ではありません。オンラインでgemベースのテーマを見つけて、Jekyllプロジェクトに組み込むこともできます。
たとえば、RubyGemsでjekyll themeを検索して、他のgemベースのテーマを見つけることができます。(すべてのテーマがテーマ名にjekyll-theme
という規則を使用しているわけではないことに注意してください。)
gemベースのテーマをインストールするには
-
サイトの
Gemfile
にテーマgemを追加します。# ./Gemfile # This is an example, declare the theme gem you want to use here gem "jekyll-theme-minimal"
または、
jekyll new
コマンドで開始した場合は、gem "minima", "~> 2.0"
を目的のgemに置き換えます。例:# ./Gemfile - gem "minima", "~> 2.5" + gem "jekyll-theme-minimal"
-
テーマをインストールします。
bundle install
-
テーマを有効にするには、サイトの
_config.yml
に以下を追加します。theme: jekyll-theme-minimal
-
サイトをビルドします。
bundle exec jekyll serve
サイトのGemfile
には複数のテーマをリストできますが、サイトの_config.yml
で選択できるテーマは1つだけです。
GitHub PagesでJekyllサイトを公開する場合は、GitHub Pagesは一部のgemベースのテーマのみをサポートしていることに注意してください。GitHub Pagesは、GitHubでホストされているテーマをremote_theme
設定を使用してgemベースのテーマのように使用することもサポートしています。
gemベースのテーマの作成
Jekyllテーマの開発者(テーマの利用者ではなく)である場合は、テーマをRubyGemsにパッケージ化し、ユーザーがBundlerを介してインストールできるようにすることができます。
Ruby gemの作成に慣れていない場合でも、心配しないでください。Jekyllは、new-theme
コマンドを使用して新しいテーマのscaffoldingを支援します。テーマ名を引数としてjekyll new-theme
を実行します。
例を次に示します。
jekyll new-theme jekyll-theme-awesome
create /path/to/jekyll-theme-awesome/_layouts
create /path/to/jekyll-theme-awesome/_includes
create /path/to/jekyll-theme-awesome/_sass
create /path/to/jekyll-theme-awesome/_layouts/page.html
create /path/to/jekyll-theme-awesome/_layouts/post.html
create /path/to/jekyll-theme-awesome/_layouts/default.html
create /path/to/jekyll-theme-awesome/Gemfile
create /path/to/jekyll-theme-awesome/jekyll-theme-awesome.gemspec
create /path/to/jekyll-theme-awesome/README.md
create /path/to/jekyll-theme-awesome/LICENSE.txt
initialize /path/to/jekyll-theme-awesome/.git
create /path/to/jekyll-theme-awesome/.gitignore
Your new Jekyll theme, jekyll-theme-awesome, is ready for you in /path/to/jekyll-theme-awesome!
For help getting started, read /path/to/jekyll-theme-awesome/README.md.
対応するフォルダにテンプレートファイルを追加します。次に、必要に応じて.gemspec
ファイルとREADMEファイルを完成させます。
レイアウトとインクルード
テーマのレイアウトとインクルードは、Jekyllサイトと同じように機能します。レイアウトはテーマの/_layouts
フォルダに配置し、インクルードはテーマの/_includes
フォルダに配置します。
たとえば、テーマに/_layouts/page.html
ファイルがあり、ページのfrontmatterにlayout: page
が指定されている場合、Jekyllは最初にサイトの_layouts
フォルダでpage
レイアウトを探し、存在しない場合はテーマのpage
レイアウトを使用します。
アセット
/assets
内のファイルは、ユーザーが同じ相対パスを持つファイルを持っていない限り、ビルド時にユーザーのサイトにコピーされます。SCSS、画像、webfontなど、あらゆる種類のアセットをここに配置できます。これらのファイルは、Jekyllのページや静的ファイルのように動作します。
- ファイルの先頭にfrontmatterがある場合、レンダリングされます。
- ファイルにfrontmatterがない場合、結果のサイトにコピーされるだけです。
これにより、テーマの作成者は、レイアウトが/assets/styles.css
として依存できるデフォルトの/assets/styles.scss
ファイルを提供できます。
/assets
内のすべてのファイルは、Jekyllをサイトで使用する場合と同様に、コンパイルされたサイトの/assets
フォルダに出力されます。
スタイルシート
テーマのスタイルシートは、Jekyllサイトを作成する場合と同様に、テーマの_sass
フォルダに配置する必要があります。
_sass
└── jekyll-theme-awesome.scss
テーマのスタイルは、@import
ディレクティブを使用してユーザーのスタイルシートに含めることができます。
@import "{{ site.theme }}";
テーマgemの依存関係3.5.0
Jekyllは、サイトの設定ファイルのplugins
配列に明示的に含まれていなくても、テーマgemのホワイトリストに登録されたすべてのruntime_dependencies
を自動的に要求します。(注:ホワイトリストへの登録は、--safe
オプションを使用してビルドまたはサーブする場合にのみ必要です。)
これにより、エンドユーザーは、テーマgemが意図したとおりに動作するために設定ファイルに含める必要があるプラグインを追跡する必要がなくなります。
テーマgemの事前設定4.0
Jekyllは、テーマgemのルートにある_config.yml
を読み込み、そのデータをサイトの既存の設定データにマージします。
ただし、テーマ内からロードされる他のエンティティとは異なり、設定ファイルのロードには、以下にまとめるように、いくつかの制限があります。
- Jekyllのデフォルト設定は、テーマ設定でオーバーライドできません。それは*依然としてユーザーの責任です。*
- テーマ設定ファイルは、
safe mode
とシンボリックリンクが指すファイルがテーマgem内の正当なファイルであるかどうかに関係なく、シンボリックリンクにすることはできません。 - テーマ設定は、キーと値のペアのセットである必要があります。空の設定ファイル、キーの下に*単にアイテムをリストする*設定ファイル、または単純なテキスト文字列のみを含む設定ファイルは、単にサイレントに無視されます。ユーザーはこの不一致に関する警告やログ出力を受け取りません。
- テーマ設定で定義された設定は、ユーザーがオーバーライドできます。
この機能はテーマの導入を容易にするためのものであり、制限により、テーマ設定が懸念される方法でビルドに影響を与えることがないようにしています。テーマに必要なプラグインは、ユーザーが手動でリストするか、テーマのgemspec
ファイルで提供する必要があります。
この機能により、テーマgemは*テーマ固有の設定変数*をすぐに使用できます。
テーマのドキュメント化
テーマには、サイトの作成者がテーマをインストールして使用する方法を説明する/README.md
ファイルを含める必要があります。 どのようなレイアウトが含まれていますか? どのようなインクルードがありますか? サイトの設定ファイルに特別なものを追加する必要がありますか?
スクリーンショットの追加
テーマは視覚的です。 プログラムで取得できるように、テーマのリポジトリ内に/screenshot.png
としてスクリーンショットを含めることで、ユーザーにテーマの外観を示します。 このスクリーンショットは、テーマのドキュメントにも含めることができます。
テーマのプレビュー
テーマを作成中にプレビューするには、たとえば、/index.html
ファイルと/page.html
ファイルにダミーコンテンツを追加すると役立つ場合があります。 これにより、Jekyllサイトをプレビューする場合と同様に、jekyll build
コマンドとjekyll serve
コマンドを使用してテーマをプレビューできます。
テーマをローカルでプレビューする場合は、コンパイルされたサイトもテーマを配布するときに含まれないように、テーマの.gitignore
ファイルに/_site
を追加してください。
テーマの公開
テーマはRubyGems.orgを介して公開されます。 無料で作成できるRubyGemsアカウントが必要です。
-
まず、gitリポジトリに配置する必要があります。
git init # Only the first time git add -A git commit -m "Init commit"
-
次に、次のコマンドを実行してテーマをパッケージ化します。
jekyll-theme-awesome
をテーマの名前に置き換えます。gem build jekyll-theme-awesome.gemspec
-
最後に、次のコマンドを実行して、パッケージ化されたテーマをRubyGemsサービスにプッシュします。ここでも、
jekyll-theme-awesome
をテーマの名前に置き換えます。gem push jekyll-theme-awesome-*.gem
-
テーマの新しいバージョンをリリースするには、gemspecファイル(この例では
jekyll-theme-awesome.gemspec
)のバージョン番号を更新してから、上記のステップ1〜3を繰り返します。テーマのバージョンを更新する際は、セマンティックバージョニングに従うことをお勧めします。