タグアーカイブ PHP

PHP 8.5でCannot use bool as array警告が出る原因と直し方

PHP 8.5でCannot use bool as array警告が出る原因と直し方

PHP 8.5 環境の WordPress 7.0 で「Cannot use bool as array」の警告が出るのは、oEmbed レスポンスが想定する配列ではなく false(真偽値)を返し、それを配列として処理しようとした型エラーです。コード改修に踏み切らなくても、`oembed_response_data` フィルタで安全性を担保する一時回避が有効です。

PHP 警告の原因は何か「Cannot use bool as array」

PHP 警告の原因は何か「Cannot use bool as array」

この警告は `wp-includes/embed.php` 742 行目付近、oEmbed レスポンスを iframe 埋め込みコードに加工するフィルタ処理で出ています。もともと配列が入る想定の変数に真偽値 `false` が入り、その要素にアクセスして停止するパターンです。

外部 oEmbed プロバイダへの通信失敗、エンドポイントの一時停止、クラウドや CDN 経由のキャッシュが古い応答を返した場合などに起きます。WordPress コアの型チェックがまだ強化しきれていない箇所で、PHP 8.5 の厳格な型チェックとぶつかったものです。投稿本文に貼られた Twitter / YouTube / Vimeo 等の埋め込みが読み込まれるたびに断続的に発生します。

なぜ PHP 8.5 で特に出やすいのか

PHP 8.0 以降、型の不一致に対する警告やエラーが段階的に強化されています。8.5 では false 値を直接配列の添字アクセスに使おうとすると通らなくなり、今回のような「発生条件がまれで、一度に複数回出る」断続的な警告になります。

エラー箇所をサーバーエラーログで特定する手順

コード編集せずに一時回避する方法

まずログを正確に把握します。レンタルサーバーの管理画面やコントロールパネルから PHP エラーログを確認しましょう。ログには `/wp-includes/embed.php` の行番号と `Cannot use bool as array` の文言が残っています。

エラーログの外観イメージ(Before / After 比較)
Before
PHP Warning: Cannot use bool as array in …/wp-includes/embed.php on line 742
After(特定後)
oembed_response_data フィルタ原因を特定 → 一時回避策を適用

上のデモはエラーログに現れる典型的な記録と、原因特定後の流れを示しています。ログ内で同じ秒に 3 回出現したという報告もあるように、1 件の埋め込みが複数のインスタンスを生む場合があります。

コード編集せずに一時回避する方法

今すぐ警告を止めたい場合は、テーマの functions.php やサイト専用のプラグインに以下の `add_filter` を追加します。これは oEmbed レスポンス加工の入り口で変数が配列であることを確かめ、配列でなければ空の配列を返す安全策です。

add_filter( 'oembed_response_data', function( $data ) {
    if ( ! is_array( $data ) ) {
        $data = array();
    }
    return $data;
}, 0 );

上記はコアファイルを触らず、フィルタ段階で致命的な型エラーを封じます。本来 WordPress が返すはずの埋め込みは表示されませんが、警告の発生そのものは止まり、画面の上部にエラー文言が出る状況を解消できます。

functions.php に記述する際の注意

  • 子テーマの functions.php に必ず追記する(親テーマ直編集は更新で消える)
  • コードスニペット系プラグイン(WPCode 等)を使うと管理が楽になる
  • 記述後はサーバーの OPCache やプラグインキャッシュをクリアする

根本対応としての oEmbed プロバイダ見直し

外部 oEmbed の呼び出しに失敗している場合、根本的には該当 URL が貼られた投稿を編集し埋め込み形式を変えるのが一番です。エンドポイントが停止したサービスや、TLS 設定が古いプロバイダを指しているときにも警告が出ます。

特定の URL パターンだけ埋め込みを無効化したい場合は、`oembed_discovery_links` フィルタやキャッシュ期間を変える方法も検討できます。社内のプライベートクラウド上にある独自メディアサーバーを oEmbed で呼んでいる場合などは、ネットワーク設定や HTTP タイムアウトの調整も必要です。

よくある質問

コアファイルを直接修正してもよいのか

コアの embed.php を修正するとアップデートで上書きされるため、現実的ではありません。どうしても早期にパッチしたい場合も、WordPress コアの Trac に報告する形が安全です。上書きリスクを避けるため、必ずフィルタで対処しましょう。

警告は出ているが埋め込みは見えている場合の対処は

画面に埋め込みは表示されるがデバッグログだけ警告が出る状態なら、前述の `is_array()` チェックを入れたフィルタでログ汚染を防げます。ただし埋め込みが正しく機能しているなら、根本原因(特定の URL の一時的応答失敗)が解消されるのを待つだけでも構いません。

