← 戻る Vercel上でWordPressをホスティングする(ヘッドレス): うまくいく場合と失敗する場合 -- ラインアート挿絵

Vercel上でのWordPressのホスティング(ヘッドレス):うまくいく場合と失敗する場合

WordPress

2021年にさかのぼると、あるクライアントが私のもとに、それまで約40回は聞いたことのあるようなブリーフを持ってきました。「編集者が知っているWordPressバックエンドが欲しいが、サイトは高速である必要がある。本当に高速でね」彼らはVercelのマーケティングページでヘッドレスアーキテクチャについて何かを読んでいました。私が一言も言う前に、すでに売り込まれていました。私はそのプロジェクトを引き受け、WordPressのRESTAPIからコンテンツを取得するNext.jsフロントエンドをVercel上に構築し、本当に素晴らしいものを納品しました。Lighthouseのスコアは美しかったのです。クライアントは約3ヶ月間、それを気に入っていました。

その後、マーケティングマネージャーがポップアップフォームを追加したいと言いました。その次はメンバーシッププラグイン。その次はライブチャットで、投稿カテゴリーに紐付けられた条件付きロジック。そして徐々に、静かに、全体のセットアップがうなり始めました。

そのプロジェクトは、どのチュートリアルよりもヘッドレスWordPressの実際の制限について多くのことを教えてくれました。ですから、正直な全体像をお伝えします。

「Vercel上のヘッドレスWordPress」が実際に意味するもの

人々がこの用語を曖昧に使っているため、ここで正確にしておく価値があります。

WordPress を実行している場合(通常は別のサーバー、Kinsta や WP Engine などのマネージドホスト、あるいは安い VPS 上)、それは純粋にコンテンツ管理システムとして機能します。テーマはフロントエンドを提供しません。代わりに、Next.js(または Nuxt、Astro、SvelteKit)アプリが WordPress REST API または WPGraphQL 経由でコンテンツを取得し、Vercel がそのフロントエンドをビルドしてデプロイします。

Vercel は WordPress 自体をホストしていません。それが全てです。WordPress には PHP、データベース(MySQL)、サーバー側での実行が必要です。Vercel は Node.js のサーバーレス関数と静的ファイルを実行します。cPanel サーバーに WordPress をインストールするのと同じ方法で、Vercel に WordPress をデプロイすることはできません。

つまり、誰かが「Vercel で WordPress をホストする」と言うとき、彼らが実際に意味しているのは:Vercel でフロントエンドをホストし、WordPress は完全に別の場所で実行する、ということです。この区別は非常に重要であり、ブログ記事でこれがどのくらい頻繁に見落とされているかに驚きます。

このセットアップが本当に輝く場面

ここで公平に言いたいのは、自分が出荷した headless WordPress + Vercel プロジェクトの中には本当に誇りに思っているものがあり、アーキテクチャがその複雑さに見合う特定の条件があります。

トラフィックが多い編集系メディアサイト

Seahawk は 2022 年にスポーツメディアパブリッシャー向けのプロジェクトを行いました。1日に数万ページビュー、12 人のコンテンツチーム、WordPress から絶対に離れたくない編集者たち。Incremental Static Regeneration(ISR)を 60 秒のリバリデーションウィンドウに設定した Next.js フロントエンドを Vercel 上に構築しました。大きな試合の日、オリジン WordPress サーバーはほとんど影響を受けませんでした。Vercel のエッジネットワークはスケーリングについての会話なしにトラフィックスパイクを吸収しました。

コンテンツがバッチ単位で変更されるサイト(記事は公開されるが、2 分ごとに編集されない)では、ISR は素晴らしいフィットです。エッジで静的ファイルのパフォーマンスを得つつ、合理的に新しいコンテンツが提供されます。

フロントエンドに極度の柔軟性が必要なサイト

