Wagtailインストールと初期設定記事カバー画像
wagtail 21 min read

【2025年最新】Python製のCMSフレームワークwagtailって何?

avatar-m-1

karrinn

著者

この記事で学べること

  • CMSの基本概念:コンテンツ管理システムとは何か、どんな役割を果たすのか
  • WordPressとWagtailの本質的な違い:提供形態と設計思想の差を理解
  • Wagtailを選ぶべき理由:柔軟性、Pythonエコシステム、StreamFieldの魅力
  • 実践的なスタート:10分でWagtailプロジェクトを立ち上げる手順

この記事の対象者

  • CMSを探している方の中でプログラミングが多少できる方
  • Pythonのフレームワーク「Django」を習得し、さらにDjangoを便利に使いたい方
  • WordPress等のCMSを使っていて不満があり情報収集している方

本記事では以下のような技術を活用していきます。これらに興味がある、または習得済みだとスムーズです。

名称バージョン概要
Python3.12主となるプログラミング言語
Django5.2系(LTS)WagtailのもとになるPythonフレームワーク
Wagtail7.1系Python製、Djangoの拡張であるCMSライブラリ。この記事の主題
uv0.8.11pythonのバージョン、パッケージ管理。もはやデファクトスタンダードになりつつある神ツール

そもそもCMSってなに?

cms

CMSとは、コンテンツ・マネジメント・システム(Content Management System)の略です。Webサイトのコンテンツ(テキスト、画像、動画など)を、専門的な知識がなくても簡単に追加・管理・更新できる仕組みのことを指します。

もっと簡単に言うと、Webサイトの「裏側」にある管理画面のようなものです。

通常、Webサイトを作るにはHTMLやCSS、JavaScriptといった専門的な言語でコードを書く必要があります。しかし、CMSを使えば、まるでブログやSNSに投稿するように、見たままの感覚で記事を作成したり、写真をアップロードしたりできます。

このシステムのおかげで、プログラマーでないマーケターや編集者でも、Webサイトの運営に直接関わることができるようになるのです。CMSは、Webサイト制作の効率を飛躍的に向上させるための重要なツールと言えるでしょう。

もっとも有名なCMS WordPress との違いは?

wagtail-vs-wordpress

CMSと聞いて、多くの人が真っ先に思い浮かべるのがWordPressではないでしょうか。全世界のWebサイトの実に40%以上がWordPressで作られていると言われています。では、WagtailとWordPressは具体的に何が違うのでしょうか?

一言で言うと、提供形態設計思想が根本的に異なります。

比較項目WordPressWagtail
提供形態完成済みのソフトウェアDjangoアプリ(フレームワーク)
主な利用者ブロガー、マーケターなどの非開発者Python/Django開発者
カスタマイズ性テーマとプラグインが圧倒的に豊富コードによる自由な設計
設計思想ブログから始まった多機能CMS開発者が作る柔軟なコンテンツ管理基盤

WordPressのメリット、デメリット

メリット

WordPressは、インストールすればすぐにブログサイトとして機能する「完成されたソフトウェア」です。

とにかく豊富なテーマ(デザインテンプレート)とプラグイン(拡張機能)があり、プログラミング知識が一切なくてもECサイトや予約サイトなど、様々な用途のWebサイトを構築できます。これは非開発者にとっては非常に大きなメリットです。

デメリット

一方で、完成されているがゆえに自由な変更には弱いです。

テーマやプラグインとして用意されているものを開発者の用意したとおりに使う分には素早くきれいにできます。逆にそれがない場合はPHP等でコーディングすることになりますが、これが非常に面倒です。

筆者はもはや諦めてテーマやプラグインが存在しなかったりイメージと違うデザインも目をつぶって使っていました。

Wagtailのメリット、デメリット

メリット

一方、Wagtailは、PythonのWebフレームワークであるDjango上で動作する「CMSフレームワーク」です。Wagtail単体ではWebサイトとして機能しません。

開発者がDjangoの知識を活かして、コンテンツの構造(モデル)から管理画面の項目、そしてサイトの見た目(フロントエンド)まで、すべてをコードで定義していきます。

その前提が全機能/インターフェースが開発されているため、自分の思い描いたデザイン、機能のWebアプリをコーディングさえ苦にならなければ完全に実現することができます。

デメリット

メリットと裏表ですが、コーディングが前提となっているCMSフレームワークですので、Pythonが大前提習得されていてプログラムをある程度できる人でないと扱うことはできません。

例えばまったく別業種の方が副業でブログなどを書いてみようといった時には絶対におすすめできません。

また、筆者は過去数回ぶちあたりましたが、特殊なユースケースではドキュメントも用意されておらず、Wagtailそのもののソースコードを読み込んで、Djangoのテンプレートオーバーライドの仕組みなどを活用して機能を実現しなければならなかった時がありました。高度で特殊な状況であればあるほど周辺フレームワークの知識も要求されます。

公式ドキュメントにある以下の一文があります。