PHP 7.x に戻すのは対策になるか

PHP のバージョンを下げると表面的に警告が消える可能性はありますが、セキュリティ面で大きなリスクがあります。PHP 8.5 環境のままで、WordPress とプラグインを最新に保ちながらフィルタで予防する方向が安全です。

WordPress 7.0 のアップデートでこのエラーが起きた可能性は

WP 7.0 固有の不具合というより、PHP 8.5 との組み合わせで型チェックが厳しくなった影響です。特に大きなリファクタリングが行われたコア部分で、今まで隠れていた型不一致が警告として顕在化している状況です。

埋め込みをすべて無効にする設定はあるか

完全に oEmbed 機能を止めるには `remove_action` で関連フックを外す方法もあります。ただし、既存の埋め込み投稿の見栄えが大きく変わるため、テスト環境で事前検証する必要があります。

この記事のポイント

  • PHP 8.5 と WP 7.0 の型不一致が原因で oEmbed 処理中に「Cannot use bool as array」警告が発生する
  • 即効の回避策は `oembed_response_data` フィルタで `is_array()` チェックを追加すること
  • コアファイルの直接修正は避け、子テーマの functions.php または専用プラグインで管理する
  • 外部 oEmbed プロバイダの応答エラーが根本原因の場合、該当 URL の見直しやキャッシュ設定の再考も検討する
WooCommerce 10.9でデュアルAPI登場、PHPコードからGraphQLを自動生成

WooCommerce 10.9でデュアルAPI登場、PHPコードからGraphQLを自動生成

WooCommerce 10.9で、PHPコードからGraphQL APIを自動生成する「デュアルAPI」が実験的に導入された。AutomatticのRadical Speed Monthイニシアチブの一環として開発されたこの機能は、開発者がPHPクラスに属性(アトリビュート)を付与するだけで、REST APIとGraphQL APIの両方を提供できるようにするものだ。

本記事では、デュアルAPIの技術的な仕組みと、プラグイン開発者にとっての具体的なメリット、現時点での制限と注意点を詳しく解説する。PHP 8.1以上が必須となるため、サーバー環境のバージョンアップを検討している運営者にも役立つ情報をまとめた。

WooCommerceデュアルAPIの概要と狙い

WooCommerceデュアルAPIの概要と狙い

デュアルAPIの3つの構成要素

WooCommerce Developer Blogの記事によれば、デュアルAPIは大きく3つのパーツで成り立っている。1つ目は、PHP属性で装飾されたプレーンなPHPクラスで表現される「コードAPI」だ。これはコマンドパターンで実行可能なクラスか、データ転送オブジェクト(DTO)として定義される。2つ目は、そのコードAPIから自動生成される「GraphQL API」。そして3つ目が、開発時にコードからGraphQLパートを生成する「ビルドスクリプト」である。

なぜGraphQL APIを自動生成するのか

従来のWooCommerce REST APIは、決められたエンドポイントから必要なデータを取得する方式だった。一方、GraphQLはクライアントが必要なフィールドだけをリクエストできるため、オーバーフェッチやアンダーフェッチを防げる。モバイルアプリやヘッドレスコマース構成との相性も良い。しかし、APIを二重にメンテナンスする手間は大きい。そこで、PHPコードを信頼できる唯一の情報源(ソースオブトゥルース)とし、GraphQL側を自動生成することで、開発効率と一貫性を両立させる狙いがある。

コードからGraphQLを自動生成する仕組み

PHPコードAPI(コマンドクラス+DTO)
#[Name(‘coupon’)]
class GetCoupon {
public function execute(…): ?Coupon { … }
}
DTO Coupon には、code・amount・discount_type などのプロパティが定義されている
↓ ビルドスクリプトによる自動生成 ↓
GraphQL API(自動生成されたクエリ)
query {
coupon(id: 123) {
code
amount
discountType
}
}

PHPクラスに定義した属性や型情報が、GraphQLスキーマのクエリ名、引数、返却型へと自動的にマッピングされる。開発者はPHPコードだけを書けば、対応するGraphQLエンドポイントが手に入る仕組みだ。

PHP属性によるメタデータの付与

この仕組みの中核が、PHP 8.0で導入された「属性(アトリビュート)」だ。クラスやメソッド、プロパティに #[Name('coupon')]#[Description('...')] といった形でメタデータを埋め込める。このメタデータをビルドスクリプトが読み取り、GraphQLの型定義やドキュメントを自動構築する。PHPのコードベースがそのままAPIの仕様書になるわけだ。