デザイナーがカスタムスクロールアニメーション、複雑なコンポーネント遷移、またはページの途中に埋め込まれた React ベースの対話的ツールを望んでいる場合、従来の WordPress テーマはずっとあなたと戦っています。分離したフロントエンドはその制御を開発者に完全に返します。WordPress テーマの設計上の制約は単に消え去ります。

Node/Reactエコシステムに深く根ざしている開発チーム

チームが毎日Reactアプリをリリースしており、PHPを外国語のように扱っている場合、WordPressのテーマ開発を強制するのは本当に苦痛です。ヘッドレスなら、開発チームは自分たちの世界に留まりながら、コンテンツ編集者には既に知っているツールを提供できます。適切なチームであれば、これは本当の生産性向上です。

私が実際に使っているツールスタック

今日、ヘッドレスWordPress + Vercelを使う場合、スタックはこのような感じです:

  1. WordPressホスト: KinstaまたはCloudways。どちらも管理されたMySQLバックアップを何も考えずに処理します。
  2. GraphQLレイヤー: WPGraphQLプラグイン。複雑なポストタイプに対して、REST APIよりもコンテンツクエリをはるかに簡潔にします。
  3. フロントエンドフレームワーク: Next.js。チームがApp Routerに対応していればApp Router、経験の少ない人への引き継ぎが必要ならPages Router。
  4. デプロイメント: Vercel。PRごとのプレビュープレイメントだけで導入の価値があります。
  5. オンデマンド再検証: WordPressウェブフック(カスタムプラグインまたはAdvanced Custom Fields hooks経由)がコンテンツ公開時にVercel再検証エンドポイントにping送信します。
  6. プレビューコンテンツ: @wpengine/headlessパッケージ、またはエディターが再ビルドなしで未公開投稿をプレビューできるカスタムNext.jsドラフトモード設定。

プレビュー機能についてのポイント最後の1つは、正直に認めるのが気が進まないほど長い時間がかかった。編集者はWordPressで「プレビュー」を押して、本番環境に出るものと全く同じものを見ることを期待している。デカップルされたセットアップでは、それを正しく配線するのに丸一日の作業がかかる。

うまくいかない場所(そしてうまくいかなくなる)

よし。ここは君に正直にならないといけない。ほとんどの「headlessが未来」という記事がスキップしている部分だからだ。

プラグイン。本当にたくさんのプラグイン。

WordPressの力はプラグインエコシステムから来ている。WooCommerce、Gravity Forms、メンバーシップ プラグイン、予約システム、Yoastのような高度なSEOツール(はい、Yoastは相変わらず機能するが、メタタグのフロントエンドレンダリングには追加の配線が必要)、スライダープラグイン、フロントエンドに関わるもの何でも。従来のセットアップでは、プラグインはPHPをページに直接レンダリングする。ヘッドレスセットアップでは、フロントエンドコンポーネントを明示的に構築して出力を複製していない限り、何も表示されない。

2023年後半に1人のクライアントが僕のところに来た。プロジェクト途中での相談だった(Seahawk Mediaのプロジェクトではなく、他の誰かのごたごたを引き継いだもの)。彼らは良い意図でheadlessにしてから、WooCommerceを追加しようとした。その後4ヶ月間、Reactで カスタムカートとチェックアウトフローを構築し、WooCommerceのREST APIを呼び出し、Stripeウェブフックを手動で処理し、基本的にWooCommerceが既に構築していた車輪を再発明することになった。時間コストは、従来のWordPress + WooCommerceセットアップを使用した場合のおよそ3倍だった。

ヘッドレスWooCommerceは実現可能だ。WooCommerceはREST APIについて十分に文書化している。しかし「実現可能」と「価値がある」は別の質問だ。

プレビュー体験は決して完全に一致しない

僕は今までにヘッドレスWordPressプロジェクトを6~7件納品しているが、プレビューワークフローに完全に満足したクライアントは一度もいない。WordPressで「プレビュー」を押すことと、実際にレンダリングされるものを見ることの間には常にギャップがある。ときにはドラフトモードのクッキーの問題。ときにはISRキャッシュのタイミング。従来のWordPressセットアップから来た編集者にとってそれは困惑させるものであり、不満は静かに、しかし執拗に来る。

