PelicanとMkDocsでコンテンツをスーパーチャージする
Takashi Yamamoto
Infrastructure Engineer · Leapcell

Pythonにおける静的サイトジェネレーターの力
今日のペースの速いデジタル世界では、コンテンツ配信、特に技術ドキュメントや個人ウェブサイトにおいては、効率性、セキュリティ、保守の容易さが求められます。従来のコンテンツ管理システム(CMS)は、データベース管理、サーバーサイドスクリプティング、潜在的なセキュリティ脆弱性など、独自の複雑さを伴うことがよくあります。ここで静的サイトジェネレーター(SSG)が輝きを放ちます。これは、すべてのコンテンツを静的なHTML、CSS、JavaScriptファイルに事前にレンダリングすることで、強力な代替手段を提供します。Pythonはその豊富なエコシステムにより、この目的のための優れたツールを提供しており、特にPelicanとMkDocsが挙げられます。これらのフレームワークは、開発者がMarkdownのような使い慣れたプレーンテキスト形式をコンテンツ作成に活用できるようにし、公開ワークフローを大幅に合理化します。この記事では、PelicanとMkDocsの使用の複雑さについて掘り下げ、それらを高性能な静的ウェブサイトと包括的な技術ドキュメントの構築に効果的に活用する方法を説明します。
コアコンセプトの理解
実践的な側面に入る前に、静的サイト生成の理解に不可欠ないくつかの重要な用語を定義しましょう。
- 静的サイトジェネレーター(SSG): コンテンツ(通常はMarkdownまたはreStructuredText)、テンプレート、設定設定を取得し、それらを処理して静的なHTML、CSS、JavaScriptファイルのセットを生成するプログラム。これらのファイルは、リクエストごとにデータベースやサーバーサイドレンダリングを必要とせずに、どのWebサーバーでも提供できます。
- Markdown: プレーンテキストエディターを使用して書式設定されたテキストを作成するための軽量マークアップ言語。そのシンプルさと可読性から、ドキュメント、ブログ、一般的なコンテンツ作成に広く採用されています。
- テンプレート: 生成されたHTMLページの構造とレイアウトを定義するファイル(Python SSGではJinja2で記述されることが多い)。これにより、動的なコンテンツの挿入と、ウェブサイト全体での一貫したスタイリングが可能になります。
- テーマ: 静的ウェブサイトの視覚的な外観を決定するテンプレート、CSSスタイル、JavaScriptファイルのコレクション。テーマはカスタマイズすることも、完全に新しいものを開発することもできます。
- ソースコンテンツ: ウェブサイトまたはドキュメントの実際のテキスト、画像、その他のアセットを含む生のファイル(例:
.md
または.rst
ファイル)。 - ビルドプロセス: ソースコンテンツとテンプレートを最終的な静的ウェブサイトファイルに変換するためにSSGを実行するアクション。
静的ウェブサイトとブログのためのPelican
Pelicanは、主にブログやコンテンツ中心のウェブサイト向けに設計されたPythonベースの静的サイトジェネレーターです。reStructuredTextまたはMarkdownコンテンツを処理し、選択したテーマに準拠した静的HTMLを生成します。
Pelicanのセットアップ
まず、Pelicanをインストールします。
pip install pelican markdown
次に、pelican-quickstart
で新しいプロジェクトを作成します。
pelican-quickstart
このコマンドは、サイトを構成するための質問をいくつか表示します。たとえば:
> Where do you want to create your new web site? [.]
> What is the title of this web site? My Awesome Blog
> Who is the author of this web site? John Doe
> What is the URL prefix for this web site? (eg, http://example.com)
> Do you want to generate a fabfile/Makefile to make common tasks easy? (y/N) Y
> Do you want to specify a port to use for the development server? [8000]
> Do you want to upload your website to GitHub Pages? (y/N) N
これにより、次のようなディレクトリ構造が生成されます。
my-awesome-blog/
├── content/
│ └── (articles go here)
├── output/
├── pelicanconf.py
├── publishconf.py
└── Makefile
最初のブログ投稿の作成
content
ディレクトリ内に、たとえばmy-first-post.md
という新しいMarkdownファイルを作成します。
Title: My First Post Date: 2023-10-27 10:00 Category: Python Tags: static-site, pelican, tutorial Slug: my-first-post Author: John Doe Summary: This is the summary for my first blog post. This is the **body** of my first blog post. Pelican is a fantastic tool for creating static websites. You can use Markdown for easy content creation. Here's some Python code: ```python def hello_pelican(): print("Hello, Pelican!") hello_pelican()
上部のヘッダーは「メタデータ」と呼ばれ、Pelicanはコンテンツの整理と表示にこれを使用します。
### サイトのビルドと提供
静的ファイルを生成するには、プロジェクトディレクトリに移動して実行します。
```bash
make html
このコマンドは、コンテンツとテンプレートを処理し、生成されたHTML、CSS、その他のアセットをoutput
ディレクトリに配置します。
ローカルでサイトを表示するには、Pelicanの組み込み開発サーバーを使用できます。
make serve
次に、ブラウザを開き、http://localhost:8000
(または設定したポート)に移動します。
Pelicanによるカスタマイズとテーマ設定
Pelicanは、pelicanconf.py
ファイルを通じて広範なカスタマイズを可能にします。テーマ、プラグイン、およびさまざまな設定を指定できます。たとえば、外部テーマを使用するには:
-
テーマのダウンロード:GitHubで多くのテーマが利用可能です(例:
pelican-bootstrap3
)。 -
配置:テーマディレクトリをプロジェクトルートの
themes
フォルダに配置します。 -
pelicanconf.py
の構成:THEME = 'themes/pelican-bootstrap3'
Pelicanは、構文ハイライト、サイトマップなど、機能を拡張するための豊富なプラグインエコシステムもサポートしています。
技術ドキュメントのためのMkDocs
Pelicanはブログに優れていますが、MkDocsはプロジェクトドキュメントの構築に特化して設計されています。明確で階層的な構造を重視し、クリーンでモダンなドキュメントサイトを生成します。
MkDocsのセットアップ
MkDocsをインストールします。
pip install mkdocs mkdocs-material
mkdocs-material
は、MkDocsで人気があり、高度にカスタマイズ可能なテーマです。
新しいプロジェクトを作成します。
mkdocs new my-docs-project cd my-docs-project
これにより、docs
ディレクトリとmkdocs.yml
構成ファイルが作成されます。
my-docs-project/
├── docs/
│ └── index.md
└── mkdocs.yml
ドキュメントの作成
すべてのMarkdownドキュメントファイルはdocs
ディレクトリに配置します。index.md
ファイルは通常、プロジェクトのホームページとして機能します。
docs/index.md
を編集しましょう。
# Welcome to My Project Documentation This is the main page for my project's technical documentation. ## Getting Started To get started, follow these simple steps: 1. Install the dependencies. 2. Configure your environment. 3. Run the application. ## Further Information Check out the [Installation Guide](installation.md) for detailed instructions.
次に、別のファイルdocs/installation.md
を作成します。
# Installation Guide ## Prerequisites Ensure you have Python 3.8+ and pip installed. ## Step-by-Step Installation ```bash pip install my-project-name
Configuration
Refer to the Configuration section for details on how to set up your project.
### `mkdocs.yml`の構成
`mkdocs.yml`ファイルは、ドキュメントサイトの構造と外観の中心となります。
```yaml
site_name: My Project Docs
site_url: https://example.com/docs/
repo_url: https://github.com/your/repo
repo_name: Your Repository
edit_uri: edit/main/docs/ # for direct editing links if hosted on GitHub
theme:
name: material
features:
- navigation.tabs
- navigation.sections
- search.highlight
- content.tabs.link
- toc.integrate
palette:
# Palette toggle for light mode
- scheme: default
toggle:
icon: material/brightness-7
name: Switch to dark mode
# Palette toggle for dark mode
- scheme: slate
toggle:
icon: material/brightness-4
name: Switch to light mode
nav:
- Home: index.md
- Getting Started: installation.md
- API Reference: api_reference.md # assuming you'll add this later
nav
セクションは、ドキュメントページの階層と順序を定義するため、特に重要です。
ドキュメントの提供
ドキュメントサイトを実際に確認するには:
mkdocs serve
ブラウザでhttp://127.0.0.1:8000
を開きます。Markdownファイルまたはmkdocs.yml
を変更すると、サイトは自動的にリフレッシュされます。
MkDocsのビルドとデプロイ
デプロイ用に静的ファイルを生成するには:
mkdocs build
これにより、すべてのHTML、CSS、JavaScriptを含むsite
ディレクトリが作成されます。その後、これらのファイルを任意のWebサーバー、GitHub Pagesにアップロードしたり、NetlifyやVercelなどのサービスを使用してホストしたりできます。
PelicanまたはMkDocsを使用する理由
- パフォーマンス: 静的サイトは、各リクエストでサーバーサイド処理がないため、信じられないほど高速です。
- セキュリティ: データベースやサーバーサイドコードがないということは、攻撃ベクトルが少ないことを意味します。
- 費用対効果の高いホスティング: 静的サイトは、GitHub Pages、Netlify、Vercelなどのプラットフォームで安価に、あるいは無料でホストできます。
- バージョン管理統合: コンテンツはプレーンテキスト(Markdown)であるため、Gitのようなバージョン管理システムに最適です。
- 開発者に優しい: 使い慣れたPythonとMarkdownを活用し、既存の開発ワークフローにシームレスに統合されます。
- メンテナンス: コンテンツとコードが分離され、プレーンテキスト形式であるため、メンテナンスが容易です。
結論:Pythonの静的サイトの威力
PelicanとMkDocsは、Pythonを使用して静的ウェブサイトと技術ドキュメントを生成するための、堅牢で開発者に優しいソリューションを代表しています。コンテンツのためにMarkdownを、プレゼンテーションのために強力なテンプレートエンジンを採用することで、公開プロセスを合理化し、サイトのパフォーマンスを向上させ、セキュリティを強化し、効率的なコンテンツ配信メカニズムを求めるPython開発者にとって理想的な選択肢となります。個人ブログを構築する場合でも、包括的なプロジェクトドキュメントを構築する場合でも、これらのツールはコンテンツに命を吹き込むための柔軟性とパワーを提供します。