hyva-create-module について
hyva-create-module は、app/code に Magento 2 モジュールのひな形を作成するスキルです。入力を検証し、テンプレートから登録、Composer、モジュール設定ファイルを生成します。セットアップの実行も選択できます。
主な機能
- 01vendor 名とモジュール名の検証
- 02既存モジュールディレクトリの確認
- 03テンプレートから3種類のファイルを生成
- 04依存関係と Composer 要件に対応
- 05setup:upgrade の任意実行
活用シーン
- 01Magento 2 モジュールのひな形作成
- 02依存関係やパッケージ要件を含むモジュールの作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hyva-themes/ hyva-ai-tools --skill hyva-create-moduleインストール後、Claude Code で/hyva-create-moduleを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/templates/composer.json.tplmodule.xml.tplregistration.php.tpl詳細
Magento 2 モジュールの作成
このユーティリティスキルは、app/code/ に新しい Magento 2 モジュールを作成します。モジュールのひな形が必要な他のスキルから呼び出されるように設計されています。
コマンドの実行: 開発環境内で実行する必要があるコマンド(例:bin/magento)には、hyva-exec-shell-cmd スキルを使用して環境を検出し、適切なコマンドラッパーを判断してください。
パラメーター
このスキルを呼び出す際、呼び出し元のスキルは次の値を指定してください。
| パラメーター | 必須 | 説明 |
|---|---|---|
vendor | はい | PascalCase のベンダー名(例:Acme) |
module | はい | PascalCase のモジュール名(例:CustomFeature) |
description | いいえ | composer.json に記載するモジュールの説明(デフォルト:「[Vendor] [Module] module」) |
dependencies | いいえ | module.xml の <sequence> に指定するモジュール依存関係の配列 |
composer_require | いいえ | composer の依存要件のオブジェクト(パッケージ:バージョン) |
ワークフロー
Step 1:入力を検証する
- ベンダー名が PascalCase であることを確認します(大文字で始まり、英数字のみで構成されていること)
- モジュール名が PascalCase であることを確認します
app/code/{Vendor}/{Module}がすでに存在していないことを確認します
Step 2:ディレクトリー構造を作成する
app/code/{Vendor}/{Module}/
├── registration.php
├── composer.json
└── etc/
└── module.xml
Step 3:ファイルを生成する
registration.php
テンプレート assets/templates/registration.php.tpl を使用します。
{{VENDOR}}をベンダー名に置き換えます{{MODULE}}をモジュール名に置き換えます
composer.json
テンプレート assets/templates/composer.json.tpl を使用します。
{{VENDOR}}をベンダー名(PascalCase)に置き換えます{{MODULE}}をモジュール名(PascalCase)に置き換えます{{vendor_kebabcase}}をケバブケース(ハイフン区切り)のベンダー名に置き換えます{{module_kebabcase}}をケバブケース(ハイフン区切り)のモジュール名に置き換えます{{DESCRIPTION}}を説明に置き換えますcomposer_requireパラメーターの項目をrequireセクションに追加します
module.xml
テンプレート assets/templates/module.xml.tpl を使用します。
{{VENDOR}}を PascalCase のベンダー名に置き換えます{{MODULE}}を PascalCase のモジュール名に置き換えます{{SEQUENCE}}を、依存関係を含む<sequence>ブロックに置き換えます。依存関係がない場合は空文字列にします
Step 4:セットアップを実行する(任意)
呼び出し元のスキルから要求された場合は、hyva-exec-shell-cmd スキルを使用して適切なラッパーで bin/magento setup:upgrade を実行します。
エラー処理
次の場合はモジュールの作成を中止し、呼び出し元のスキルにエラーを報告してください。
| 条件 | 対処 |
|---|---|
| ベンダー名が PascalCase ではない | 報告:「Invalid vendor name '{name}': must start with uppercase letter and contain only alphanumeric characters」 |
| モジュール名が PascalCase ではない | 報告:「Invalid module name '{name}': must start with uppercase letter and contain only alphanumeric characters」 |
| ディレクトリーがすでに存在する | 報告:「Module already exists at app/code/{Vendor}/{Module}」 |
| ディレクトリーを作成できない | 報告:「Failed to create directory app/code/{Vendor}/{Module}: {error}」 |
| ファイルに書き込めない | 報告:「Failed to write {filename}: {error}」 |
Step 4 の実行が要求された際に hyva-exec-shell-cmd スキルを利用できない場合は、setup:upgrade の手順をスキップし、「Skipped setup:upgrade - hyva-exec-shell-cmd skill not available. Run manually: bin/magento setup:upgrade」と報告してください。
テンプレートのプレースホルダー
| プレースホルダー | 説明 | 例 |
|---|---|---|
{{VENDOR}} | ベンダー名(PascalCase) | Acme |
{{MODULE}} | モジュール名(PascalCase) | CustomFeature |
{{vendor_kebabcase}} | ベンダー名(ケバブケース、大文字で分割) | acme |
{{module_kebabcase}} | モジュール名(ケバブケース、大文字で分割) | custom-feature |
{{DESCRIPTION}} | モジュールの説明 | Acme CustomFeature module |
{{SEQUENCE}} | モジュールのシーケンス XML、または空 | <sequence><module name="Magento_Catalog"/></sequence> |
PascalCase から kebab-case への変換
各大文字の前にハイフンを挿入し、小文字に変換してモジュール名を変換します。
| PascalCase | kebab-case |
|---|---|
CustomFeature | custom-feature |
ShoppingCartGraphQl | shopping-cart-graph-ql |
CmsComponents | cms-components |
MyModule | my-module |
他のスキルからの使用
スキルからモジュールを作成する際は、このスキルを参照してください。
To create the module, use the `hyva-create-module` skill with:
- vendor: "Acme"
- module: "CmsComponents"
- dependencies: ["Hyva_CmsBase"]
- composer_require: {"hyva-themes/commerce-module-cms": "*"}
出力例
ベンダーが Acme、モジュールが CmsComponents、依存関係が Hyva_CmsBase の場合:
app/code/Acme/CmsComponents/registration.php:
<?php
declare(strict_types=1);
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Acme_CmsComponents', __DIR__);
app/code/Acme/CmsComponents/composer.json:
{
"name": "acme/module-cms-components",
"description": "Acme CmsComponents module",
"type": "magento2-module",
"require": {
"php": ">=8.1",
"hyva-themes/commerce-module-cms": "*"
},
"autoload": {
"files": ["registration.php"],
"psr-4": {
"Acme\\CmsComponents\\": ""
}
}
}
app/code/Acme/CmsComponents/etc/module.xml:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Acme_CmsComponents">
<sequence>
<module name="Hyva_CmsBase"/>
</sequence>
</module>
</config>