2つのシステムを保守する

これは明らかに聞こえるかもしれませんが、チームを本当に困らせます。これで2つの独立したインフラストラクチャ上の懸念事項を管理することになります。WordPressサーバー(独自の更新、セキュリティパッチ、プラグインの競合、データベースバックアップを備えている)とVercelフロントエンド(独自のビルドパイプライン、環境変数、サーバーレス関数の制限を備えている)です。午前2時に何かが壊れたら、確認する場所は2倍になります。

Seahawkでは、WordPressプラグインが自動更新されてREST APIレスポンスの形状を静かに変更し、フロントエンドコンポーネントを壊したプロジェクトがありました。WordPressサイド側ではエラーは発生していません。ライブサイト上で単に静かなコンテンツギャップが発生しているだけです。その種の障害は、従来のWordPressエラーよりも本当にキャッチしづらいものです。

リアルタイムコンテンツは厄介

サイトのコンテンツが頻繁に変更される場合(ライブスコア、株価、ユーザー生成コメント、1分未満の鮮度が必要なもの)、ISRの再検証モデルは不向きです。古いデータを提供するか、リクエストのたびにWordPressバックエンドにヒットするかのいずれかになり、これはパフォーマンス上の議論の大部分を無効にします。

コスト:提案書に誰も記載しないもの

金銭と時間について具体的に説明します。なぜなら、これらのプロジェクトで不足入札をしている代理店を見たことがあるからです。

  • 初期ビルドのオーバーヘッド:従来のWordPressビルドと比較して、同等の複雑性で少なくとも30~40%多くの開発時間を予算化してください。そのギャップは実際です。プロジェクト全体でそれを追跡してきました。
  • Vercelの価格設定:無料のHobbyプランは商用作業には不十分です。Proは1シート月額$20で、帯域幅とサーバーレス関数の実行コストはトラフィックの多いサイトで増加します。コミットする前に数字を実行してください。
  • WordPressホスティング:まだ信頼できるマネージドホストが必要です。それはトラフィックに応じて月額$30~100の別途費用です。つまり、「安い静的ホスティング」というナラティブはすぐに崩壊します。
  • 継続的なメンテナンス:2つのプラットフォーム、2つの潜在的な問題のセット。従来のマネージドWordPressセットアップと比較して、少なくとも月額保守料の20%多く考慮してください。

実際に推奨できる場面

ここまでの説明を踏まえた上で、headless WordPress on Vercelがトレードオフに見合う具体的なシナリオを挙げます。

  • サイトはコンテンツが充実しており読み込み中心である。主に記事やランディングページで、トランザクション的なフローではない
  • コンテンツチームが既にWordPressを理解していて、CMS切り替えを検討していない
  • パフォーマンスのスケーリングが本当のビジネス要件であり、単なる「あると良い」ものではない
  • 開発チームがReactと最新のJavaScriptツーリングに対応できる
  • 概要にプラグインの複雑な依存関係がない、もしくは明確にスコープから除外されている
  • スタックの両面を理解している長期的な技術的所有者が配置されている

これらのシナリオでは反対意見を述べます。

  • クライアントがWooCommerceやプラグイン依存のフロントエンド機能を求めている
  • チームが小さく、2つのシステムの保守負荷を吸収できない
  • エディターは高速で使い慣れたプレビューワークフローが必要だが、それを正しく構築する予算がない
  • サイトがユーザーアカウント、動的パーソナライゼーション、またはリアルタイムデータ要件を持っている
  • クライアントは「最新っぽいから」という理由だけで欲しい

その最後の理由。私はそれ以上に聞く機会が多い。

最初に検討する価値のある代替案

