enonic-controller-generator について
enonic-controller-generator は Enonic XP プロジェクト向けのスキルです。ページ、パーツ、レイアウト、レスポンスプロセッサーと関連ファイルを生成し、出力を確認します。
主な機能
- 01Enonic XP プロジェクトと出力先の検出
- 02コンポーネント XML 記述子とコントローラーの生成
- 03Thymeleaf または Mustache ビューの作成
- 04レスポンスプロセッサーとサイト宣言の設定
- 05ビルド依存関係の更新とファイル検証
活用シーン
- 01Enonic XP サイトのページコンポーネント作成
- 02パーツの設定フォームとコントローラー生成
- 03レイアウト領域やレスポンスプロセッサーの追加
- 04コンポーネント名と領域設定の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ webmaxru/ enonic-agent-skills --skill enonic-controller-generatorインストール後、Claude Code で/enonic-controller-generatorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/layout-controller.template.tspage-controller.template.tspart-controller.template.tsreferences/compatibility.mdcontroller-reference.mdexamples.mdtroubleshooting.mdscripts/find-enonic-targets.mjs詳細
Enonic XP コントローラー生成ツール
手順
ステップ 1:Enonic XP プロジェクトを検出する
node scripts/find-enonic-targets.mjs <workspace-root>を実行して、プロジェクトルートと既存のコンポーネントを特定します。- スクリプトがコード 1 で終了した場合(マーカーが見つからない場合)、Enonic XP プロジェクトが検出されなかったことをユーザーに伝え、終了します。
- 標準出力から
sitePathを記録します。生成するすべてのファイルは、このパスを基準とするディレクトリに配置します。
ステップ 2:コンポーネントの種類を決定する
- ユーザーが必要としているコンポーネントの種類を特定します。
- ページ — ページ全体をレンダリングし、1 つ以上のリージョンを宣言できます。
- パーツ — 設定フォームを持つ末端コンポーネントで、リージョンはありません。
- レイアウト — 名前付きリージョンを使って他のコンポーネントを配置します。
- レスポンスプロセッサー — HTTP レスポンスを変更するサイトレベルのフィルターです(例:スクリプトを挿入する)。
- リクエストが曖昧な場合は、作業を進める前にコンポーネントの種類を確認します。
ステップ 3:コンポーネントの詳細を収集する
- 次の項目をユーザーに確認するか、推測します。
- コンポーネント名(kebab-case、例:
hero-banner)。 - 表示名(人が読める名前、例:
Hero Banner)。 - 言語 — TypeScript(
.ts、デフォルト)または JavaScript(.js)。TS と JS の違いについてはreferences/compatibility.mdを読みます。 - テンプレートエンジン — Thymeleaf(デフォルト)または Mustache。
- ページ/レイアウトの場合:リージョン名(デフォルト:ページでは
main)。 - パーツの場合:フォームフィールド(名前、型、出現回数)。
- レスポンスプロセッサーの場合:ページへの出力先(
bodyEnd、headEndなど)と挿入するコンテンツ。
- コンポーネント名(kebab-case、例:
ステップ 4:XML 記述子を生成する
- XML 記述子のスキーマについて
references/controller-reference.mdを読みます。 - 記述子ファイルを作成します。
- ページ:
<sitePath>/pages/<name>/<name>.xml - パーツ:
<sitePath>/parts/<name>/<name>.xml - レイアウト:
<sitePath>/layouts/<name>/<name>.xml
- ページ:
<display-name>、<description>、<form>(パーツの入力項目を含む)、および<regions>(ページとレイアウト用)を含めます。
ステップ 5:コントローラーを生成する
assets/から適切なテンプレートを読みます。- ページには
assets/page-controller.template.ts。 - パーツには
assets/part-controller.template.ts。 - レイアウトには
assets/layout-controller.template.ts。
- ページには
- プレースホルダーを実際のコンポーネント名、設定フィールドのマッピング、リージョン名、ライブラリのインポートに置き換えます。
- JavaScript が指定された場合は、ES モジュール構文を CommonJS(
require/exports)に変換します。 - Portal API の仕様(関数、インポートパス)について
references/controller-reference.mdを読みます。 - コントローラーを次の場所に配置します。
- ページ:
<sitePath>/pages/<name>/<name>.ts(または.js) - パーツ:
<sitePath>/parts/<name>/<name>.ts(または.js) - レイアウト:
<sitePath>/layouts/<name>/<name>.ts(または.js) - プロセッサー:
<sitePath>/processors/<name>.js
- ページ:
ステップ 6:ビューを生成する(該当する場合)
- Thymeleaf または Mustache を使うページ、パーツ、レイアウトについては、コントローラーと同じディレクトリに対応する
.htmlビューファイルを生成します。 - ページとレイアウトでは、コンテナー要素に
data-portal-region="<region-name>"属性を含めます。 - リージョンを反復処理する場合は、
data-portal-component="${component.path}"とともにdata-th-each="component : ${region.components}"を使用します。
ステップ 7:レスポンスプロセッサーを接続する(該当する場合)
- レスポンスプロセッサーを生成する場合は、
<sitePath>/site.xmlが存在するか確認します。 - 存在する場合は、
<processors>ブロック内に<response-processor>エントリを追加します。 - 存在しない場合は、プロセッサー宣言を含む
<sitePath>/site.xmlを作成します。 ステップ 8:build.gradle の依存関係を更新する - プロジェクトの
build.gradleに既存のライブラリのインクルードがあるか確認します。 - 不足している依存関係を追加します。
com.enonic.xp:lib-portal:${xpVersion}— すべてのコントローラーで必須です。com.enonic.xp:lib-content:${xpVersion}— コントローラーでコンテンツクエリを使用する場合に必要です。com.enonic.lib:lib-thymeleaf:2.0.0— Thymeleaf によるレンダリングを使用する場合に必要です。com.enonic.lib:lib-mustache:2.1.0— Mustache によるレンダリングを使用する場合に必要です。com.enonic.lib:lib-asset:${libVersion}— コントローラーでアセット URL を生成する場合に必要です(XP 7.15 以降で非推奨となったportalLib.assetUrlの代わりに使用します)。
ステップ 9:出力を検証する
- ディスクリプタのファイル名が親ディレクトリ名と完全に一致していることを確認します。
- コントローラーのファイル名がディスクリプタのディレクトリ名と一致していることを確認します。
- コントローラー/ビュー内のすべてのリージョン名が XML ディスクリプタで宣言されているものと一致していることを確認します。
- 生成されたコードを既知の正しいパターンと照合するため、
references/examples.mdを読みます。
エラー処理
scripts/find-enonic-targets.mjsがコード 1(NO_PROJECT)で終了した場合、Enonic XP プロジェクトが見つからなかったことをユーザーに伝え、src/main/resources/site/の下に標準のディレクトリ構造を作成するよう提案します。- 同じ名前のコンポーネントが対象パスにすでに存在する場合、ユーザーに警告し、上書きするか名前を変更するか尋ねます。
- ユーザーからパートで 404 が発生する、またはリージョンが不足していると報告された場合は、一般的な原因を診断するために
references/troubleshooting.mdを読みます。 - 生成されたコントローラーの実行時にビュー解決エラーが発生する場合、ビューのファイルがコントローラーと同じディレクトリにあること、および
resolve()の呼び出しで正しいファイル名を使用していることを確認します。
コメント
Markdown 対応