コマンドクラスとDTOの変換ルール

実行可能なコマンドクラスはGraphQLのクエリやミューテーションに変換される。引数には #[Description] 属性付きで説明がつき、デフォルト値やnull許容もスキーマに反映される。DTOはGraphQLのインプットタイプやアウトプットタイプになる。PHPの列挙型(enum)や #[ArrayOf('int')] のようなカスタム属性を使えば、スカラー型の配列や独自型も正確に表現できる。

ビルドスクリプトの役割

ビルドスクリプトは開発時に一度だけ実行する。WooCommerceコアに同梱されており、プラグイン開発者も自分のコードに対して実行可能だ。スクリプトがコードAPIを解析し、GraphQLスキーマをファイルとして出力する。実行時にはそのスキーマに従ってリクエストが処理されるため、本番環境で毎回コードを解析する必要はない。

プラグイン開発におけるデュアルAPIの活用方法

プラグイン開発におけるデュアルAPIの活用方法

独自のデュアルAPIを作成する手順

WooCommerce Developer Blogの記事では、プラグイン開発者がこのインフラを再利用して独自のデュアルAPIを構築できる点が強調されている。手順はシンプルだ。まず、プラグイン内にコマンドクラスとDTOを定義し、必要な属性を付与する。次に、WooCommerceのビルドスクリプトを開発時に走らせると、GraphQLパートが自動生成される。最後に rest_api_init フックを使い、ユーティリティメソッドで任意のエンドポイントURLにGraphQL APIを登録すれば完了する。

認証・認可のカスタマイズと拡張ポイント

コアのインフラは、クラスリゾルバ(デフォルトではWooCommerceのDIコンテナ)や、認証用のプリンシパルクラス、認可用の #[RequiredCapability] 属性を提供している。これらはそのまま使うことも、独自の認証・認可ロジックに置き換えることも可能だ。例えば、外部サービスと連携するプラグインであれば、カスタムのプリンシパルクラスを差し込んでAPIキー認証を実装できる。柔軟な拡張性が意識された設計である。

現時点での制限と実験的機能の注意点

現時点での制限と実験的機能の注意点

後方互換性の保証がない理由

このデュアルAPIは実験的な機能であり、明示的に有効化しない限り動作しない。WooCommerce Developer Blogの記事でも、インフラ部分とコアAPIのいずれについても、将来のリリースで後方互換性のない変更が加えられる可能性があると明言されている。特に、より徹底したテストの過程で、属性の命名規則やクラス構成に破壊的変更が入るかもしれない。本番環境への導入は、安定版となるまで控えたほうが無難だ。

コアAPIのプルーフオブコンセプト

WooCommerce 10.9に同梱されるコアAPIは、製品とクーポンをカバーする限定的なものだ。記事では、これはあくまで「プルーフオブコンセプト(概念実証)」であり、今後のバージョンでクラスやクエリが大幅に変更されるか、まったく別のものに置き換わる可能性があるとされている。現時点では、開発環境やステージング環境でのテスト利用が推奨される。

PHP 7環境の安全性とバージョンアップの必要性

PHP 7環境の安全性とバージョンアップの必要性

PHP 8.1依存の技術的理由

デュアルAPIはPHP 8.1以上を要求する。これは、PHP属性と列挙型(enum)に依存しているためだ。属性がなければGraphQLスキーマを自動生成できず、enumがなければDTOの厳密な型表現が難しくなる。WooCommerceとしても、公式にPHP 8.1以上を推奨しており、PHP 7.4や8.0のサポートは将来的に終了する方針が示されている。

PHP 7環境での影響と注意点

WooCommerce Developer Blogの記事によると、PHP 8.1固有のコードは、この機能が無効の場合やサーバーがPHP 7.4/8.0で動作している場合には一切実行されない設計になっている。したがって、機能を誤って有効化しようとしてもエラーは発生せず、GraphQLエンドポイントが機能しないだけだ。ただし、プラグインやカスタムコードから src/Api 配下のクラスを直接呼び出すと、PHP 7環境ではエラーになるため注意が必要である。

将来のPHPバージョンサポート計画

WooCommerceは過去にPHP 7.2/7.3のサポートを段階的に終了してきた。今回のデュアルAPI導入は、PHP 8.1移行を加速させる呼び水となるだろう。WordPress 7.0がPHP 7.2/7.3のサポートを打ち切り、PHP 8互換がベータを脱したことも追い風だ。ECサイト運営者は、セキュリティ面とパフォーマンス面からも、早めのPHPバージョンアップを検討すべき局面を迎えている。

