WordPressブロック開発 雛形を作成しよう

WordPressのカスタムブロックを開発するためにローカル環境を構築する方法を紹介します。

事前準備

Node.jsとnpmのインストール、場合によりWordPressの構築が必要です。

Node.jsとnpmのインストール

  1. Node.js公式サイトから最新版のインストーラーをダウンロードする
  2. ダウンロードしたnode-v.XX.X-x64.msiをクリックして実行する
  3. インストールウィザードはデフォルト設定のままインストールを完了する

Node.jsのインストールを確認

  1. Windows+Rで「ファイル名を指定して実行」を呼び出し、cmdと入力してOKする
  2. コマンドパレットが起動したら下記のコマンドを1行ずつ入力してEnter
  3. node.jsとnpmのバージョンが表示されていればOK
node -v
// v22.13.0

npm -v
// 10.9.2

WordPressローカル環境構築

  • Local
  • Docker
  • wp-env など

@wordpress/create-blockを使用し動的ブロックを作成する方法

WordPressの構築にLocalを使用する方法です。生成されるのは動的ブロックとなります。

WordPress環境構築

LocalなどでWordPress環境を構築する

プラグイン雛形をインストール

WordPressのプラグインディレクトリにmy-blockフォルダを作成し、Visual Studio Codeなどのエディターで開いてwp-envコマンドを実行する

npx @wordpress/create-block my-dynamic-block --variant dynamic

プラグインディレクトリに移動

cd my-dynamic-block

wp-env起動

npm start

@wordpress/create-blockとwp-envを使用する方法

WordPressの構築にwp-envを使用する方法です。生成されるのは静的ブロックとなります。

Dockerのインストール確認

コマンドプロンプトを起動し、Dockerのインストールバージョンを表示するコマンドを入力し、インストールを確認する。問題なければ、Dockerを起動する

docker -v
// Docker version 27.3.1

wp-envをインストール

コマンドプロンプトにwp-envのインストールコマンドを入力し実行する。インストール終了後、wp-envのバージョンを表示してインストールを確認する

npm -g install @wordpress/env
// もしくは
npm i @wordpress/env –save-dev

npm run wp-env -v
// 10.9.2

プラグイン雛形をインストール

デスクトップなどにmy-blockフォルダを作成し、Visual Studio Codeなどのエディターで開いてwp-envコマンドを実行する

// wp-envの設定が済んだプラグイン雛形を作成したい場合
npx @wordpress/create-block my-block --wp-env

// package.jsonとpackage-lock.jsonを生成したい場合
npm i @wordpress/env --save-dev

.wp-env.override.jsonを作成

生成された.wp-env.jsonを複製し、.wp-env.override.json にリネームしたのち、ポート番号を設定する。.wp-env.override.jsonは.wp-env.jsonを上書きできる

// .wp-env.override.json 編集前
{
	"core": "WordPress/WordPress",
	"plugins": [
		"."
	]
}

// .wp-env.override.json 編集後
{
	"core": "https://wordpress.org/wordpress-6.5.5.zip",
	"plugins": ["."],
	"port": 3001,
	"env": {
		"tests": {
			"port": 3002
		}
	}
}

package.jsonを編集

生成されたpackage.jsonにのscriptsブロックに"wp-env": "wp-env",を追記

{
	"name": "my-block",
	"version": "0.1.0",
	"description": "Example block scaffolded with Create Block tool.",
	"author": "The WordPress Contributors",
	"license": "GPL-2.0-or-later",
	"main": "build/index.js",
	"scripts": {
		"wp-env": "wp-env",
		"build": "wp-scripts build",
		"format": "wp-scripts format",
		"lint:css": "wp-scripts lint-style",
		"lint:js": "wp-scripts lint-js",
		"packages-update": "wp-scripts packages-update",
		"plugin-zip": "wp-scripts plugin-zip",
		"start": "wp-scripts start",
		"env": "wp-env"
	},
	"devDependencies": {
		"@wordpress/env": "^10.15.0",
		"@wordpress/scripts": "^30.8.1"
	}
}

プラグインディレクトリに移動

cd my-block

wp-env起動

npm run wp-env start

