WordPressのカスタムブロックをTypeScriptで開発する準備
WordPressのカスタムブロックを作成する手順をまとめました。プロジェクトのセットアップには@wordpress/create-blockコマンドを使用し、必要なライブラリが自動的にインストールされます。また、TypeScriptで開発する場合はファイル拡張子やtsconfig.jsonの設定、型定義の追加が必要です。registerBlockTypeの一部パラメータは省略されているため、エラーが発生する場合は修正する必要があります。さらに、block.jsonで設定したattributesも適切に設定する必要があります。
目次
ひさしぶりにWordPressのカスタムブロックを作ろうとしたのですが、やり方を忘れてしまったので覚書としてまとめました。
Create Blockコマンドでプロジェクトを作る
プロジェクトのセットアップは、@wordpress/create-blockコマンドを使います。引数にプロジェクト名を入れると、その名前でディレクトリやファイルが生成されます。
$ npx @wordpress/create-block@latest todo-list
インストールするライブラリが多いため、セットアップには1〜2分ほどかかることがあるようです。
@wordpress/create-block@4.31.0
Ok to proceed? (y) y
Creating a new WordPress plugin in the example-wp-stripe directory.
Creating a "block.json" file.
Creating a "package.json" file.
Installing `@wordpress/scripts` package. It might take a couple of minutes...
作成後、プロジェクトディレクトリに入りましょう。
$ cd todo-list
node_modules/ディレクトリがあれば、ライブラリのインストールも完了しています。もしなければ、npm installでインストールしておきましょう。
TypeScriptで開発するように変更する
ここからはTypeScriptで動くようにするための作業です。
TypeScriptのインストールは不要
TypeScriptをnpm installで追加する必要はない様子です。create-blockを実行した時点で、node_modulesにTypeScriptが入っていました。
% ls -la node_modules | grep typescript
drwxr-xr-x 10 okamotohidetaka staff 320 12 10 16:56 @typescript-eslint
drwxr-xr-x 9 okamotohidetaka staff 288 12 10 16:56 typescript
内部的にインストールされているということでしょうか。
ファイル名をTypeScript向けに変える
生成されている4ファイルを、TypeScript形式に変えましょう。
src/edit.js->src/edit.tsxsrc/index.js->src/index.tssrc/save.js->src/save.tsxsrc/view.js->src/view.tsx
src/index.tsはReact(厳密にはJSX)を使う場合はsrc/index.tsxにしましょう。src/view.tsxについても、特にReact(JSX)を書く予定がなければsrc/view.tsで良いと思います。
tsconfig.jsonを作成する
TypeScriptで開発するためのConfigファイルを作成しましょう。tsx --initで作れます。
% npx tsc --init
Created a new tsconfig.json with:
TS
target: es2016
module: commonjs
strict: true
esModuleInterop: true
skipLibCheck: true
forceConsistentCasingInFileNames: true
You can learn more at https://aka.ms/tsconfig
tsconfig.jsonが生成されますので、complierOptionsにある以下の2つを設定しましょう。
"compilerOptions": {
"jsx": "react-jsx",
"resolveJsonModule": true,
これでReactのJSXやblock.jsonファイルの読み込みができるようになります。
型設定を読み込ませる
デフォルトではいくつかのライブラリが型定義情報を持っていません。そのため、@typesからインストールしましょう。
% npm i -D @types/wordpress__blocks @types/wordpress__block-editor
この辺りは、利用するライブラリによって増減することもあります。
registerBlockTypeの型エラーを解決する
デフォルトでは一部のパラメータが省略されているため、型エラーが発生します。次のように変更しましょう。
registerBlockType( metadata.name, {
title: metadata.title,
attributes: {},
category: metadata.category,
/**
* @see ./edit.js
*/
edit,
/**
* @see ./save.js
*/
save,
} );
もしattributesをblock.jsonで設定している場合は、次のように設定します。
registerBlockType( metadata.name, {
title: metadata.title,
attributes: metadata.attributes as any,
category: metadata.category,
/**
* @see ./edit.js
*/
edit,
/**
* @see ./save.js
*/
save,
} );
anyを使っていますが、もし適切な型定義をご存知の方がいらっしゃれば教えてもらえると助かります。
おわりに
「なんのために必要か」がわかれば、作業自体はそこまで特別ではなさそうです。ただし慣れるなでは高確率で忘れそうなので、このような覚書を作りつつ頭の中を整理していこうと思います。