「WordPressは重いし複雑…でも、HTMLを手書きするのも大変…」そんな悩みを解決するのがJekyll(ジキル)です。
Jekyllは、テキストファイルから美しいWebサイトを自動生成してくれる「静的サイトジェネレーター」という魔法のようなツール。しかも、GitHubが開発しているので、GitHub Pagesと組み合わせれば完全無料でWebサイトを公開できるんです。
データベース不要、サーバー管理不要、それなのにブログ機能も備えている。まさに、シンプルさとパワフルさを兼ね備えた理想的なツールなんですよ。
この記事では、Jekyllの基本から応用まで、プログラミング初心者でもWebサイトが作れるように詳しく解説していきます。
1. Jekyllの基本概念:静的サイトジェネレーターって何?

動的サイトと静的サイトの違い
まず、Webサイトには大きく分けて2種類あります。
動的サイト(WordPress、Drupalなど):
訪問者がアクセス
↓
サーバーがデータベースから情報を取得
↓
PHPなどでHTMLを生成
↓
ブラウザに表示
メリット:リアルタイムで更新、ユーザーごとに内容変更可能
デメリット:サーバー負荷が高い、セキュリティリスク、管理が複雑
静的サイト(Jekyllで生成):
事前にHTMLファイルを生成
↓
訪問者がアクセス
↓
HTMLファイルをそのまま配信
↓
ブラウザに表示
メリット:超高速、セキュア、管理が簡単、無料ホスティング可能
デメリット:リアルタイム更新は苦手、ユーザー認証などは別途必要
Jekyllが選ばれる5つの理由
1. 完全無料で運用可能
- GitHub Pagesで無料ホスティング
- 独自ドメインも設定可能
- SSL証明書も無料
2. 圧倒的な表示速度
- データベースアクセスなし
- 純粋なHTMLを配信
- CDNとの相性抜群
3. セキュリティが強固
- PHPやデータベースの脆弱性なし
- ハッキングのリスクが極めて低い
- 静的ファイルだけなので安全
4. Markdownで記事が書ける
- HTMLタグ不要
- シンプルな記法で執筆
- プレビューしながら編集可能
5. バージョン管理が簡単
- Gitで全履歴を管理
- 過去の状態に簡単に戻せる
- チームでの共同編集も可能
Jekyllでできること・できないこと
できること:
✓ ブログサイト構築
✓ 企業サイト作成
✓ ドキュメントサイト
✓ ポートフォリオサイト
✓ プロジェクトページ
✓ 多言語サイト
✓ RSS/Atomフィード生成
できないこと(工夫が必要):
△ コメント機能(Disqusなど外部サービス利用)
△ 検索機能(Algolia、Lunr.jsなどを追加)
△ お問い合わせフォーム(Formspreeなど利用)
△ 会員制サイト(別途認証システムが必要)
△ ECサイト(Snipcartなどと連携)
2. Jekyllのインストール:環境構築から始めよう
Windows環境でのインストール
Step 1: Rubyをインストール
Jekyllは Ruby で動作するので、まずRubyが必要です。
1. RubyInstaller for Windowsをダウンロード
https://rubyinstaller.org/
2. Ruby+Devkit版を選択(例:Ruby+Devkit 3.1.4-1)
3. インストール時の設定:
☑ Add Ruby executables to your PATH
☑ Associate .rb and .rbw files
4. インストール後、MSYS2をインストール(自動で聞かれる)
→ 1,2,3 を順番に実行
Step 2: Jekyllをインストール
コマンドプロンプトまたはPowerShellを開いて:
# Jekyllとbundlerをインストール
gem install jekyll bundler
# バージョン確認
jekyll -v
# 出力例:jekyll 4.3.2
Mac環境でのインストール
Homebrewを使った方法:
# Homebrewがない場合はインストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Rubyをインストール(macOSデフォルトのRubyは古いため)
brew install ruby
# PATHを通す
echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# Jekyllをインストール
gem install jekyll bundler
Linux環境でのインストール
Ubuntu/Debianの場合:
# 依存パッケージをインストール
sudo apt-get update
sudo apt-get install ruby-full build-essential zlib1g-dev
# gemのインストール先を設定(sudoを避けるため)
echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# Jekyllをインストール
gem install jekyll bundler
3. 最初のJekyllサイトを作ってみよう
サイトの作成と起動
新しいサイトを作成:
# サイトを作成
jekyll new my-awesome-site
# ディレクトリに移動
cd my-awesome-site
# サーバーを起動
bundle exec jekyll serve
# ブラウザでアクセス
# http://localhost:4000
たったこれだけで、ブログサイトが立ち上がります!
ディレクトリ構造を理解する
Jekyllサイトの基本構造を見てみましょう。
my-awesome-site/
├── _config.yml # サイトの設定ファイル
├── _posts/ # ブログ記事を置くフォルダ
├── _layouts/ # ページのテンプレート
├── _includes/ # 再利用可能な部品
├── _sass/ # Sassスタイルシート
├── _site/ # 生成されたサイト(触らない)
├── assets/ # CSS、JS、画像など
├── about.md # Aboutページ
├── index.md # トップページ
└── Gemfile # Rubyの依存関係
最初のブログ記事を書く
_posts フォルダに記事を作成:
ファイル名は必ず YYYY-MM-DD-タイトル.md
の形式にします。
---
layout: post
title: "私の最初のJekyll記事"
date: 2024-01-15 10:30:00 +0900
categories: jekyll ブログ
---
# こんにちは、Jekyll!
これは私の**最初の記事**です。
## Markdownで書けるから簡単
- リストも
- 簡単に
- 書ける
コードブロックもOK:
```ruby
def hello
puts "Hello, Jekyll!"
end
リンクも簡単です。
保存すると、自動的にHTMLに変換されてサイトに表示されます。
## 4. 設定ファイル(_config.yml)を使いこなす
### 基本的な設定項目
`_config.yml`はサイト全体の設定を管理する重要ファイルです。
```yaml
# サイトの基本情報
title: 私の素敵なブログ
email: your-email@example.com
description: >-
Jekyllで作った技術ブログです。
プログラミングやWebデザインについて書いています。
baseurl: "" # サブディレクトリの場合は "/blog" など
url: "https://example.com" # 本番環境のURL
# SNS情報
twitter_username: jekyllrb
github_username: jekyll
# ビルド設定
theme: minima # 使用するテーマ
plugins:
- jekyll-feed
- jekyll-seo-tag
- jekyll-sitemap
# Markdown設定
markdown: kramdown
kramdown:
input: GFM # GitHub Flavored Markdown
syntax_highlighter: rouge
# パーマリンク設定
permalink: /:year/:month/:day/:title/
# 除外ファイル
exclude:
- Gemfile
- Gemfile.lock
- node_modules
- vendor
環境ごとの設定分け
開発環境と本番環境で設定を分ける方法:
# _config.yml(共通設定)
title: My Blog
# _config_dev.yml(開発環境用)
url: "http://localhost:4000"
show_drafts: true
# 起動コマンド
# 開発環境
jekyll serve --config _config.yml,_config_dev.yml
# 本番ビルド
jekyll build --config _config.yml
5. テーマを変更してデザインをカスタマイズ