WordPressにログイン

フロント:http://localhost:8888
ログイン:http://localhost:8888/wp-login.php
ユーザー名:admin
パスワード:password

@wordpress/create-blockを使用する方法

WordPressは事前に構築し、wp-envは使用しない方法です。

WordPressローカル環境内でフォルダ移動

  1. あらかじめ構築したWordPressのインストールフォルダをVisual Studio Code等のエディターで開く
  2. Visual Studio CodeのターミナルをCtrlで開く
  3. ターミナルに、WordPressのプラグインディレクトリに移動するコマンドを入力してEnter
cd wp-content/plugins/

@wordpress/create-blockを実行

pluginフォルダで@wordpress/create-blockをインストールするコマンドを実行する

npx @wordpress/create-block@latest my-create-block

my-create-blockディレクトリが生成され、その配下にプラグインの雛形がインストールされる

  • my-create-block
    • node_modules // node本体
    • package-lock.json
    • package.json // 依存関係とローカル開発で使用するスクリプトを定義
    • my-block.php // ブロックをWordPressに登録するプラグインのメインのPHPファイル
    • build // srcをビルドした時の出力先
      • block.json
      • index-rtl.css
      • index.asset.php
      • index.css
      • index.js
      • style-index-rtl.css
      • style-index.css
      • view.asset.php
      • view.js
    • src // 開発用ディレクトリ
      • block.json
      • edit.js
      • editor.scss
      • index.js
      • save.js
      • style.scss
      • view.js
    • .wp-env.json
    • .editorconfig // コーディングスタイルを統一
    • .gitignore // gitで管理しないファイルを指定
    • readme.txt

生成したプラグインフォルダに移動

cd my-create-block

npmを起動

npm start

WordPressのダッシュボードにログインし、プラグインを有効化する

@wordpress/scriptsパッケージを使用する方法

WordPressローカル環境内でフォルダ移動

  1. WordPressのインストールフォルダをVisual Studio Code等のエディターで開く
  2. Visual Studio CodeのターミナルをCtrlで開く
  3. ターミナルに、WordPressのプラグインディレクトリに移動するコマンドを入力してEnter
cd wp-content/plugins/

プラグインディレクトリ作成し移動

  1. カスタムブロックの雛形をインストールするフォルダを作成し、そのフォルダに移動する
mkdir my-block
cd my-block
  1. プラグインを構成する、buildディレクトリ、srcディレクトリ、src/index.jsファイルを作成する
  • my-block/
    • build/ // 新規作成
    • src/ // 新規作成
      • index.js // 新規作成

@wordpress/scriptsをインストール

  1. @wordpress/scriptsをインストールするコマンドを実行する
npm install @wordpress/scripts --save-dev
  1. パッケージの情報が表示されたらインストール終了
added 1424 packages in 1m

264 packages are looking for funding
  run `npm fund` for details
  1. インストールしたnpmのリストを確認し、@wordpress/scriptsがあればインストール成功
npm list
// @wordpress/scripts@30.8.1

プラグインディレクトリの構成を確認

node_modulesフォルダと、package.jsonpackage-lock.jsonファイルが自動生成されている

  • my-block
    • node_modules/ // 自動生成
    • build/
    • src/
      • index.js
    • package-lock.json // 自動生成
    • package.json // 自動生成

スクリプトを記述

package.jsonにビルドなどに使用するコマンドを記述する

{
  "scripts": {
    "start": "wp-scripts start",
    "build": "wp-scripts build",
    "format": "wp-scripts format",
    "lint:css": "wp-scripts lint-style",
    "lint:js": "wp-scripts lint-js"
  },
  "devDependencies": {
    "@wordpress/scripts": "^30.8.1"
  }
}

npmを起動

npmを起動するコマンドを入力するとビルド処理が走り、buildフォルダが更新される

npm run start

プラグインをWordPressに登録するファイルを作成

my-block配下にmy-block.phpを作成し、Plugin Name等の基本情報と、プラグインをWordPressに登録する処理を記述する。ダッシュボード>プラグイン一覧からプラグインを有効化する

<?php
/*
Plugin Name: My Block
Plugin URI: https://example.com
*/