この記事のポイント

  • WooCommerce 10.9で実験的デュアルAPIが導入され、PHPコードからGraphQL APIを自動生成できるようになった
  • PHP属性とDTOによってコードがAPI仕様を兼ね、プラグイン開発者も独自のデュアルAPIを構築可能
  • 現時点では後方互換性が保証されない実験的機能であり、本番利用は避け、テスト環境での検証が推奨される
  • PHP 8.1以上が必須で、PHP 7環境では機能が無効化されるが、安全面でのリスクは低い
  • PHPバージョンアップの必要性が高まっており、ECサイトの将来的な安定稼働に向けて計画的な移行が望ましい
WordPress開発の転換点:PHPのみでGutenbergブロックを構築する方法

WordPress開発の転換点:PHPのみでGutenbergブロックを構築する方法

WordPressのブロックエディタ(Gutenberg)が登場して以来、カスタムブロックの開発にはReactやNode.jsといったJavaScriptベースの技術習得が不可欠だった。しかし、最新のアップデートにより、PHPコードのみでブロックを構築・管理できる手法が確立された。この変更は、従来のPHP中心のWordPress開発者にとって、学習コストを劇的に下げる重要な転換点となる。

Gutenberg 21.8以降で導入されたこの機能により、サーバーサイドのJavaScript環境を構築することなく、PHPの関数だけでエディタとフロントエンドの両方にブロックを表示できる。ビルドプロセスの複雑さを排除し、保守性の高いサイト制作を可能にするのが「PHP-onlyブロック」だ。

本記事では、PHPのみでブロックを登録する具体的な手順から、管理画面UIの自動生成、さらには既存のショートコードをブロック化する実践的なテクニックまでを詳しく解説する。この記事を読むことで、最新のWordPress標準に準拠した効率的な開発手法を習得できるはずだ。

PHP-onlyブロックの概要と導入のメリット

PHP-onlyブロックの概要と導入のメリット

これまで、カスタムブロックを作成するには、Reactの知識に加え、WebpackやNPM(Node Package Manager)を用いたビルド環境の構築が必須であった。これは、主にサーバーサイドのPHPでサイトを構築してきた開発者にとって、非常に高い参入障壁となっていた。PHP-onlyブロックは、この障壁を取り払うために設計された仕組みだ。

なぜPHPだけでブロックが作れるようになったのか

WordPress開発チームは、ブロックエディタの普及をさらに加速させるため、従来のPHP開発者が慣れ親しんだ手法でブロックを作成できる環境を整えた。具体的には、サーバー側で登録されたメタデータをエディタ(JavaScript側)へ自動的に受け渡す「auto_register」機能が実装されたことが大きい。これにより、エディタ用のJSファイルを手動で記述する必要がなくなったのだ。

開発者にとっての3つの主要な利点

第一の利点は、学習コストの圧倒的な低減だ。ReactやNode.jsの複雑なエコシステムを学ぶ時間を、サイトの機能向上やデザインのブラッシュアップに充てることができる。第二に、フロントエンドのパフォーマンス向上が挙げられる。不要なJavaScriptの読み込みを削減できるため、ページの読み込み速度を最適化しやすい。第三に、保守性の向上だ。PHPコード一箇所でブロックの定義と出力(レンダリング)を管理できるため、コードの可読性が高まり、バグの混入を防ぎやすくなる。

基本的なPHP-onlyブロックの作り方

基本的なPHP-onlyブロックの作り方

PHP-onlyブロックの作成は、従来の「動的ブロック(Dynamic Blocks)」の登録方法と似ているが、最大の違いはエディタ用のスクリプトを指定せずに、特定のフラグを有効にする点にある。元記事の著者は、最小限のコードでブロックを動作させる手法を示している。

register_block_type と auto_register の役割

ブロックの登録には、WordPress標準の `register_block_type` 関数を使用する。この関数の `supports` 配列内に `’auto_register’ => true` を含めることが、PHP-onlyブロックとして動作させるための鍵となる。このフラグが有効な場合、WordPressは `ServerSideRender` というコンポーネントを自動的に使用し、管理画面上でもPHPで生成されたHTMLをプレビュー表示する。

最小構成のコード例

以下は、プラグインやテーマの `functions.php` に記述することで動作する、最もシンプルなPHP-onlyブロックのコードだ。

/**
 * レンダリング用コールバック関数
 */
function my_simple_php_block_render( $attributes ) {
    return '<div style="padding: 20px; background: #f0f0f0; border: 2px solid #0073aa;">
        <h3>🚀 PHP-only ブロック</h3>
        <p>このブロックはPHPのみで生成されています。</p>
    </div>';
}

