📘 技術ブログ

Jekyllを使ってMarkDownで書いたページに共通テンプレートを作成する

目次

1. はじめに

前回、GithubPagesでブログ記事をJekyllを使ってMarkDownで書いてみるでページを作成してみました。 これから記事が増えていくことを考えると、ヘッダー・フッターやCSSなどの共通部分を毎回書くのは効率が悪く、メンテナンス性も高くありません。 そこで、Jekyllの「レイアウト(テンプレート)」機能を使って、全ページのデザインを統一する方法を解説します。

2. 共通化したいところって?

ページを複数作成する際、以下の部分を共通化しておくと便利です。

  • ヘッダー: サイトタイトルやロゴを全ページ同じ場所に表示する。

  • フッター: プライバシーポリシーやお問い合わせへのリンクを統一する。

  • サイドバー: 人気ツールや全ツールへのナビゲーションを表示する。

  • デザイン: CSSを一箇所で管理し、フォントや色を全ページで統一する。

3. サイト全体の土台を作る(default.html)

まず、すべてのページの「外枠」となるHTML構造を定義します。

[ファイルパス: _layouts/default.html]

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>{{ page.title }}</title>
  <link rel="stylesheet" href="{{ site.baseurl }}/css/style.css">
</head>
<body>
  <div class="site-header">
    <a href="{{ site.baseurl }}">便利ツール集</a>
  </div>

  <div class="layout">
    <div class="main">
      {{ content }} </div>
    <aside class="sidebar">
      </aside>
  </div>

  <footer class="footer">
    </footer>
</body>
</html>

{{ content }} の部分には、ブログ記事の内容が表示されます。
default.htmlファイルを作成したら、Githubリポジトリのディレクトリにファイルをアップロードします。

4. 記事専用のレイアウトを作る(post.html)

次に、ブログ記事特有の「タイトル表示」や「日付表示」などを定義します。このレイアウトは、先ほどの default.html を継承(入れ子に)します。

[ファイルパス: _layouts/post.html]

---
layout: default     #ここで親のテンプレートを指定しています
---

<div class="blog-header">
  <span class="blog-label">📘 技術ブログ</span>
  <h1 class="blog-title">{{ page.title }}</h1>
  <p class="post-date">{{ page.date | date: "%Y-%m-%d" }}</p>
</div>

<article class="blog-content">
  {{ content }} </article>

{{ content }} の部分には、ブログ記事の内容が表示されます。
post.htmlファイルを作成したら、Githubリポジトリのディレクトリにファイルをアップロードします。

5. 記事(Markdown)からテンプレートを呼び出す

各記事ページで共通テンプレートファイルを使用する為には設定が必要となります。 各記事のファイル(.md)の冒頭で、どのレイアウトを使用するかを指定します。

[ファイルパス: _posts/2026-03-13-sample.md]

---
layout: post     #post.htmlのテンプレートを使う指定
title: "sampleページ"
date: 2026-03-13
---

## 本文
ここから記事を書き始めます。


各記事ページの.mdファイルを更新します。
すると、以下の順番でテンプレートファイルが読み込まれてブログ記事ページが表示されます。

記事ファイル更新

💡 反映されない場合は? もしも正しく反映されない場合は、記事ページ(.md ファイル)のレイアウト指定で layout: post と正しく指定されているか確認しましょう。 ここには、テンプレートファイル名のpost.htmlのpostを指定してください。