function create_block_my_block() {
    register_block_type(__DIR__ . '/build/my-block');
}
add_action('init', 'create_block_my_block');

作成したプラグインはエディターから挿入できるようになる。

wp-envコマンド一覧

// 実行中のWordPressコンテナを停止、WordPress環境は削除されない
npm run wp-env stop

// 停止中のWordPressコンテナを再開する
npm run wp-env start

// WordPress環境を立ち上げる。プラグインでもテーマでもないディレクトリで実行する
npm run wp-env start

// WordPressのデータベースをリセット
npm run wp-env clean all

// wp-env環境を削除するコマンド
npm run wp-env destroy

// wp-envツールをグローバルにアンインストール
npm -g uninstall @wordpress/env

GitHubでコードを管理

  1. Gitをインストール
  2. リモートディポジトリ作成
  3. ローカルをGit管理登録
git init
git add .
git commit -am "First Commit"
git branch -M main
git remote add origin git@github.com:【ユーザー名】/dojo-block.git
git push -u origin main

GitHub フロー

他のプラグインとの衝突を防ぐ

他のプラグインと名称が重複していると、アップデート不具合等の衝突が起こる恐れがあるため、一意のプラグイン名を設定するといった対策を講じると良い。

  • my-block.php
    • Plugin Nameに一意のプラグイン名称を設定する
    • License URIに一意のURLを設定する
  • readme.txt
    • 一行目のプラグイン名の行に一意の名称を設定する(=== My Block ===

また、プログラムの記述についても、関数名にプラグインを識別する一意の接頭辞をつけるとよい。

  • block.json
    • "name": "create-block/my-block""name": "my-blocks/my-block"
  • style.**、editor.**
    • クラス名を修正する
    • .wp-block-create-block-my-block.wp-block-my-blocks-my-block

エラー時の対応

npmのエラー

npmのインストールを確認

node -v
// v22.13.0

npm -v
// 10.9.2

パスを通す

Windows11スタート→システム→バージョン情報→システムの詳細設定 の順にクリック

システムのプロパティダイアログの環境変数をクリック

ユーザーの環境変数にあるPathに登録:C:\Users\hakub\AppData\Roaming\npm

システム環境変数にあるPathに登録:C:\Program Files\nodejs\

Localの場合

LocalのダッシュボードにあるアイコンボタンからVisual Studio Codeを起動すると、npmが不安定になることがあるため、Windowsのエクスプローラーから起動する

wp-envのエラー

エラーメッセージ
error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8)

解決方法

HTTPのバージョンを確認
git config --global http.version

空だったので、HTTPのバージョンを設定
git config --global http.version HTTP/1.1

HTTPのバージョンを再確認
git config --global http.version
HTTP/1.1

エラーメッセージ
RPC failed; curl 18 transfer closed with outstanding read data remaining

解決しなかった方法

現在の設定値を確認
git config --show-origin --get-all http.postBuffer

gitのglobal設定で「post buffer」という設定の数値を上げる
git config --global http.postBuffer 524288000
もしくは git config --global http.postBuffer 2M

→解決せず

エラーメッセージ

✖ fatal: Unable to create ‘C:/Users/○○○/.wp-env/38f85fa5ef548f126a6b5c2d07ab0b7f/WordPress-PHPUnit/.git/shallow.lock’: File exists. Another git process seems to be running in this repository, e.g. an editor opened by ‘git commit’. Please make sure all processes are terminated then try again. If it still fails, a git process may have crashed in this repository earlier: remove the file manually to continue. GitError: fatal: Unable to create ‘C:/Users/○○○/.wp-env/38f85fa5ef548f126a6b5c2d07ab0b7f/WordPress-PHPUnit/.git/shallow.lock’: File exists. Another git process seems to be running in this repository, e.g. an editor opened by ‘git commit’. Please make sure all processes are terminated then try again. If it still fails, a git process may have crashed in this repository earlier: remove the file manually to continue.

解決方法

次のshallow.lockを削除する
‘C:/Users/○○○/.wp-env/38f85fa5ef548f126a6b5c2d07ab0b7f/WordPress-PHPUnit/.git/shallow.lock’: File