/**
 * ブロックの登録
 */
add_action( 'init', function() {
    register_block_type( 'my-custom/php-block', array(
        'title'           => 'シンプルなPHPブロック',
        'icon'            => 'admin-plugins',
        'category'        => 'text',
        'render_callback' => 'my_simple_php_block_render',
        'supports'        => array(
            'auto_register' => true,
        ),
    ) );
});

🚀 PHP-only ブロック

このブロックはPHPのみで生成されています。

このコードを有効にすると、ブロックエディタの追加メニューに「シンプルなPHPブロック」が表示され、設置すると即座にグレーの枠線で囲まれたプレビューが表示される。これがPHP-only開発の第一歩だ。

属性(Attributes)を活用した管理画面UIの自動生成

属性(Attributes)を活用した管理画面UIの自動生成

単にHTMLを出力するだけでなく、ユーザーがエディタ上でテキストを変更したり、オプションを選択したりできるようにするには「属性(Attributes)」を定義する必要がある。最新のGutenbergでは、PHPで定義した属性に基づいて、サイドパネル(インスペクター)の入力フィールドを自動生成する機能が追加されている。

属性の定義と入力フィールドの対応関係

属性のデータ型(type)を指定することで、WordPressは適切なUIコンポーネントを割り当てる。著者によれば、現在のところ以下のマッピングがサポートされている。

  • string: テキスト入力フィールド
  • number / integer: 数値入力フィールド
  • boolean: チェックボックス(またはトグル)
  • enum(string内): セレクトボックス(ドロップダウン)

実践的な属性付きブロックのコード

以下の例では、タイトル、表示数、有効/無効の切り替え、サイズ選択の4つの属性を持つブロックを定義している。これらはすべて、JavaScriptを一行も書かずに管理画面のサイドバーに表示される。

register_block_type( 'my-plugin/advanced-php-block', array(
    'title'      => '設定付きPHPブロック',
    'attributes' => array(
        'blockTitle'  => array( 'type' => 'string', 'default' => 'デフォルトタイトル' ),
        'itemCount'   => array( 'type' => 'integer', 'default' => 5 ),
        'isEnabled'   => array( 'type' => 'boolean', 'default' => true ),
        'displaySize' => array(
            'type' => 'string',
            'enum' => array( 'small', 'medium', 'large' ),
            'default' => 'medium',
        ),
    ),
    'render_callback' => 'my_advanced_render_func',
    'supports' => array( 'auto_register' => true ),
) );

この仕組みの導入により、複雑なReactコンポーネント(TextControlやSelectControlなど)を組み合わせて `edit.js` を作成する手間が省ける。ただし、現時点ではリッチテキストエディタ(RichText)や高度なカラーピッカーなど、一部の複雑なコントロールはJS側での定義が必要な場合がある点には注意が必要だ。

実践例:カスタマイズ可能な価格表ブロックの構築

実践例:カスタマイズ可能な価格表ブロックの構築

より実用的な例として、Web制作の現場で頻繁に求められる「価格表(料金テーブル)」ブロックをPHPのみで作成する手法を解説する。ここでは、WordPress標準のスタイル機能(色、間隔、タイポグラフィ)を統合する方法が重要となる。

get_block_wrapper_attributes によるネイティブ機能の統合

PHP-onlyブロックで最も強力な武器となるのが `get_block_wrapper_attributes()` 関数だ。この関数は、ユーザーがエディタのサイドバーで設定した背景色、文字色、パディング、マージンなどのスタイル情報をクラス名やインラインスタイルとして一括生成してくれる。これをメインの `div` タグに出力するだけで、自作ブロックがWordPressの標準デザインツールに完全対応する。

価格表ブロックのレンダリング設計

著者が提案する「Smart Pricing Widget」の例では、プラン名、価格、ボタンテキストなどの属性に加え、`supports` 配列で `color`, `spacing`, `typography`, `shadow`, `border` を有効にしている。これにより、エンジニアがCSSを細かく調整しなくても、運用者がエディタ上で自由に見た目をカスタマイズできるようになる。

function render_smart_pricing_block( $attributes ) {
    // 属性の取得
    $plan_name = esc_html( $attributes['planName'] );
    $price     = intval( $attributes['price'] );
    
    // スタイル属性の生成
    $wrapper_attributes = get_block_wrapper_attributes( array(
        'class' => 'my-pricing-card',
    ) );

    return sprintf(
        '<div %s>
            <h3>%s</h3>
            <div class="price">¥%d</div>
            <a href="#" class="btn">申し込む</a>
        </div>',
        $wrapper_attributes,
        $plan_name,
        $price
    );
}