The best user interface for a programmer is usually a programming language.

(プログラマーにとって最適なユーザーインターフェースは通常、プログラミング言語です)

このように書いてある通り、非開発者のみで使うようにはそもそも作られていないことがわかります。

Wagtailを選ぶ理由

WordPressという強力な選択肢がある中で、あえてWagtailを選ぶのには明確な理由があります。

圧倒的な柔軟性と拡張性

Wagtailの最大の魅力は、その柔軟性です。WordPressが「投稿」や「固定ページ」といった決まった型を基本とするのに対し、Wagtailでは開発者がコンテンツの構造をゼロから定義します。

例えば、「イベントページ」というコンテンツタイプを作り、それには「開催日時」「場所」「登壇者リスト」といった独自のフィールドを持たせる、といったことが自由自在です。これにより、プロジェクトの要件に完璧にフィットした、無駄のない管理画面を構築できます。

しかも自分で定義しているので、他の出来合いのCMSで起きがちだった「プラグイン入れたけどそもそもプラグインの使い方がむずい・わからない」みたいなことが起きないのが最高です。正直そういう謎時間が嫌でこれまで数回ブログ更新が止まってしまっていました。

Python/Djangoエコシステムの活用

WagtailはDjango製です。これは、すでにPythonやDjangoに慣れ親しんでいる開発者にとって、学習コストが低いという大きなメリットがあります。

また、Djangoが持つ強力なORM(Object-Relational Mapper)、堅牢なセキュリティ、豊富なサードパーティライブラリといった恩恵を余すところなく受けることができます。

そもそも最近どこを見ても1番人気のプログラミング言語であるPythonのフレームワークであるという点も非常に大きいです。加えて最近はAIの観点でもPythonは有利ですから、魅力はさらに上がりました。

洗練された管理画面

コンテンツを管理する編集者にとって、管理画面の使いやすさは非常に重要です。Wagtailは、直感的でモダンなUIを提供することに力を入れています。

特に「StreamField」という機能は画期的で、テキスト、画像、動画、引用といった様々なコンテンツブロックを、編集者が好きな順番で自由に組み合わせてページを作成できます。これにより、画一的ではない、表現力豊かなページレイアウトを実現できます。

Wagtailを使って開発などをしていて感じたことは「StreamField/StreamBlock」「StructBlock」あたりを使いこなせるようになると圧倒的に自由度が上がるということでした。

ヘッドレスCMSとしての利用

Wagtailは、伝統的なWebサイトだけでなく、管理画面(バックエンド)と表示部分(フロントエンド)を完全に分離するヘッドレスCMSとしても非常に強力です。

APIを通じてコンテンツを配信できるため、ReactやVue.jsといったモダンなJavaScriptフレームワークで作るWebサイトや、スマートフォンアプリのバックエンドとしても活用できます。

最新のWagtail7以降ではこのヘッドレスCMSのための機能が続々と開発されており、筆者はReactも使うエンジニアのため非常に期待しています。

Wagtailの得意なこと、苦手なこと

どんなツールにも向き不向きがあります。Wagtailを選ぶ前に、その特性を理解しておくことは非常に重要です。

Wagtailが得意なこと

パフォーマンスや機能、デザインに明確な希望があり妥協したくない場合はWagtailがおすすめです。

先の記載の通り、完全なカスタマイズが可能なため、思い描いたサイトデザインを完璧に実現するにはもってこいのフレームワークです。AVIFなどモダンな拡張子への対応、精密なキャッシュ戦略など、細かな要求にも歴史が長く人気言語であるPythonや周辺ライブラリの最強機能たちでスピーディーに実現することができます。

Wagtailが苦手なこと(あるいは、他の選択肢が良い場合)

こちらも先の記載の通り、開発が必須であるため「開発者じゃない」とか「デザインテーマは出来合いのものを買うから今日から書き始めたい」みたいなシーンでは選ぶべきではないです。

ちなみにこのブログも書き始めるまで2週間くらい裏側を開発して、記事を作成するごとに欲しいパーツを追加開発しながら作っています。

そういう柔軟性が魅力でもあり、プラグインが少ないデメリットでもあります。

Wagtailで作られた有名サイト事例

Wagtailは個人のプロジェクトだけでなく、世界中の名だたる企業や組織でも採用されています。そのスケーラビリティと信頼性の高さを証明する事例をいくつかご紹介します。

  • NASA (アメリカ航空宇宙局)Jet Propulsion Laboratory サイトなどでWagtailを採用しており、膨大な科学的情報を効率的に管理しています。
  • Googleblog.google をはじめ、Googleの厳格なセキュリティ基準を満たす唯一のCMSとして、多くのオフィシャルブログやサイトでWagtailを活用しています。
  • Mozilla:Firefoxブラウザで知られるMozillaの公式サイトやブログでも、Wagtailがその情報発信を支えています。
  • イギリス国民保健サービス (NHS)英国の公的な医療サービスサイトという、非常に高い信頼性とアクセシビリティが求められる大規模サイトの基盤としてもWagtailが選ばれています。