Gemベースのテーマをインストール
人気のテーマを追加:
# Gemfileに追加
gem "jekyll-theme-minimal"
gem "jekyll-theme-hacker"
gem "jekyll-theme-cayman"
# または美しいテーマ
gem "minimal-mistakes-jekyll"
# インストール
bundle install
# _config.ymlでテーマを指定
theme: minimal-mistakes-jekyll
# サーバー再起動
bundle exec jekyll serve
テーマをカスタマイズする
テーマファイルを上書き:
# テーマのファイル構造を確認
bundle info --path minimal-mistakes-jekyll
# 必要なファイルをコピーして編集
cp $(bundle info --path minima)/_layouts/default.html _layouts/
CSSをカスタマイズ:
assets/main.scss
を作成:
---
# Front matterが必要(この3行は必須)
---
// テーマのスタイルをインポート
@import "minima";
// カスタムスタイルを追加
.site-header {
background-color: #2c3e50;
.site-title {
color: #ecf0f1;
font-size: 2rem;
&:hover {
text-decoration: none;
color: #3498db;
}
}
}
// カスタムクラス
.highlight-box {
background: #f39c12;
padding: 20px;
border-radius: 10px;
margin: 20px 0;
}
リモートテーマの使用(GitHub Pages対応)
# _config.yml
# theme: minima # コメントアウト
remote_theme: mmistakes/minimal-mistakes
# プラグインに追加
plugins:
- jekyll-remote-theme
6. GitHub Pagesで無料公開する方法
GitHubリポジトリの作成
個人サイトの場合:
リポジトリ名:username.github.io
(usernameは自分のGitHubユーザー名)
URL:https://username.github.io
プロジェクトサイトの場合:
リポジトリ名:任意(例:my-blog)
URL:https://username.github.io/my-blog/
デプロイの手順
方法1:直接pushする
# Gitリポジトリを初期化
git init
git add .
git commit -m "Initial commit"
# GitHubリポジトリを追加
git remote add origin https://github.com/username/username.github.io.git
# mainブランチにpush
git branch -M main
git push -u origin main
方法2:GitHub Actionsを使う
.github/workflows/jekyll.yml
を作成:
name: Deploy Jekyll site to Pages
on:
push:
branches: ["main"]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.1'
bundler-cache: true
- name: Build with Jekyll
run: bundle exec jekyll build
env:
JEKYLL_ENV: production
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v1
カスタムドメインの設定
独自ドメインを使う:
- CNAMEファイルを作成
echo "www.example.com" > CNAME
- DNSレコードを設定
Aレコード:
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
CNAMEレコード:
www → username.github.io
7. プラグインで機能を拡張する
GitHub Pages対応プラグイン
GitHub Pagesで使える公式プラグイン:
# _config.yml
plugins:
- jekyll-feed # RSSフィード生成
- jekyll-seo-tag # SEO最適化
- jekyll-sitemap # サイトマップ生成
- jekyll-paginate # ページネーション
- jekyll-redirect-from # リダイレクト設定
- jemoji # GitHub絵文字対応
プラグインの活用例
SEO最適化(jekyll-seo-tag):
<!-- _layouts/default.html のheadタグ内 -->
{% seo %}
<!-- 記事のFront Matter -->
---
title: 記事タイトル
description: 記事の説明文
image: /assets/images/cover.jpg
author: あなたの名前
---
ページネーション(jekyll-paginate):
# _config.yml
paginate: 5
paginate_path: "/page:num/"
<!-- index.html -->
{% for post in paginator.posts %}
<article>
<h2><a href="{{ post.url }}">{{ post.title }}</a></h2>
<p>{{ post.excerpt }}</p>
</article>
{% endfor %}
<!-- ページネーションリンク -->
{% if paginator.previous_page %}
<a href="{{ paginator.previous_page_path }}">前へ</a>
{% endif %}
{% if paginator.next_page %}
<a href="{{ paginator.next_page_path }}">次へ</a>
{% endif %}
カスタムプラグインの作成
_plugins/reading_time.rb
:
module Jekyll
module ReadingTimeFilter
def reading_time(input)
words_per_minute = 200
words = input.split.size
minutes = (words / words_per_minute).ceil
"約#{minutes}分で読めます"
end
end
end
Liquid::Template.register_filter(Jekyll::ReadingTimeFilter)
使用方法:
{{ post.content | reading_time }}
8. Liquidテンプレート言語をマスター
Liquidの基本文法
変数の出力:
{{ site.title }}
{{ page.title }}
{{ post.date | date: "%Y年%m月%d日" }}
条件分岐:
{% if page.comments %}
<div class="comments">
<!-- コメント表示 -->
</div>
{% elsif page.draft %}
<p class="draft-notice">下書き</p>
{% else %}
<p>コメントはありません</p>
{% endif %}
繰り返し処理:
{% for post in site.posts limit:5 %}
<h3>{{ post.title }}</h3>
<p>{{ post.excerpt | strip_html | truncatewords: 30 }}</p>
{% endfor %}
よく使うLiquidパターン
カテゴリー別記事一覧:
{% assign categories = site.categories | sort %}
{% for category in categories %}
<h2>{{ category[0] }}</h2>
<ul>
{% for post in category[1] %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
{% endfor %}
関連記事の表示:
{% assign related_posts = site.posts | where: "category", page.category | limit: 3 %}
{% for post in related_posts %}
{% if post.url != page.url %}
<a href="{{ post.url }}">{{ post.title }}</a>
{% endif %}
{% endfor %}
インクルードファイルの活用
_includes/social-share.html
:
<div class="social-share">
<a href="https://twitter.com/intent/tweet?text={{ page.title }}&url={{ site.url }}{{ page.url }}"
target="_blank">
Twitterでシェア
</a>
<a href="https://www.facebook.com/sharer/sharer.php?u={{ site.url }}{{ page.url }}"
target="_blank">
Facebookでシェア
</a>
</div>
使用方法:
{% include social-share.html %}
9. 高度な機能と最適化テクニック
データファイルの活用
_data/members.yml
:
- name: 田中太郎
role: エンジニア
bio: フロントエンド開発が得意
avatar: tanaka.jpg
- name: 佐藤花子
role: デザイナー
bio: UI/UXデザインを担当
avatar: sato.jpg
表示方法:
{% for member in site.data.members %}
<div class="member">
<img src="/assets/images/{{ member.avatar }}" alt="{{ member.name }}">
<h3>{{ member.name }}</h3>
<p>{{ member.role }}</p>
<p>{{ member.bio }}</p>
</div>
{% endfor %}
コレクションの作成
# _config.yml
collections:
projects:
output: true
permalink: /projects/:path/
tutorials:
output: true
sort_by: difficulty
_projects/website-redesign.md
:
---
title: Webサイトリニューアル
client: ABC株式会社
date: 2024-01-01
technologies: [Jekyll, Tailwind CSS, JavaScript]
---
プロジェクトの詳細...
ビルドの最適化
増分ビルドの活用:
# 変更されたファイルのみビルド
jekyll serve --incremental
# プロファイリング
jekyll build --profile
キャッシュの活用:
# _config.yml
sass:
style: compressed
sass_dir: _sass
cache: true
# Jekyll 4.0以降
incremental: true
検索機能の実装
assets/js/search.js
:
// Simple-Jekyll-Searchの設定
SimpleJekyllSearch({
searchInput: document.getElementById('search-input'),
resultsContainer: document.getElementById('results'),
json: '/search.json',
searchResultTemplate: '<li><a href="{url}">{title}</a></li>',
noResultsText: '検索結果がありません'
})
search.json
:
---
layout: null
---
[
{% for post in site.posts %}
{
"title": "{{ post.title | escape }}",
"url": "{{ post.url }}",
"date": "{{ post.date | date: '%Y-%m-%d' }}",
"content": {{ post.content | strip_html | jsonify }}
}{% unless forloop.last %},{% endunless %}
{% endfor %}
]
10. トラブルシューティングとよくある質問
よくあるエラーと解決方法
エラー1:Dependency Error
Dependency Error: Yikes! It looks like you don't have jekyll-paginate
解決:
# Gemfileに追加
gem 'jekyll-paginate'
# インストール
bundle install
エラー2:Liquid Exception
Liquid Exception: undefined method
解決:
- 変数名のタイポをチェック
- nilチェックを追加:
{% if variable %}
エラー3:Build Warning
Build Warning: Layout 'post' requested in _posts/... does not exist.
解決:
_layouts/post.html
が存在するか確認- テーマのレイアウトファイルをチェック
パフォーマンス問題の解決
ビルド時間が長い:
# _config.yml
# 不要なファイルを除外
exclude:
- node_modules
- vendor
- .sass-cache
- Gemfile
- Gemfile.lock
- package.json
- README.md
# プラグインを最小限に
plugins:
- jekyll-feed # 必要なものだけ
サイトが重い:
<!-- 画像の遅延読み込み -->
<img src="placeholder.jpg"
data-src="actual-image.jpg"
loading="lazy"
alt="説明">
<!-- CSSの最適化 -->
<link rel="preload" href="/assets/css/main.css" as="style">
<link rel="stylesheet" href="/assets/css/main.css">
Windows特有の問題
文字化け対策:
# _config.yml
encoding: utf-8
# コマンドプロンプトで
chcp 65001
タイムゾーン問題:
# Gemfile
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw]
まとめ:Jekyllで始める新しいWeb開発
Jekyllは、シンプルさと強力さを兼ね備えた素晴らしい静的サイトジェネレーターです。
Jekyllを使いこなすための3つのステップ:
- まず基本を押さえる
- Markdownで記事を書く
- _config.ymlで設定
- GitHub Pagesで公開
- 徐々に高度な機能を追加
- テーマのカスタマイズ
- プラグインの活用
- Liquidテンプレートの習得
- 自分のニーズに合わせて拡張
- カスタムプラグイン作成
- CI/CDの構築
- 外部サービスとの連携
WordPressのような複雑さはなく、純粋なHTMLの速さと、モダンな開発体験を同時に得られるJekyll。
最初は戸惑うかもしれませんが、一度慣れてしまえば、その快適さから離れられなくなるはずです。
さあ、今すぐjekyll new
コマンドを実行して、あなただけのWebサイトを作り始めましょう!
静的サイトの新しい可能性が、きっとあなたを待っています。
コメント