enonic-content-type-generator について
プロジェクトの要件をもとに Enonic XP のコンテンツタイプ XML を生成するスキルです。プロジェクトを検出し、フィールドを入力タイプに対応付け、生成した構造を検証します。
主な機能
- 01Enonic XP のプロジェクトルートを検出
- 02フィールドを入力タイプに対応付け
- 03コンテンツタイプ XML を生成
- 04mixin と x-data ファイルを作成
- 05XML と構造値を検証
活用シーン
- 01Enonic XP プロジェクトにコンテンツタイプを追加
- 02フィールド、オプションセット、アイテムセットを定義
- 03mixin または x-data ファイルを生成
- 04生成 XML の構造上の問題を確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ webmaxru/ enonic-agent-skills --skill enonic-content-type-generatorインストール後、Claude Code で/enonic-content-type-generatorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/content-type.template.xmlreferences/content-type-reference.mdexamples.mdtroubleshooting.mdscripts/find-enonic-targets.mjs詳細
Enonic XP コンテンツタイプジェネレーター
手順
ステップ 1:Enonic XP プロジェクトを検出する
node scripts/find-enonic-targets.mjs [workspaceRoot]を実行して、Enonic XP プロジェクトのルートを探します。- スクリプトが空の配列を返した場合、Enonic XP プロジェクトの目印が見つからなかったことを伝え、対象ディレクトリを尋ねます。
- 検出したプロジェクトのルートを、後続のステップで使用するために保存します。
ステップ 2:要件を収集する
- リクエストからコンテンツタイプ名を特定します。名前は小文字とハイフンで構成する必要があります(例:
blog-post)。 - 表示名(例:
Blog Post)を特定します。 - スーパータイプを決定します。リクエストでフォルダー(
base:folder)または別の組み込みタイプが指定されていない限り、base:structuredを既定値にします。 - 要求されたすべてのフィールドとその入力タイプを列挙します。
references/content-type-reference.mdを読み、自然言語で記述されたフィールドの説明を、適切な Enonic XP 入力タイプと設定に対応付けます。 - アイテムセット(繰り返し可能なグループ化フィールド)、オプションセット(単一選択または複数選択の選択肢)、ミックスイン参照の有無を特定します。
- リクエストでミックスインについて言及されている場合は、ミックスインファイルを生成するのか、既存のものを参照するのかを判断します。
- リクエストで x-data について言及されている場合は、x-data ファイルを生成するのか、既存のものを参照するのかを判断します。
ステップ 3:コンテンツタイプ XML を生成する
assets/content-type.template.xmlを読み、ひな型を取得します。DISPLAY_NAMEをステップ 2 の表示名に置き換えます。DESCRIPTIONを短い説明に置き換えます。説明がない場合は、この要素を削除します。<super-type>要素をステップ 2 で決定した値に設定します。- 特定した入力、アイテムセット、オプションセット、フィールドセット、ミックスイン参照を
<form>要素に追加します。 - 各入力について、次のように設定します。
name属性に camelCase を使用します。type属性を、正確な Enonic XP 入力タイプ名(大文字と小文字を区別)に設定します。- 必要に応じて、
<label>、<occurrences>、<help-text>、<default>、<config>を追加します。
- ComboBox 入力と RadioButton 入力では、すべての選択肢を
<config>内に含めます。 - ContentSelector、ImageSelector、MediaSelector 入力では、指定に応じて
allowContentType、allowPath、treeMode、hideToggleIconを含む<config>を追加します。 - TextLine と TextArea では、入力制約が指定されている場合、
max-length、show-counter、またはregexpを含む<config>を追加します。 - Long と Double では、範囲制約が指定されている場合、
minとmaxを含む<config>を追加します。 - タイムゾーンを考慮した保存が求められている場合、DateTime に
<timezone>true</timezone>を含む<config>を追加します。 - 参考例が必要な場合は、
references/examples.mdを読みます。
ステップ 4:ファイルを書き込む
- 出力先のパスを構成します:[projectRoot]/src/main/resources/site/content-types/[name]/[name].xml
- ディレクトリが存在しない場合は作成します。
- 生成した XML をファイルに書き込みます。
- ミックスインを生成した場合は、次の場所に書き込みます:[projectRoot]/src/main/resources/site/mixins/[name]/[name].xml
- x-data を生成した場合は、次の場所に書き込みます:[projectRoot]/src/main/resources/site/x-data/[name]/[name].xml
site.xmlで x-data の参照が必要な場合は、指定に応じてallowContentTypes属性とoptional属性を含む<x-data>エントリーを追加します。
ステップ 5:出力を検証する
- 生成した XML の形式が正しいことを確認します。
references/content-type-reference.mdと照合し、すべての<input>に有効なtype属性があることを確認します。- 各階層内で
name属性が重複していないことを確認します。 <occurrences>の値に論理的な矛盾がないことを確認します(最小値 <= 最大値、または無制限の場合は最大値 = 0)。- ファイル生成を求めずにスーパータイプ、入力タイプ、スキーマ構造について質問された場合は、ファイルを作成せず、
references/content-type-reference.mdを使って質問に回答します。
エラー処理
scripts/find-enonic-targets.mjsがゼロ以外のコードで終了した場合は、stderr メッセージを報告し、プロジェクトルートのパスを手動で尋ねます。- 要求された入力タイプが既知の Enonic XP 入力タイプに一致しない場合は、
references/content-type-reference.mdを読み、最も近い候補を提案します。入力タイプ名を創作してはいけません。 - XML の検証に失敗した場合は、
references/troubleshooting.mdを読んでエラーを診断・修正し、その後ファイルを再生成します。 - ミックスイン参照を解決できない場合は、コンテンツタイプを書き込む前に、ミックスインのファイルパスが存在することを確認します。
コメント
Markdown 対応