このスタックをデフォルトにする前に、少なくともこれらの選択肢を検討すべきだ:

  • 適切なマネージドホスト上の従来型WordPress:Kinsta、Cloudways、またはRocket.netに適切なキャッシング(WP RocketまたはNginx FastCGI キャッシュ)を組み合わせれば、何も分離させずにLighthouse スコアを90点台で達成できる。分離型にしないとパフォーマンスが出ないと思い込んでいたクライアントが驚くことをよく見かける。
  • Faust.js by WP Engine:ヘッドレスWordPressのために特別に構築されており、プレビューモード、認証、ルーティングなど、本来なら自分たちで構築する多くのボイラープレートを処理する。このアーキテクチャにコミットしているなら、一見の価値がある。
  • 専用のヘッドレスCMS:実際にはWordPressのプラグインエコシステムが不要な場合、SanityやContentfulのようなものは、Vercelホストの Next.js フロントエンドにとってより洗練されたフィットかもしれない。保守すべきPHPサーバーがまったくない。

よくある質問

よくある質問

WordPressを文字通りVercelにデプロイできますか?

いいえ。WordPressはPHPとMySQLデータベースが必要です。VercelのインフラストラクチャはNode.jsサーバーレス関数と静的ファイル配信を中心に構築されています。Next.js(または他のJavaScript)フロントエンドをVercelにデプロイして、そのフロントエンドが別の場所でホストされているWordPressインスタンスからコンテンツを取得することはできます。ただし、WordPress自体は別のサーバーで動作します。

ヘッドレスWordPressはSEOに悪影響を与えますか?

本質的には与えません。ただし、不注意にセットアップすると悪影響を与える可能性があります。Next.jsではサーバーサイドレンダリングと静的生成の両方が得られ、どちらも検索エンジンが問題なくインデックスできる完全にレンダリングされたHTMLを生成します。リスク領域はメタタグの処理(Yoastの出力をフロントエンドで明示的に取得してレンダリングする必要があります)とサイトマップ生成(WordPressから取得するNext.jsの動的サイトマップルートを構築したいでしょう)です。これらが正しければSEOは問題ありません。

Vercelの無料プランはヘッドレスWordPressフロントエンドで十分ですか?

個人プロジェクトやプロトタイプであれば、おそらく十分です。商用サイトの場合は違います。HobbyプランはVercelの利用規約で商用利用を禁止しており、実際のトラフィックがあるサイトではサーバーレス関数呼び出しの制限に達します。初日からProプランの予算を組んでください。

Next.jsでWordPressプレビューモードをどのように処理しますか?

Next.jsにはDraft Mode(Pages Routerの以前のPreview Mode)が組み込まれています。パターンは以下の通りです。Next.jsで/api/previewルートを作成してプレビュークッキーを設定し、WordPressの「プレビュー」ボタンがシークレットトークンを使用してそのルートを呼び出すように設定します。クッキーが存在する場合、ページコンポーネントはキャッシュされた静的バージョンではなくWordPressから直接下書きコンテンツを取得します。WPGraphQLはドラフト投稿クエリをネイティブにサポートしているため、このパターではREST APIよりもWPGraphQLを推奨しています。

フォームやお問い合わせページについてはどうでしょう?

フォームはプラグインからヘッドレスへの移行の中でも比較的シンプルな部類です。Gravity Forms の送信は Gravity Forms REST API に直接ポストできます。もしくは WordPress フォームをスキップして、Netlify Forms (ただし Vercel を使用している場合はそちらになります) や、フロントエンド側での直接的な Formspree 統合を使用することもできます。正直なところ、フォームに関しては私は通常 Formspree を使って、午後のうちに完結させてしまいます。

---

Vercel 上の Headless WordPress は、実在するユースケースを持つ実在するアーキテクチャです。銀の弾丸でもなければ、奇をてらった手法でもありません。これを最大限に活用しているチームは、何をトレードオフとしているか明確に理解した上で、余分なビルド時間に予算を確保し、解決すべき具体的なパフォーマンスか柔軟性の問題を持っていたチームです。それがあなたのプロジェクトに当てはまるなら、試す価値があります。当てはまらないなら、複雑さは避けた方が無難です。

← 戻る