他にも公式サイトで紹介されているような様々な有名企業、組織でWagtailが採用されています。

Wagtailプロジェクトを立ち上げてみる

wagtail-setup-image

実際にWagtailのプロジェクトを始めてみます。ここではPython(uv)がインストールされている環境を前提とします。

次回以降の記事では初心者がWagtailにチャレンジできるように丁寧に解説していきますが、少なくともこのくらいのプログラミングてきなことは日常的にやりますので、身に着ける気持ちくらいは必要です。

ステップ1: 仮想環境の作成

Pythonでなにかを開発するならまずはここから。クリーンな仮想環境を作成します。

  • uv init: プロジェクトの初期化
  • uv sync: 仮想環境を作成
bash
# ディレクトリの作成
mkdir myproj
# 作成したディレクトリへ移動
cd myproj
# プロジェクトの初期化
uv init
# 仮想環境作成
uv sync

ステップ2: Wagtailのインストール

仮想環境が作成できたらwagtailをインストールします。執筆時点では7.1系が最新です。

  • uv add: パッケージを追加
  • uv pip list: インストール確認
bash
# wagtailのインストール(執筆時点最新の7.1系)
uv add "wagtail>=7.1.0,<7.2.0"
# バージョン確認
uv pip list

ステップ3: プロジェクトの作成

Wagtailのプロジェクト構造を生成します。Djangoでいうところのdjango-admin startprojectにあたります。

  • wagtail start: プロジェクト作成コマンド
  • 最後の.は現在のディレクトリを指定
bash
# 現在のディレクトリにwagtailプロジェクトを作成
uv run wagtail start myproj .

ステップ4: データベース初期化とユーザー作成

マイグレートとスーパーユーザ作成です。Djangoとまったく同じコマンドが使えます。

  • migrate: データベーステーブル作成
  • createsuperuser: 管理者アカウント作成
bash
# マイグレート
uv run manage.py migrate
# スーパーユーザ作成(任意のユーザ情報を入れて作成)
uv run manage.py createsuperuser

ステップ5: 開発サーバーの起動

サーバー起動もDjangoと同じです。ブラウザでhttp://127.0.0.1:8000にアクセスすると、Wagtailのたまごちゃんが表示されます。

  • runserver: 開発サーバー起動
  • 管理画面は/admin/でアクセス可能
bash
# 開発サーバ起動
uv run manage.py runserver
wagtailデフォルトトップページ
http://127.0.0.1:8000 - Wagtailのデフォルトトップページ(たまごちゃん)

完了! このようにDjangoプロジェクトだとロケットが飛んでいるトップページですが、Wagtailではたまごちゃんが表示されます。

これがWagtailプロジェクト作成の第一歩ですね。

筆者の場合はここから自動作成されるいらないhomeアプリ、searchアプリを消しちゃってなんやかんやの開発を始めていくのがパターン化しています。

Wagtailでのブログ開発に困ったら...

Wagtailは非常に高機能で比較的ドキュメントも充実していますが、それでも開発中に壁にぶつかることはあるでしょう。そんな時は、以下のリソースをあさってみてください。

  • 公式ドキュメント (Your First Wagtail Site): まずはここから始めるのが王道です。ブログ機能を持ったサイトを一通り作るチュートリアルが用意されており、Wagtailの基本的な考え方や開発の流れを体系的に学べます。また、各機能の紹介ページもかなり読みやすいので、最初は手間ですがドキュメントを検索しながら開発することをお勧めします。
    筆者は1年の間に公式でめちゃ便利な機能が用意されているのを見逃して無駄で冗長な実装をしてしまったことが幾度となくあります。今は猛省し、ドキュメントをくまなくチェックして実装が必要かどうかを判断するようにしています。
  • GitHub: 世界中の開発者がWagtailを使って何を作っているのか、他の人のコードから学ぶことも非常に有効です。また、公式リポジトリのIssueを覗けば、最新の議論や問題解決のヒントが見つかるかもしれません。またはWagtail自体のソースコードも参考になります。Djangoの一定の知識があれば読みやすいコードなので、筆者は正直とりあえずソースコード読みに行っちゃいます。
  • Wagtail Slack Workspace: Wagtailには活発なSlackコミュニティがあります。開発中に遭遇したエラーや、実装方法の相談など、世界中の開発者に質問することができます。

最後に

Wagtailは特にPython開発者にとって最高なツール

真面目にやっている開発者としてはアウトプットもしたい。けどWordpressとかでただ文章を書くだけは時間がもったいない。そんな気分になるかもしれません。

Wagtailならコーディングの腕を磨きながらアウトプットもできる。一石二鳥っていう魅力もあります。

是非一緒にWagtailでコンテンツを管理してみましょう!!!

関連トピック

コメント (0)

まだコメントはありません。最初のコメントを残しませんか?

コメントを投稿

メールアドレスが公開されることはありません。必須項目には * が付いています