
この種の問題は、テーマの見た目よりもCMS設計に起因することが多い。パーマリンク、投稿タイプ、カスタムフィールド、ユーザー権限、プラグイン、データベースの役割が整理されていない状態で開発を進めると、初期構築は完了しても運用段階で破綻する。
WordPressのCMS設計とは、テーマを制作してプラグインを追加する作業ではない。コンテンツをどの単位で管理し、誰がどこまで編集し、どのURLで公開し、将来どのように変更するかを先に決める設計作業である。
WordPressのCMS設計で最初に決めること
WordPressは、HTMLやCSS、プログラミングの専門知識がなくても、テキストや画像を登録できるCMSである。導入の容易さが強みである一方、管理画面から多くの設定を変更できるため、自由度がそのまま設計リスクになる。
サイト制作では、最初にトップページや下層ページのデザインを作り始めることが多い。しかし、CMSとして運用するなら、先にコンテンツの構造を決める必要がある。
例えば、企業サイトで次の情報を管理するとする。
- お知らせ
- 導入事例
- 商品情報
- スタッフ紹介
- 採用情報
- ブログ記事
これらをすべて通常の投稿や固定ページだけで管理すると、一覧表示や検索条件が複雑になる。逆に、すべてを個別のカスタム投稿タイプへ分割すると、管理画面の項目が増え、編集担当者が扱いにくくなる。
必要なのは、コンテンツの性質に合わせた分類である。
固定ページと投稿を分ける基準
固定ページは、会社概要、サービス紹介、問い合わせ、プライバシーポリシーなど、更新頻度が低く、階層構造を持つページに適している。
投稿は、記事一覧、ニュース、ブログ、コラムのように、追加されるたびに一覧へ並び、公開日時やカテゴリーを持つコンテンツに適している。
ただし、公開日時があるだけで投稿にする必要はない。重要なのは、運用上どのように検索され、一覧表示され、編集されるかである。
次のような判断が実務的である。
1. 同じ入力項目を持つコンテンツが繰り返し追加されるなら、投稿タイプ化を検討する。
2. 一覧ページや絞り込み検索が必要なら、独立したデータ構造を検討する。
3. ページごとに内容が大きく異なるなら、固定ページのまま管理する。
4. 編集担当者が迷う分類は作らない。
5. 将来の移行や再利用を考え、本文に直接HTMLを埋め込みすぎない。
投稿タイプを増やすこと自体が設計の高度化ではない。編集者が迷わず、開発者がデータを取得しやすい構造になっているかが基準である。
WordPressでは、管理画面に項目を増やすことより、編集者が触る項目を減らすことのほうが難しい。
カスタムフィールドは表示要件から逆算する
カスタムフィールドは、本文だけでは表現しにくい定型情報を管理するために使う。
導入事例であれば、企業名、業種、導入サービス、担当者、課題、導入効果などが該当する。商品情報であれば、価格、仕様、型番、資料ファイルなどが候補になる。
ここで避けるべきなのは、将来使うかもしれない項目を先に大量追加することである。入力項目が増えるほど、次の問題が発生する。
- 編集画面が長くなる
- 必須項目と任意項目の区別が曖昧になる
- 未入力時の表示処理が増える
- データの表記揺れが発生する
- リニューアル時に不要な項目が残る
カスタムフィールドは、データベースに値を保存するための仕組みである。表示側のテンプレートがその値をどう利用するかまで決めておく必要がある。
例えば、価格を自由入力のテキストにすると、税込表記や通貨単位、桁区切りが編集者ごとに変わる可能性がある。数値として扱うのか、表示用の文字列として扱うのかを先に決めなければならない。
同様に、日付も自由入力にすると表記が揺れる。年月日だけが必要なのか、時刻まで必要なのか。並び替えに使うのか。公開日の代替として使うのか。用途によって保存形式を分ける必要がある。
パーマリンク設計は見た目より移行性を優先する
WordPressのパーマリンクは、SEOだけでなく、サーバー移行、リダイレクト、コンテンツ管理、外部リンクの維持に影響する。
よくある失敗は、URLを細かく制御するために、プラグインや独自関数で標準機能を大きく書き換えることである。複雑なリライトルールを追加すると、ページの表示条件が増える。条件が増えれば、競合するルールも増える。
結果として、次のような障害につながる。
- 正常なページが404になる
- 管理画面から公開してもURLが生成されない
- サーバー移行後だけ404が発生する
- 特定の階層だけ403になる
- 投稿タイプごとのURLが競合する
- リダイレクトが連鎖する
パーマリンク設定では、標準機能の範囲を優先することが安全である。WordPressの管理画面で設定できる構造を基準にし、独自ルールが本当に必要かを検討する。
URL構造を決めるときの論点
URLは一度公開すると、外部サイトや検索エンジンに蓄積される。後から変更できないわけではないが、変更にはリダイレクトとリンク確認が必要になる。
設計時は、少なくとも次の項目を決めておく。
- 固定ページの階層をURLに含めるか
- 投稿タイプごとに固有のスラッグを持たせるか
- カテゴリー名をURLに含めるか
- 日付をURLに含めるか
- 日本語スラッグを許可するか
- スラッグ変更時のリダイレクトをどう扱うか
- 404ページをどのように計測するか
- 移行時に旧URLをどこへ転送するか
日付を含むURLは、ニュースや速報のように公開時点が意味を持つサイトでは有効である。一方、長期間更新するノウハウ記事では、日付を外したほうがURLを維持しやすい場合がある。
カテゴリーをURLに含める構成も同じである。カテゴリー変更が頻繁なら、URLまで変わる設計は運用コストを増やす。
403と404を同じ問題として扱わない
404は、要求されたURLに該当するリソースが見つからない状態である。スラッグの変更、投稿の削除、リライトルールの不整合などが原因になる。
403は、サーバーが要求を理解したものの、アクセスを許可しない状態である。ファイルやディレクトリの権限、サーバー設定、アクセス制御などを確認する必要がある。
WordPressのパーマリンク変更がきっかけに見えても、原因がWordPress本体とは限らない。Webサーバー、リバースプロキシ、キャッシュ、WAFなど複数の層を分けて調査する必要がある。
エラーコードを見ずに、プラグインを追加して解決しようとする方法は効率が悪い。まず、発生するURL、リクエストメソッド、ログイン状態、サーバー環境、直前に変更した設定を整理するべきである。
CMS設計書が必要な理由
CMS設計書は、開発者向けの長い技術資料に限定されない。誰が、どの画面で、どのデータを、どの権限で操作するかを共有するための仕様書である。
設計書がない案件では、開発者と運用担当者の認識がずれやすい。
開発者は「この項目は任意」と考えている。一方、運用担当者は「入力しないと公開できない項目」と考えている。この差が、公開直前に発覚する。
最低限、次の内容は文書化しておくとよい。
| 設計項目 | 決める内容 | 未定義の場合の問題 |
|---|---|---|
| コンテンツ分類 | 投稿、固定ページ、カスタム投稿タイプの使い分け | 重複登録と検索条件の複雑化 |
| 入力項目 | 必須、任意、入力形式、文字数 | 未入力時の表示崩れ |
| 公開フロー | 下書き、レビュー、公開、非公開の扱い | 誤公開と承認漏れ |
| 権限 | 編集者ごとの操作範囲 | 不要な設定変更や削除 |
| URL | スラッグ、階層、変更時の処理 | 404とリダイレクト漏れ |
| メディア | 画像形式、サイズ、保存場所 | 容量増加と表示速度低下 |
| 保守 | 更新担当、バックアップ、検証環境 | 障害時の復旧遅延 |
設計書は、開発開始前に完全な形で完成していなくてもよい。ただし、実装前に未決定の項目を明確にする必要がある。未決定のまま実装すると、後から仕様変更が発生した際に、テーマ、プラグイン、データベース、URLの複数箇所を修正することになる。
権限設計はロール名だけで終わらせない
WordPressには管理者、編集者、投稿者、寄稿者などのユーザーロールがある。しかし、ロール名を割り当てるだけでは十分ではない。
例えば、記事の編集は許可しても、カテゴリーの追加は許可しない運用がある。画像のアップロードは許可しても、プラグインの追加やテーマ編集は許可しないほうがよい。
権限は、業務単位で考えるべきである。
- 記事を作成できるか
- 他のユーザーの記事を編集できるか
- 記事を公開できるか
- メディアを削除できるか
- カテゴリーを追加できるか
- 固定ページを編集できるか
- メニューを変更できるか
- 外観設定を変更できるか
- プラグインを有効化できるか
- ユーザーを追加できるか
権限を広く付与すると、運用は一時的に簡単になる。しかし、誤操作の影響範囲も広がる。CMSは複数人が長期間使うシステムである。担当者の熟練度を前提にした権限設計は、保守性が低い。
テーマ設計はテンプレートの責務を分ける
WordPressテーマは、表示を担当する。データの登録や業務ロジックまでテーマへ集約すると、リニューアル時に問題が発生する。
テーマを変更しただけで、カスタム投稿タイプやショートコード、管理画面の入力項目が消える構成は避けるべきである。サイトのデータと表示方法は、別の責務として扱う必要がある。
テーマに置く処理
テーマに適しているのは、次のような表示に関する処理である。
- 投稿一覧の表示
- 詳細ページのレイアウト
- カスタムフィールドの出力
- ナビゲーションの表示
- パンくずリストの表示
- テンプレートごとのマークアップ
- CSSやJavaScriptの読み込み
一方、次の処理はプラグイン側へ分離するほうが安全である。
- カスタム投稿タイプの登録
- カスタムタクソノミーの登録
- データの定期処理
- 外部APIとの連携
- 独自の管理画面
- メール送信
- ユーザー権限の拡張
- 移行用のデータ処理
この分離により、テーマを変更してもコンテンツの構造を維持しやすくなる。
ただし、何でもプラグインへ切り出せばよいわけではない。小規模なサイトで、テーマ固有の表示処理しかない場合は、テーマ内で完結させたほうが構成が単純になる。
設計の基準は、将来その機能を別テーマでも使うかどうかである。再利用する機能はプラグインへ、特定テーマの見た目に依存する機能はテーマへ置く。責務を分ける基準を文書化しておくと、開発者が変わっても構成が崩れにくい。
Gutenbergと独自ブロックの選択
ブロックエディターを使う場合、編集者が自由にレイアウトを組める構成と、入力項目を限定した構成を比較する必要がある。
自由度の高いブロック構成は、短期間で多様なページを作れる。しかし、ページごとに余白、見出し、画像サイズ、ボタンの表現が変わりやすい。サイト全体の一貫性を維持するには、編集ルールが必要になる。
独自ブロックを用意すると、入力項目と出力HTMLを制御できる。表示品質は安定する。一方、ブロック数が増えすぎると、編集者が目的のブロックを探せなくなる。
独自ブロックを設計する場合は、ブロック単位を見た目ではなく意味で定義するべきである。
例えば、「青い背景の箱」ではなく、「導入効果」「関連資料」「注意事項」のように、コンテンツの意味を単位にする。色や余白はテーマ側で管理する。これにより、デザイン変更時の修正範囲を抑えられる。
プラグインは機能数ではなく依存関係で評価する
WordPressのプラグインは、短時間で機能を追加できる。これは大きな利点である。しかし、導入数が増えるほど、処理の依存関係が複雑になる。
プラグインAが登録したカスタムフィールドを、プラグインBが検索に使う。プラグインCが出力されたHTMLを変更し、キャッシュ機能がその結果を保存する。このような構成では、単一の更新が複数の機能へ影響する。
問題は、プラグインの数そのものではない。次のような依存関係が増えることである。
- 同じフックを複数のプラグインが処理する
- 同じデータを複数のプラグインが書き換える
- 同じJavaScriptやCSSを重複して読み込む
- 管理画面の保存処理に複数の検証が入る
- キャッシュの生成条件が複雑になる
- PHPやWordPress本体の更新に対応できない
プラグインを選ぶときは、機能一覧だけでなく、サイトの中核データをどこが管理するかを見る必要がある。
導入前に整理する項目
プラグインを追加する前に、次の項目を確認する。
1. WordPress本体やテーマの標準機能で代替できないか。
2. 同じ機能を持つプラグインがすでに入っていないか。
3. 保存するデータの所有者が明確か。
4. 無効化した場合にデータが残るか。
5. アンインストール時に不要なテーブルや設定が残らないか。
6. 管理画面だけで動くのか、フロントエンドでも処理が走るのか。
7. キャッシュや検索インデックスとの競合がないか。
8. 更新停止時に代替手段があるか。
特に、無効化後の挙動は見落とされやすい。プラグインを停止すると表示だけが崩れるのか、保存したデータ自体が読めなくなるのか。データの形式が独自なら、将来の移行コストが高くなる。
プラグインの追加は実装ではなく、依存関係の追加である。削除できる設計まで決めて、初めて導入と呼べる。
表示速度はプラグイン数だけで決まらない
WordPressの表示速度低下は、プラグインの過剰導入によって発生する場合がある。ただし、原因をプラグイン数だけに限定するのは正確ではない。
処理のボトルネックは、データベースクエリ、画像、外部通信、PHP処理、キャッシュ、テーマのマークアップなど複数の箇所に存在する。
例えば、一覧ページで各投稿に対して追加クエリを実行する構成では、投稿数が増えるほど処理量が増える。投稿一覧の中で関連データを個別に取得すれば、クエリ数が増加する。いわゆるN+1の問題である。
また、画像の原寸データをそのまま読み込む構成では、サーバー側の処理が軽くても、ブラウザーへの転送量が増える。表示速度を改善する場合は、フロントエンドとバックエンドを分けて計測する必要がある。
計測する対象を分ける
表示速度を確認するときは、次の層を分けて考える。
| 層 | 主な確認対象 | 代表的なボトルネック |
|---|---|---|
| ブラウザー | 描画、JavaScript、画像 | スクリプト過多、画像容量 |
| Webサーバー | 応答時間、同時処理 | PHP処理、キャッシュ未使用 |
| WordPress | フック、テンプレート、クエリ | 複雑なループ、重複処理 |
| データベース | クエリ、インデックス、保存形式 | メタ情報の検索、不要な取得 |
| 外部サービス | API、フォント、広告 | 通信待ち、障害時の遅延 |
測定せずに高速化を行うと、効果のない修正を積み重ねることになる。キャッシュを導入しても、キャッシュが無効になる条件が多ければ効果は限定される。画像を圧縮しても、サーバー側のクエリが遅ければ初期応答は改善しない。
CMS設計の段階で、どのページが動的で、どのページをキャッシュできるかを決めておくべきである。全ページを同じ方式で扱う必要はない。
通常のWordPress構成とヘッドレスCMSの比較
WordPressでは、管理画面とフロントエンドを同じシステムで運用する構成が一般的である。テーマがデータを取得し、サーバー側でHTMLを生成して返す。
一方、ヘッドレスCMSでは、WordPressをコンテンツ管理のバックエンドとして利用し、表示部分を別のフロントエンドで構築する。データの取得には、APIなどの通信方式を使う。
両者には明確なトレードオフがある。
| 比較項目 | 通常のWordPress | ヘッドレスCMS構成 |
|---|---|---|
| 初期構築 | 構成が単純で開始しやすい | フロントエンドとAPIの設計が必要 |
| 編集体験 | テーマと管理画面が直結する | 表示確認やプレビューに追加設計が必要 |
| 表示速度 | キャッシュ設計に依存する | 静的生成と相性がよい |
| SEO実装 | 標準的なテーマで対応しやすい | メタ情報や構造化データを個別実装する |
| 保守対象 | WordPress、テーマ、プラグイン | WordPress、API、フロントエンド、ビルド環境 |
| セキュリティ | 管理画面と公開画面が同一環境 | 公開面を分離しやすい |
| 開発難度 | PHP中心で完結しやすい | 複数技術の知識が必要 |
| 運用コスト | 小規模サイトでは抑えやすい | 構成管理と監視が増える |
ヘッドレスCMSは、常に優れた選択肢ではない。表示速度、複数チャネル配信、フロントエンドの自由度が重要な場合に適している。
一方、管理画面からページを編集し、すぐに公開する運用が中心なら、通常のWordPress構成のほうが適している場合が多い。ヘッドレス化によって、プレビュー、予約公開、フォーム、サイト内検索、リダイレクトなどを個別に実装する必要が生じるためである。
ヘッドレス化で増える設計項目
ヘッドレス構成では、WordPressを導入すれば完成するわけではない。少なくとも次の機能を別途設計する必要がある。
- 下書きと公開済みデータの切り替え
- 編集者向けのプレビュー
- 予約公開の反映
- 404ページ
- リダイレクト
- canonicalの出力
- メタタイトルと説明文
- XMLサイトマップ
- 構造化データ
- 画像の変換と配信
- サイト内検索
- フォーム送信
- キャッシュの無効化
- API障害時のフォールバック
フロントエンドとバックエンドを分離すると、公開面の制御や配信方式を柔軟にできる。その代わり、データの更新から画面反映までの経路が長くなる。どこでキャッシュされ、どの時点で再生成されるかを把握しなければならない。
分離によるメリットだけを見て導入すると、運用機能の不足がボトルネックになる。
SEO設計はURLとメタ情報だけではない
WordPressのSEO対策では、SEOタイトルやメタディスクリプションが注目されやすい。目安として、SEOタイトルは18〜30文字、メタディスクリプションは45〜75文字程度に収める設計が使われる。
ただし、文字数を合わせるだけではSEO設計にならない。検索結果に表示される情報と、実際のページ構造が一致している必要がある。
CMS設計では、次の情報をどこで管理するかを決める。
- SEOタイトル
- メタディスクリプション
- canonical
- OGPタイトル
- OGP説明文
- OGP画像
- noindex設定
- パンくず情報
- 構造化データ
- XMLサイトマップへの掲載可否
これらをすべて自由入力にすると、ページ間で表記が揃わない。逆に、すべて自動生成すると、重要ページに適切な説明を設定できない。
実務では、自動生成を基本にし、必要なページだけ上書きできる構成が扱いやすい。例えば、SEOタイトルが未入力ならページタイトルとサイト名から生成し、入力されている場合だけ手動値を優先する。
ただし、自動生成のルールは設計書に記載する必要がある。文字数を超えた場合に切り詰めるのか、警告だけ出すのか。タイトルと見出しが重複した場合に許容するのか。編集画面で確認できる情報を定義しておくべきである。
カテゴリーとタグを増やしすぎない
カテゴリーとタグは、検索エンジン向けの設定というより、コンテンツを管理するための分類である。
分類を増やしすぎると、次の問題が発生する。
- 似た分類が複数存在する
- 一つの記事に大量のタグが付く
- 空のアーカイブページが増える
- URLとサイト構造が複雑になる
- 編集者ごとに分類基準が変わる
カテゴリーは、サイト内の大分類として使う。タグは、複数の記事を横断して検索する必要がある場合に限定する。分類ページを検索結果へ表示するか、noindexにするかも、コンテンツ量と独自性を見て判断する。
分類は、後から整理しにくい。記事数が増えてから変更すると、URL、内部リンク、パンくず、検索結果に影響する。初期設計で完璧に予測する必要はないが、変更時の影響範囲を把握できる構造にしておく必要がある。
データベース設計で見落としやすい部分
WordPressは、投稿、固定ページ、メディア、ユーザー、コメントなどをデータベースで管理する。カスタムフィールドやプラグインの設定も、標準テーブルや追加テーブルに保存される。
CMS設計では、画面だけでなく、データがどこに保存されるかを確認する必要がある。
投稿本文に構造化されていないHTMLを大量に保存すると、別の表示形式へ変換しにくい。カスタムフィールドを増やしすぎると、データ取得や検索の設計が複雑になる。外部サービスのIDを保存する場合は、連携先が変更されたときの扱いも必要になる。
データの責務を一つにする
同じ情報を複数箇所へ保存すると、更新漏れが発生する。
例えば、商品価格を本文、カスタムフィールド、外部サービスの三箇所で管理すると、どの値が正しいのか判定できなくなる。表示側で優先順位を設定しても、運用担当者がそのルールを理解していなければ破綻する。
情報ごとに正本を決めるべきである。
- 商品名は商品データに保存する
- 価格は価格フィールドに保存する
- 説明文は本文または説明フィールドに保存する
- 外部サービスの識別子は連携用フィールドに保存する
- 表示順は専用の値で管理する
正本が決まっていれば、テンプレートは一つの場所から値を取得できる。データの二重管理も減る。
検索要件を先に確認する
WordPressの標準検索で十分なサイトもある。しかし、商品番号、地域、価格帯、複数条件、全文検索などが必要になると、検索設計は別の問題になる。
検索対象が本文だけなのか、カスタムフィールドも含むのか。公開状態や権限によって検索結果を分けるのか。検索結果の並び順は関連度か、更新日時か。これらを決めずに検索画面だけを作ると、後からデータ取得処理を作り直すことになる。
特にカスタムフィールドの検索は、保存形式と検索条件の設計に依存する。表示用の文字列として保存した値を、後から数値比較しようとすると、変換処理が必要になる。データ型を意識せずに入力欄を作ると、検索の計算量と保守コストが増える。
開発環境と本番環境を分ける
WordPressのCMS設計では、開発環境、検証環境、本番環境の差分を管理する必要がある。
本番環境で直接テーマやプラグインを編集すると、変更履歴が残らない。障害が起きたときに、どの変更が原因か特定できない。管理画面のテーマエディターでコードを修正する運用は、短期的には便利でも、継続的な開発には向かない。
Dockerを使う場合は、WordPress本体、PHP、データベース、Webサーバーの構成を開発環境で再現できる。個人開発でも、環境差分を小さくする効果がある。
ただし、コンテナ化しただけで本番と同一になるわけではない。次の差分が残る可能性がある。
- PHPのバージョン
- データベースの種類と設定
- Webサーバーのリライトルール
- ファイル権限
- メール送信方式
- キャッシュ方式
- 外部APIの接続先
- メディア保存先
- HTTPSとドメイン設定
特に、パーマリンクの問題は開発環境では再現せず、本番環境だけで発生することがある。Webサーバーの設定や書き換えルールが異なるためである。
移行前には、URLの一覧、メディア、データベース、ユーザー、フォーム、リダイレクトを確認する。データベースを移すだけでは、サイト移行は完了しない。
バックアップと更新をCMS設計に含める
WordPress本体、テーマ、プラグインは更新される。更新を止めれば、脆弱性や互換性の問題を抱える。反対に、本番環境で即時更新すれば、表示崩れや機能停止のリスクがある。
必要なのは、更新を実行する前提で検証経路を作ることである。
- 本番データを直接変更しない
- 更新前にバックアップを取得する
- 検証環境で本体とプラグインを更新する
- ログイン、投稿保存、画像アップロードを確認する
- フォーム送信とメール通知を確認する
- 主要ページの表示を確認する
- エラーログを確認する
- 問題があれば戻せる状態を維持する
バックアップは、取得するだけでは不十分である。復元できるかを確認しなければならない。データベースだけのバックアップでは、テーマやアップロードファイルを戻せない場合がある。
また、バックアップの保存先を本番サーバーだけにすると、サーバー障害時に利用できなくなる。保存先と保持期間、復元手順を決める必要がある。
よくある設計ミスを分解する
WordPressの構築で繰り返し発生する問題は、個別のバグではなく、設計判断の不足から起きている。
すべてを固定ページで作る
ページ数が少ない段階では問題にならない。しかし、同じ形式の情報が増えると、一覧表示、絞り込み、並び替え、関連表示が難しくなる。
同一構造のコンテンツが繰り返されるなら、投稿タイプやタクソノミーを検討するべきである。
すべてをカスタム投稿タイプにする
逆に、単発ページまで投稿タイプ化すると、管理画面の構造が複雑になる。編集者がどこへ入力すべきか判断できなくなる。
データの再利用性だけでなく、入力画面の理解しやすさを評価する必要がある。
テーマに業務ロジックを詰め込む
テーマを変更すると、必要なデータ構造や処理まで失われる。表示とデータ管理の責務が混ざっている状態である。
再利用する機能やサイト固有のデータ管理は、テーマから分離するほうが移行しやすい。
プラグインで問題を隠す
404、表示速度、権限、検索など、原因を調査せずにプラグインで補うと、依存関係が増える。問題が解決したように見えても、別の環境で再発する。
まず標準機能、サーバー設定、テーマ処理、データ構造を確認する。追加機能は最後に検討する。
本番環境を検証環境として使う
本番環境での直接編集は、変更履歴と再現性を失わせる。小規模サイトでも、テーマやプラグインの変更手順を決めておく必要がある。
URLを後から決める
URLはデザイン完成後に決めるものではない。投稿タイプ、階層、分類、移行方法と関連する設計要素である。
URLを後回しにすると、内部リンクやリダイレクトの修正範囲が広がる。
WordPressとヘッドレスCMSの選択基準
通常のWordPressとヘッドレスCMSのどちらを採用するかは、技術トレンドではなく、運用要件で決めるべきである。
通常のWordPressが適するのは、次のようなケースである。
- 編集者が管理画面から直接ページを作る
- PHPテーマで構成を完結させたい
- 小規模から中規模のサイトである
- プレビューと公開の流れを単純にしたい
- 運用担当者が開発者ではない
- 保守対象を増やしたくない
ヘッドレスCMSが適するのは、次のようなケースである。
- Webサイト以外にも同じコンテンツを配信する
- フロントエンドの技術要件が明確にある
- 静的生成やエッジ配信を使う必要がある
- 公開面と管理面を分離したい
- APIを中心にデータ連携する
- 複数の開発者がフロントエンドを継続運用する
ヘッドレス化は、表示部分を自由にする設計である。同時に、公開処理、プレビュー、検索、SEO、キャッシュを自分で管理する設計でもある。
構成図の見た目ではなく、障害発生時にどこを調査するのかで比較すると判断しやすい。管理画面、API、ビルド処理、CDN、フロントエンドのどこで問題が起きるかを説明できないなら、分離によるメリットをまだ活用できない可能性が高い。
CMS設計を進める順序
WordPressのCMS設計は、次の順序で進めると手戻りを抑えやすい。
1. 運用担当者と公開フローを決める
誰が入力し、誰がレビューし、誰が公開するかを決める。権限は後から追加するのではなく、業務フローから逆算する。
2. コンテンツの種類を洗い出す
固定ページ、通常投稿、カスタム投稿タイプ、メディアを分類する。同じ形式の情報を一つのデータ構造へまとめる。
3. 入力項目を定義する
必須項目、任意項目、文字数、形式、未入力時の表示を決める。自由入力を増やしすぎない。
4. URLと分類を決める
パーマリンク、スラッグ、カテゴリー、タグ、アーカイブの扱いを決める。標準機能から外れる場合は理由を記録する。
5. テーマとプラグインの責務を分ける
表示処理とデータ管理を分離する。追加するプラグインごとに、保存データと依存関係を確認する。
6. 検索とSEOの要件を決める
検索対象、並び順、メタ情報、canonical、サイトマップ、構造化データを定義する。
7. 検証と移行の手順を作る
開発環境で確認し、本番へ反映する手順を決める。バックアップと復元も含める。
8. 更新後の保守方法を決める
WordPress本体、テーマ、プラグインをいつ、どの環境で更新するかを決める。
この順序の目的は、実装を遅らせることではない。後から変更すると影響範囲が大きい項目を先に確定することである。
まとめ
WordPress・CMS設計では、見た目の完成度よりも、データ構造と運用フローの整合性が重要である。
- パーマリンクは標準機能を基準にし、無理な書き換えを避ける
- 404と403を分けて調査し、サーバーとWordPressの責務を切り分ける
- 固定ページ、投稿、カスタム投稿タイプを運用目的で使い分ける
- カスタムフィールドは表示要件とデータ型から設計する
- テーマは表示、プラグインは再利用可能な機能とデータ管理を担当する
- プラグインは機能数ではなく依存関係と削除時の挙動で評価する
- SEO情報、検索条件、URL、分類を実装前に定義する
- ヘッドレスCMSは表示面を自由にする代わりに、プレビューや検索の責務が増える
- 開発環境と本番環境を分け、更新と復元の手順を用意する
WordPressは、簡単に始められる。しかし、長期運用を前提にすると、CMSとしての構造設計が必要になる。最初に決めるべきなのは、どのテーマを使うかではない。どのデータを、誰が、どの経路で公開し、変更時にどこまで影響するかである。
この設計が明確であれば、テーマ変更、プラグイン更新、サーバー移行、ヘッドレス化の判断も可能になる。逆に、データと責務の境界が曖昧なままでは、機能を追加するほど保守コストが増える。WordPressのCMS設計は、初期開発のためだけに存在するものではない。将来の変更量を制御するための基盤である。
Related reading: WordPress・CMS設計についてよくある質問 and WordPressとヘッドレスCMSの分岐点:個人開発で選ぶべき設計と移行の実態.