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/[email protected]
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.tsx
src/index.js
->src/index.ts
src/save.js
->src/save.tsx
src/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
を使っていますが、もし適切な型定義をご存知の方がいらっしゃれば教えてもらえると助かります。
おわりに
「なんのために必要か」がわかれば、作業自体はそこまで特別ではなさそうです。ただし慣れるなでは高確率で忘れそうなので、このような覚書を作りつつ頭の中を整理していこうと思います。