プロフェッショナル

¥4,900
申し込む

PHPのみで作成され、エディタの色設定が反映される価格表ブロックのイメージ

既存のショートコードをブロックへ変換する方法

既存のショートコードをブロックへ変換する方法

PHP-onlyブロックの最も現実的かつ即効性のある活用シーンは、古いサイトで多用されている「ショートコード」のブロック化だ。ショートコードは入力が煩雑でプレビューも困難だが、PHP-onlyブロックでラップすることで、直感的な操作感へとアップグレードできる。

ショートコードをラップするメリット

ショートコードをそのまま使い続けるのではなく、ブロックとして再定義することで、ユーザーは「`[my_shortcode type=”info”]`」のような文字列を打ち込む必要がなくなる。代わりに、サイドバーのドロップダウンから「情報」「警告」「エラー」を選択するだけで済むようになる。内部的には既存のショートコード関数を呼び出すため、ロジックを書き直す必要もない。

do_shortcode を使ったレンダリング手法

実装方法は非常にシンプルだ。ブロックの `render_callback` 内で、受け取った属性を基にショートコード文字列を組み立て、WordPress標準の `do_shortcode()` 関数に渡すだけである。記事によれば、これにより管理画面上でもショートコードの実行結果がリアルタイムにプレビューされ、編集体験が劇的に向上するという。

function render_shortcode_wrapper_block( $attributes ) {
    $type = esc_attr( $attributes['alertType'] );
    $msg  = esc_attr( $attributes['message'] );
    
    // 既存のショートコードを動的に生成
    $shortcode = sprintf( '[my_alert type="%s"]%s[/my_alert]', $type, $msg );
    
    return sprintf(
        '<div %s>%s</div>',
        get_block_wrapper_attributes(),
        do_shortcode( $shortcode )
    );
}

WordPress開発の未来とPHP-onlyブロックの立ち位置

WordPress開発の未来とPHP-onlyブロックの立ち位置

PHP-onlyブロックは現在、非常に強力なツールとして進化を続けているが、すべてのJavaScript開発を置き換えるものではない。高度なインタラクションや、複雑な状態管理が必要なUI(例:ドラッグ&ドロップを伴う高度なレイアウトエディタなど)には、依然としてReactによる開発が適している。

しかし、中小規模のWebサイト制作や、社内向けのカスタム機能の実装においては、PHP-onlyブロックで十分なケースが大半だ。著者も指摘するように、この機能は「ブロックエコシステムを、高度なJavaScriptを操る層以外にも広げる」ための重要な架け橋となるだろう。今後は、より多くの管理画面コントロールがPHPから定義可能になり、JSを書く必要性はさらに低下していくと予想される。

我々Web制作に携わる者にとって、技術の選択肢が増えることは歓迎すべきことだ。プロジェクトの予算、納期、そして保守を担当するチームのスキルセットに合わせて、ReactベースのブロックとPHP-onlyブロックを適切に使い分ける「ハイブリッドな開発スタイル」が、これからのスタンダードになると考えられる。

この記事のポイント

  • React/Node.js不要: 複雑なビルド環境なしでカスタムブロックが作成可能。
  • auto_registerフラグ: PHPで定義した属性から管理画面のUIを自動生成できる。
  • 保守性の向上: PHPコード一箇所で定義と出力を管理でき、コードの可読性が高い。
  • ショートコードの進化: 既存のショートコードを簡単に、プレビュー可能なブロックへ変換できる。
  • ネイティブ機能の統合: `get_block_wrapper_attributes` でWordPress標準のスタイル設定に即座に対応可能。

出典

  • Kinsta Blog「How to build PHP-only Gutenberg blocks」(2026年3月19日)
WP Rigで始めるWordPressテーマ開発——現代的なワークフローと学習環境

WP Rigで始めるWordPressテーマ開発——現代的なワークフローと学習環境

WP Rigは無料のWordPressテーマ開発ツールキットだ。スターターテーマとしての機能に加え、ComposerやNode.jsを統合した現代的な開発環境を提供する。2026年3月時点でバージョン3が公開されており、従来のクラシックテーマからブロックベースのテーマ、ハイブリッドなアプローチまで幅広く対応している。

プロジェクトの現在の管理者はRob Ruiz氏である。氏は2026年3月4日に公開されたWP Tavernのポッドキャストで、WP Rigの現状と将来像について語った。このツールキットは、テーマ開発の学習からプロダクション環境での利用まで、多様なユーザー層をサポートすることを目指している。

