Zola
Rust製の高速SSG。14k超のGitHubスターを持ち、Rustの性能を活かした超高速ビルドが特徴。
トレンド・動向
Rustエコシステムの成長とともに注目度上昇。シングルバイナリでの配布により環境構築が容易。
## 静的サイトジェネレータ
Zola
## 概要
ZolaはRust言語で構築された高速な静的サイトジェネレータです。14k超のGitHubスターを持ち、Rustの性能を活かした超高速ビルドが最大の特徴です。シングルバイナリでの配布により環境構築が容易で、すべての機能がビルトインされているため外部依存関係が不要です。平均的なサイトは1秒未満でビルドされ、Hugo(Go製)よりも高速な性能を誇ります。
## 詳細
Zolaは2016年から開発が開始され、当初はGutenbergという名前でした。Rustエコシステムの成長とともに注目度が上昇し、現在では最も有望な静的サイトジェネレータの一つとして評価されています。Rust言語の特性を活かし、メモリ安全性と高性能を両立しています。
テンプレートエンジンにはJinja2、Django、Liquid、Twigと類似のTeraを使用しており、学習コストが低いのが特徴です。Sassコンパイルやシンタックスハイライトなどがビルトインされているため、従来は開発環境のセットアップやJavaScriptライブラリの追加が必要だった機能も最初から利用可能です。
Zolaは完全にCommonMarkスペックに準拠しており、脚注、GitHubスタイルのテーブル、タスクリスト、取り消し線などの拡張機能も提供します。ショートコードや内部リンクなどのMarkdown拡張機能も豊富で、技術ブログから企業サイトまで幅広い用途に対応できます。
2023年の性能比較では、ZolaはHugoの4倍高速という結果も報告されており、大規模サイトでの優位性が実証されています。設定ファイルは`config.toml`一つで管理でき、シンプルかつ直感的な構成となっています。
## メリット・デメリット
### メリット
- **圧倒的な高速性**: 平均的なサイトを1秒未満でビルド、Hugoより4倍高速
- **シングルバイナリ**: 一つの実行ファイルですべての機能を提供、依存関係なし
- **ビルトイン機能**: Sass、シンタックスハイライト、検索機能などがデフォルト搭載
- **メモリ安全性**: Rustの特性により安全で信頼性の高い動作を保証
- **学習容易性**: Jinja2系のTeraテンプレートエンジンで直感的
- **環境構築の簡単さ**: インストールから実行まで最小限の手順
### デメリット
- **エコシステムの規模**: HugoやJekyllと比較してテーマやプラグインが少ない
- **コミュニティサイズ**: 相対的に小さなコミュニティのため情報が限定的
- **Rust知識の必要性**: カスタマイズや拡張にはRustの知識が必要
- **ホスティング制限**: 一部のホスティングサービスでサポートが限定的
- **デバッグ情報**: エラーメッセージがRust開発者向けで初心者には難解な場合がある
## 参考ページ
- [Zola公式サイト](https://www.getzola.org/)
- [Zola GitHub リポジトリ](https://github.com/getzola/zola)
- [Zola ドキュメント](https://www.getzola.org/documentation/)
- [Zola テーマ一覧](https://www.getzola.org/themes/)
- [Zola Jamstack](https://jamstack.org/generators/zola/)
## 書き方の例
### インストールと初期セットアップ
```bash
# macOS (Homebrew)
brew install zola
# Windows (Chocolatey)
choco install zola
# Linux (各ディストリビューション)
# Arch Linux
pacman -S zola
# Ubuntu/Debian
curl -s -L https://github.com/getzola/zola/releases/latest/download/zola-x86_64-unknown-linux-musl.tar.gz | tar -xz
sudo mv zola /usr/local/bin/
# 新しいサイトの初期化
zola init my_site
cd my_site
```
### プロジェクト作成と基本構成
```bash
# 基本的なディレクトリ構造が自動生成される
my_site/
├── config.toml # サイト設定
├── content/ # コンテンツファイル
├── static/ # 静的ファイル
├── templates/ # テンプレートファイル
├── themes/ # テーマディレクトリ
└── sass/ # Sassファイル
# 開発サーバー起動
zola serve
# 本番ビルド
zola build
```
### 基本設定ファイル(config.toml)
```toml
# サイト基本情報
base_url = "https://example.com"
title = "My Zola Site"
description = "A fast static site built with Zola"
# ビルド設定
compile_sass = true
minify_html = true
generate_feed = true
build_search_index = true
# テーマ設定
theme = "zola-minimal"
# マークダウン設定
[markdown]
highlight_code = true
highlight_theme = "base16-ocean-dark"
external_links_target_blank = true
external_links_no_follow = true
# 追加設定
[extra]
author = "Your Name"
github = "https://github.com/username"
twitter = "https://twitter.com/username"
# メニュー設定
[[extra.menu.main]]
name = "Blog"
url = "/blog/"
weight = 10
[[extra.menu.main]]
name = "About"
url = "/about/"
weight = 20
```
### テンプレートファイルの作成
```html
<!-- templates/base.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}{{ config.title }}{% endblock %}</title>
<link rel="stylesheet" href="{{ get_url(path="style.css") }}">
</head>
<body>
<header>
<nav>
{% for item in config.extra.menu.main %}
<a href="{{ item.url }}">{{ item.name }}</a>
{% endfor %}
</nav>
</header>
<main>
{% block content %}{% endblock %}
</main>
<footer>
<p>© 2025 {{ config.extra.author }}</p>
</footer>
</body>
</html>
<!-- templates/index.html -->
{% extends "base.html" %}
{% block content %}
<h1>{{ section.title }}</h1>
<div class="content">
{{ section.content | safe }}
</div>
<div class="posts">
{% for page in section.pages %}
<article>
<h2><a href="{{ page.permalink }}">{{ page.title }}</a></h2>
<p class="meta">{{ page.date | date(format="%Y-%m-%d") }}</p>
<p>{{ page.summary | safe }}</p>
</article>
{% endfor %}
</div>
{% endblock %}
```
### ショートコードとカスタマイズ
```html
<!-- templates/shortcodes/youtube.html -->
<div class="youtube-wrapper">
<iframe
width="560"
height="315"
src="https://www.youtube.com/embed/{{ id }}"
frameborder="0"
allowfullscreen>
</iframe>
</div>
<!-- templates/shortcodes/code.html -->
<div class="code-block">
<div class="code-header">
<span class="language">{{ lang | default(value="text") }}</span>
{% if filename %}
<span class="filename">{{ filename }}</span>
{% endif %}
</div>
<pre><code class="language-{{ lang | default(value="text") }}">{{ body | safe }}</code></pre>
</div>
```
### Markdown記事の作成例
```markdown
+++
title = "Zolaで高速サイトを構築する"
date = 2025-01-20
description = "Zolaを使った静的サイト構築の手順"
[taxonomies]
tags = ["zola", "rust", "ssg"]
categories = ["tutorial"]
+++
# Zolaで高速サイトを構築する
Zolaの強力な機能を活用してサイトを構築しましょう。
## ショートコード使用例
{{ youtube(id="dQw4w9WgXcQ") }}
{{ code(lang="rust", filename="main.rs") }}
fn main() {
println!("Hello, Zola!");
}
{{ end }}
## 内部リンク
詳細は[こちらの記事](@/blog/advanced-zola.md)をご覧ください。
## まとめ
Zolaは高速で使いやすいSSGです。
```
### 高度な機能とデプロイメント
```bash
# テーマのインストール
cd themes
git clone https://github.com/getzola/zola-theme-minimal.git minimal
# 本番ビルドと最適化
zola build --base-url https://mydomain.com
# Netlifyでのデプロイ設定
# netlify.toml
[build]
publish = "public"
command = "zola build"
[build.environment]
ZOLA_VERSION = "0.19.1"
# GitHub Actionsでの自動デプロイ
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Zola
uses: taiki-e/install-action@v2
with:
tool: [email protected]
- name: Build
run: zola build
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
```