WordPressのエコシステムがブロックエディタとフルサイト編集(FSE)へと移行する中で、テーマ開発の在り方も変化している。WP Rigはこうした変化に対応し、開発者が最新のベストプラクティスを学びながら実践できる環境を整備した。

WP Rigとは何か——スターターテーマと開発ツールキット

WP Rigとは何か——スターターテーマと開発ツールキット

WP Rigは「スターターテーマ」と「開発ツールキット」の両方の性格を持つ。Underscoresのような最小限のテーマ基盤を提供する一方で、現代的なフロントエンド開発に必要なツール群をあらかじめ統合している点が特徴だ。

コアとなる機能と統合ツール

WP Rigのプロジェクトをクローンすると、Node.jsとComposerの依存関係が自動的に解決される。これにより、開発者はすぐにコーディング作業に取りかかれる。統合されている主なツールは以下の通りだ。

  • CSS処理: Lightning CSS(旧PostCSS)による最新CSS機能の先行利用とブラウザ互換コードへの変換
  • JavaScript処理: esbuildによるTypeScriptのトランスパイルとバンドル
  • コード品質: PHPCS(PHP Coding Standards)とWordPressコーディング標準(WPCS)に基づく自動チェック
  • 開発サーバー: ファイル変更の監視と自動ビルド

これらのツールは、開発者が個別に設定する必要がなく、WP Rigの設定ファイルを介して一元的に管理される。これにより、開発環境の構築にかかる時間を大幅に短縮できる。

従来のスターターテーマとの違い

従来のスターターテーマは、主にテンプレートファイルのひな形を提供することに焦点が当てられていた。一方、WP Rigは開発「プロセス」そのものを標準化することを目指している。コードの書き方からビルド、品質チェックまで、一連のワークフローをツールが支援する。

Rob Ruiz氏はポッドキャストで、このアプローチについて次のように説明している。「WP Rigは単なるファイルの集合ではない。ベストプラクティスを学び、適用するためのガードレールを提供するものだ」。特にチーム開発では、この標準化されたワークフローがコードの一貫性を保ち、レビュー工数を削減する効果がある。

誰のためのツールか——学習者からプロフェッショナルまで

誰のためのツールか——学習者からプロフェッショナルまで

WP Rigの対象ユーザーは幅広い。WordPress管理画面でのサイト構築に慣れたユーザーが、次のステップとしてコードベースのカスタマイズに挑戦する場合にも適している。一方、経験豊富な開発者が新規プロジェクトを効率的に立ち上げるためにも利用できる。

ページビルダーユーザーからの移行

ページビルダーやブロックエディタによるビジュアル編集には限界がある。デザインの細かい調整や、最新のCSS機能をすぐに利用したい場合、コードを直接編集する方が柔軟性が高い。WP Rigは、こうしたユーザーがローカル開発環境を整え、段階的にテーマ開発を学ぶための足がかりとなる。

Ruiz氏はポッドキャストで、コードによる制御の利点を強調した。「データベースに保存された設定値を一つずつ変更するのではなく、CSSファイルを一行修正するだけでサイト全体の見た目を変えられる。これがコードの持つ『超能力』だ」。WP Rigは、この「超能力」を安全に習得するための学習環境を提供する。

エージェンシーとチーム開発での活用

カスタムテーマをクライアントに提供するWeb制作会社では、開発プロセスの標準化が重要だ。WP Rigをプロジェクトの基盤とすることで、複数の開発者が同じコーディング規約とビルドプロセスを共有できる。新規メンバーのオンボーディングも容易になる。

また、WP Rigにはテーマの「バンドル」機能が備わっている。開発が完了したテーマを配布用にパッケージ化する際、すべてのソースコード内の「WP Rig」という文字列がテーマ名に置換される。これにより、エンドユーザーが基盤技術を意識することなく、完成したテーマを利用できる。

開発環境の構築とワークフロー

開発環境の構築とワークフロー

WP Rigを利用するには、ローカルマシンに特定のソフトウェアをインストールする必要がある。リモートサーバーではなく、ローカル環境でテーマ開発を行うのが基本だ。

必要な事前準備

WP Rigを動作させるための最小限の環境は以下の通りだ。

  • Node.js: JavaScriptの実行環境。バージョン管理ツール(nvmやfnm)でのインストールが推奨される。
  • Composer: PHPの依存関係管理ツール。グローバルにインストールする。
  • ローカル開発環境: Local WP、WordPress Studio、Dockerベースのwp-envなど、任意の環境を選択可能。

これらのツールをインストールした後、WP RigのGitHubリポジトリをクローンし、依存関係をインストールする。プロジェクトルートでnpm installcomposer installを実行すれば、開発環境の準備は完了だ。

開発からバンドルまでの流れ

WP Rigを使った典型的な開発ワークフローは以下のステップで構成される。

  • 1. 開発サーバーの起動: npm startでファイル監視と自動ビルドが開始される。
  • 2. コーディング: CSS、JavaScript、PHPファイルを編集する。変更は自動的に反映される。
  • 3. コードチェック: npm run lintでPHPとJavaScriptのコード品質を検証できる。
  • 4. ビルド: npm run buildで本番用の最適化されたアセットを生成する。
  • 5. バンドル: npm run bundleで配布用のテーマパッケージを作成する。

このワークフローの中で、開発者は複雑なビルド設定を意識する必要がない。ツールの更新が必要な場合も、WP Rigのバージョンアップに追随するだけで済む。

ブロックエディタ時代のテーマ開発

ブロックエディタ時代のテーマ開発

WordPressのフルサイト編集(FSE)とブロックベースのテーマが普及する中で、クラシックなテーマ開発の価値が問われている。WP Rigはこの変化を先取りし、複数の開発パラダイムをサポートするように進化した。

3つのテーマパラダイムへの対応

WP Rigは、一つのコードベースから以下の3種類のテーマを生成できる。

  • クラシックテーマ: 従来通りのPHPテンプレートファイルを使用する。
  • ユニバーサルテーマ: クラシックテーマとブロックテーマの機能を併用する。
  • ブロックテーマ: HTMLテンプレートファイルとtheme.jsonで構成される。

プロジェクトの初期化後、コマンドラインからnpm run configureを実行すると、対話形式でテーマの種類を選択できる。選択に応じて、必要なファイルが自動的に生成または変換される。

テーマレベルでのブロック開発

WP Rigの特徴的な機能の一つが、テーマ内でのカスタムブロック開発をサポートしている点だ。通常、カスタムブロックはプラグインとして開発されるが、テーマに密接に関連するブロック(例: 特化したナビゲーションブロック)をテーマ内に実装できる。

ただし、この方法で開発したテーマをWordPress.orgの公式テーマリポジトリに投稿することはできない。リポジトリのガイドラインでは、ブロックの提供はプラグインに限定されているためだ。クライアントワークや自社サイトでの利用が主な用途となる。

Ruiz氏はこの機能について、「境界線を曖昧にすることを厭わない」と表現した。テーマとプラグインの役割分担に縛られず、プロジェクトの要件に最適な技術的選択を可能にする姿勢が反映されている。

教育資源としてのWP Rig

教育資源としてのWP Rig

WP Rigの公式サイト(wprig.io)には、ツールの使い方だけでなく、WordPressテーマ開発そのものを学ぶための資源が豊富に用意されている。これはプロジェクトの重要な側面だ。

学習コンテンツの構成

サイトの「Learn」セクションには、以下のような教育資源が整理されている。

  • ビデオチュートリアル: YouTubeチャンネルで基礎から応用までを解説
  • 技術文書: CSS、JavaScript、PHPの各言語におけるベストプラクティス
  • サンプルコード: 実際のユースケースに基づいた実装例
  • 開発ガイド: ローカル環境構築からデプロイまでの手順

これらの資源は、単にWP Rigの使い方を教えるだけでなく、現代的なWeb開発の概念そのものを伝えることを目的としている。例えば、CSSのカスケードや詳細度、PHPの名前空間といった基礎概念も丁寧に説明されている。

コミュニティと貢献の機会

WP Rigはオープンソースプロジェクトであり、GitHub上で開発が進められている。バグ報告や機能提案はIssuesを通じて受け付けている。また、Discordサーバーでは開発者同士の交流が行われている。

Ruiz氏はポッドキャストで、コミュニティの重要性を強調した。「WordPress自体がコントリビューターに依存している。テーマ開発を学ぶ人が増え、やがてコアへの貢献者になる——そんな好循環を生み出したい」。WP Rigは、その入り口となることを目指している。

この記事のポイント

  • WP Rigはテーマ開発のスターターキットであり、現代的な開発ツールを統合している。
  • ローカル環境での開発を前提とし、Node.jsとComposerが必要だ。
  • クラシック、ユニバーサル、ブロックテーマの3パラダイムに対応する。
  • コード品質チェックや自動ビルドなど、チーム開発での標準化を支援する。
  • 教育資源が豊富で、テーマ開発の学習環境としても機能する。

出典

  • WP Tavern「#207 – Rob Ruiz on WP Rig and the Future of Theme Development」(2026年3月4日)