mcpField
C
craftcms

craftcms

github.com/michtio開発8687 回インストール1 日前に更新
リポジトリ

craftcms について

craftcmsは、プラグイン、モジュール、カスタム要素・フィールドタイプ、バックエンド連携でCraft CMS 5を拡張する開発者向けのリファレンススキルです。タスク別にCraft APIの要点と実装時の注意点をまとめています。

主な機能

  1. 01プラグインとモジュールの開発ガイド
  2. 02カスタム要素とフィールドタイプ
  3. 03コントローラー、マイグレーション、イベント
  4. 04コントロールパネルとバックエンド連携
  5. 05タスクに応じたリファレンス選択
  6. 06Craft実装での横断的な注意点

活用シーン

  1. 01カスタム要素タイプやフィールドタイプの構築
  2. 02Webhookエンドポイントやキュージョブの追加
  3. 03プラグイン設定ページやダッシュボードウィジェットの作成
  4. 04Craftの設定やマイグレーション動作の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/michtio/craftcms-claude-skills --skill craftcms

インストール後、Claude Code で/craftcmsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
architecture.md
caching.md
conditions.md
config-app.md
config-bootstrap.md
config-general-extended.md
config-general.md
console-commands.md
controllers.md
cp-components.md
cp-ui-patterns.md
cp.md
debugging.md
deployment.md
drafts-revisions.md
element-authorization.md
element-index.md
elements.md
email.md
events.md
field-types-custom.md
fields.md
graphql.md
identity-protocols.md
migrations.md
permissions.md
plugin-vite.md
quality.md
queue-jobs.md
sessions-and-auth.md

詳細

Craft CMS 5 — 拡張(プラグインとモジュール)

プラグインとモジュールを通じて Craft CMS 5 を拡張するためのリファレンスです。エレメントやサービスから、コントローラー、マイグレーション、フィールド、イベントまで、幅広く扱います。

このスキルの対象は Craft の拡張です。プラグイン、モジュール、カスタムエレメントタイプ、フィールドタイプ、バックエンド連携を構築します。サイト/プラットフォームの開発(コンテンツモデリング、セクション、エントリータイプ、Twig テンプレート、プラグインの選定)については、craft-site スキルを参照してください。

関連スキル — 必ず一緒に読み込む

このスキルが適用された場合は、次のスキルも読み込んでください。

  • craft-php-guidelines — PHPDoc の規約、セクションヘッダー、命名規則、クラスの構成、ECS/PHPStan、検証チェックリストを扱います。PHP コードには必須です。
  • ddev — すべてのコマンドは DDEV 経由で実行します。ECS、PHPStan、スキャフォールディング、テストの実行に必須です。
  • craft-garnish — CP JavaScript、アセットバンドル、またはインタラクティブな CP コンポーネントを扱う場合に使用します。Garnish のクラスシステム、UI ウィジェット(Modal、HUD、DisclosureMenu、Select)、ドラッグシステム、Craft.* JS クラスパターンを扱います。
  • craft-pest — テストの作成、実行、修正、レビューを行う場合に使用します。markhuot/craft-pest-core のハーネス、データベース分離(ロールバックはオプトインで、環境変数のオーバーライドは作業ディレクトリに依存します。どちらも開発データベースへの書き込みを気づかれないまま発生させる原因になります)、ファクトリー、HTTP/キュー/DB のアサーション、CI のテストジョブを扱います。
  • craft-cloud — プロジェクトが Craft Cloud でホストされている場合に使用します(リポジトリのルートにある craft-cloud.yaml、または composer.json 内の craftcms/cloud で判定します)。プラグインの Cloud 互換性に関する制約に必須です。App::isEphemeral() ガード、アセットバンドルの CDN 公開、キュージョブの 15 分間の上限、トークンをそのまま出力する代わりの csrfInput() 関数、cloud/up のデプロイライフサイクルイベントを扱います。

ドキュメント

リファレンスファイルだけでは詳細が足りない場合は、該当するドキュメントページで WebFetch を使用してください。

よくある落とし穴(分野横断)

  • beforePrepare() では必ず addSelect() を使用してください。これは Craft の規約であり、複数の拡張がカラムを追加する場合にも安全に追加できます。
  • キューワーカーはプライマリサイトのコンテキストで実行されます。複数サイトを対象にクエリを実行する場合は ->site('*') を使用してください。
  • getConfig() に id を含めないでください。プロジェクト設定では UID を使用し、データベース ID は使用しません。
  • モデルやコントローラーにビジネスロジックを記述しないでください。ロジックはサービスに実装します。
  • モジュールでは、テンプレートルート、翻訳、controllerNamespace を手動で登録する必要があります。自動では登録されません。
  • エレメント/クエリでは DateTimeHelper、サービスでは Carbon を使用してください。同じクラス内で混在させないでください。
  • CP URL に /admin をハードコードしないでください。cpTrigger は設定可能です。PHP では UrlHelper::cpUrl()、Twig では cpUrl() を使用してください。
  • 分割設定ページで $request->getBodyParams() をそのまま savePluginSettings() に渡さないでください。送信されたキーのみが保存され、ほかの設定は何も通知されずに失われます。先に設定モデル全体を読み込み、プロパティを更新してから保存してください。
  • ルートまたはクエリパラメーターに token という名前を付けないでください。Craft の予約済み tokenParam と衝突し、コントローラーが実行される前にリクエストが 400 エラーで拒否されます。controllers.md(予約済みリクエストパラメーター)を参照してください。
  • プラグインの templates/ ディレクトリ内で、アンダースコアで始まらないテンプレートはすべて CP から直接ルーティング可能であり、コントローラーの beforeAction() によるゲートを迂回します。意図的に直接ルートにするテンプレート以外は、すべて先頭にアンダースコアを付けてください。cp.md(CP テンプレートがコントローラーを迂回するルーティング)を参照してください。

リファレンスファイル

タスクに関連するリファレンスファイルを読んでください。複数のファイルが関連することもよくあります。 タスクの例:

  • 「カスタム要素タイプを作成する」→ elements.md(まず Architecture セクション)+ element-index.md + fields.md + migrations.md + cp.md を読む
  • 「階層型/ツリー型の要素タイプを作成する」→ elements.md(Architecture:One Element Class with Native Structure)を読む
  • 「Webhook エンドポイントを追加する」→ controllers.md + events.md を読む
  • 「要素を同期するキュージョブを作成する」→ queue-jobs.md + elements.md + debugging.md を読む
  • 「フォームフィールド付きの設定ページを追加する」→ controllers.md + cp.md + architecture.md を読む
  • 「カスタムフィールドタイプを登録する」→ fields.md + events.md を読む
  • 「PHPStan のエラーを修正する」→ quality.md を読む
  • 「ダッシュボードウィジェットを追加する」→ cp-components.md(Dashboard Widgets)+ events.md(Widget Types セクション)を読む
  • 「プラグインユーザー向けにテンプレート変数を公開する」→ events.md(Twig Extensions セクション)を読む
  • 「エントリーにカスタムメソッドを追加する」→ events.md(Behaviors セクション)を読む
  • 「カスタム要素タイプまたはフィールドタイプを登録する」→ events.md(Registration Pattern → Registration scope — never gate by request context)を読む
  • 「ゴミ箱に入れたカスタム要素が削除されない/gc がパージしない/elements テーブルの行が増え続ける」→ events.md(Registration Pattern → Registration scope)を読む
  • 「CP ユーティリティページを作成する」→ cp-components.md(Utility Pages)+ events.md(Utilities セクション)を読む
  • 「プラグインの CP アセットに Vite を設定する」→ plugin-vite.md を読み、craft-garnish スキルを読み込む
  • 「CP ページにドラッグ並べ替えやインタラクティブな JS を追加する」→ craft-garnish スキルを読み込む
  • 「カスタムフィールドタイプ向けの CP JavaScript を書く」→ fields.md を読み、craft-garnish スキルを読み込む
  • 「ヘッドレス Craft API を構築する」→ graphql.md を読み、headless.md のために craft-site スキルを読み込む
  • 「Next.js フロントエンド向けにプレビューを設定する」→ headless.md のために craft-site スキルを読み込む
  • 「プラグイン向けに Pest テストを設定する」→ craft-pest スキルを読み込む → isolation.md
  • 「コントローラーアクションのテストを書く」→ craft-pest スキルを読み込む → patterns.md
  • 「テストが開発用データベースに書き込まれる/大量の不要な要素が作成された」→ craft-pest スキルを読み込む → isolation.md
  • 「コードからサイトを作成または削除する(インポーター、プロビジョニングコマンド、フィクスチャ)」→ architecture.md(Creating or deleting sites at runtime)を読む
  • 「サイト作成後、要素クエリが siteId でフィルタリングされなくなった」→ architecture.md(Creating or deleting sites at runtime — refreshSites() は variant queries の読み取りを無効化しません)を読む
  • 「サイトを削除したが、セクション/カテゴリグループがまだ参照している」→ architecture.md(Creating or deleting sites at runtime — deleteSite() によるプルーニングとメモ化されたサービスキャッシュの関係)を読む
  • 「レコードの dateUpdated を基準日時と比較する/「変更日時」のフィルターが数時間ずれる」→ architecture.md(Those strings are naive UTC)を読む
  • 「ActiveRecord から datetime カラムを読み取り、モデルに格納する」→ architecture.md(Record-to-Model Hydration Boundary)を読む
  • 「['like', ...] を使った要素クエリで何も返ってこない」→ architecture.md(Element-query param setters don't take Yii operator tuples)を読む
  • 「タイトル/スラッグの接頭辞で要素を照合する」→ architecture.md(Element-query param setters don't take Yii operator tuples)を読む
  • 「キャッシュとセッション用に Redis を設定する」→ config-app.md を読む
  • 「PHP セッションをデータベースに保存する(ロードバランサー、Redis なし)」→ config-app.md(Session Component — craft\web\DbSession、setup/php-session-table)を読む
  • 「本番環境用の環境変数を設定する」→ config-bootstrap.md を読む
  • 「GeneralConfig の設定を探す」→ config-general.md を読む
  • 「プラグインコードで設定値を読み取る(App::env、parseEnv、GeneralConfig)」→ config-bootstrap.md + config-general.md を読む
  • 「プラグインコードで allowAdminChanges が有効か確認する」→ config-general.md + cp.md(Read-Only Mode)を読む
  • 「プラグイン設定内の環境変数($MY_API_KEY)を解決する」→ config-bootstrap.md(App::parseEnv)を読む
  • 「CRAFT_* 環境変数の規則を理解する」→ config-bootstrap.md を読む
  • 「メールトランスポート/SMTP を設定する」→ config-app.md を読む
  • 「カスタム URL ルートを設定する」→ config-bootstrap.md を読む
  • 「短い単語を検索できるように検索を設定する」→ config-app.md を読む
  • 「GraphQL トークンとスキーマを設定する」→ graphql.md + config-general.md を読む
  • 「Craft 5.11 へのアップグレード後に GraphQL の author/uploader フィールドが消えた」→ graphql.md(Craft 5.11 Additions — "Query for users" scope)を読む
  • 「アクセスの多いサイト向けにキャッシュを設定する」→ caching.md を読む
  • 「プラグイン用のカスタム権限を登録する」→ permissions.md を読む
  • 「テンプレートでユーザー権限を確認する」→ permissions.md を読む
  • 「プラグインのエディション/機能制限を設定する」→ architecture.md(Plugin Editions セクション)を読む
  • 「流れるようなレンダービルダー/craft.plugin.widget().render() を構築する」→ architecture.md(Render builders: attribute merging, option allowlists)を読む
  • 「サイトからプラグインのフロントエンド CSS を上書きできない/プラグインのスタイルが優先される」→ architecture.md(プラグイン登録の CSS はサイトのスタイルシートの後に読み込まれる)を読む
  • 「プラグインの JS が同梱テンプレートでは動作するが、ユーザー作成のテンプレートでは動作しない」→ architecture.md(JS とマークアップ間の契約は公開 API)を読む
  • 「レジストリ/ジェネレーター出力からドキュメント/スキーマ/型を生成すると、インストール環境やエディションによって結果が異なる」→ quality.md(Generated Artifacts Must Not Read Runtime Registries)を読む
  • 「リリースを作成する/バージョンにタグを付ける/Packagist で新しいバージョンが配信されない」→ craft-plugin-release スキルを読み込む
  • 「サイトを削除したが、プラグインのサイトごとの行がまだ残っている」→ architecture.md(サイトの削除はソフト削除)を読む
  • 「キャッシュした false/キャッシュが false を返すため、キャッシュミスかどうか判断できない」→ caching.md(Data Caching → boolean sentinel idiom)を読む
  • 「プラグイン/運用設定(しきい値、通知の振り分け、ワークフローのマッピング)は、プロジェクト設定と DB のどちらに置くべきか」→ architecture.md(設定はプロジェクト設定に置く)を読む
  • 「環境間での変更を避けるため、しきい値は DB のみに置くべきか」→ architecture.md(設定はプロジェクト設定に置く)を読む — これは誤解なので正す必要があります
  • 「プラグインを Craft 4 から 5 にアップグレードする」→ quality.md(Rector セクション)を読む
  • 「Craft プラグインの CI を設定する」→ quality.md(CI/CD Integration セクション)を読む
  • 「マイグレーションでセクションまたはフィールドを作成する」→ migrations.md(Content Migrations セクション)を読む
  • 「インストールが 'Too many keys specified; max 64 keys allowed' で失敗する/インデックスが重複して増え続ける」→ migrations.md(再実行可能なインデックス作成と MySQL の 64 キー上限)を読む
  • 「モジュールのマイグレーションを実行する/--track=module が拒否される/ライブラリに同梱されたモジュールのスキーマが適用されない」→ migrations.md(モジュールとライブラリに同梱されたモジュールには CLI トラックがない)を読む
  • 「プラグインのアップグレードで保存された不正なプロジェクト設定値を修正する」→ migrations.md(マイグレーション内で ProjectConfig::flush() を呼び出さない)を読む
  • 「プログラムからユーザーの一時停止を解除/復元する/解除後もユーザーがロックアウトされたまま」→ elements.md(getStatus() は併存する状態を隠す)を読む
  • 「settingsAttributes() をオーバーライドする必要はありますか?」→ field-types-custom.md(settingsAttributes() に実際に含まれるもの)を読む
  • 「データベースの読み取りレプリカを設定する」→ config-app.md(Database Replicas セクション)を読む
  • 「app.php にモジュールを登録する」→ config-app.md(Module Registration セクション)を読む
  • 「カスタムバリデーターを作成する」→ architecture.md(Custom Validators セクション)を読む
  • 「カスタムファイルシステムタイプを作成する」→ events.md(Filesystem Types セクション)を読む
  • 「要素インデックス用のカスタム条件ルールを構築する」→ cp-ui-patterns.md(Condition Builders)を読む
  • 「3 状態(オン/継承/オフ)のコントロールを構築する」→ cp-ui-patterns.md(Tri-State Inheritance Controls)を読む
  • 「プラグインにタブ付き設定ページを追加する」→ cp.md(Tabbed Settings Pages)を読む
  • 「プラグインが config/.php によるオーバーライドをサポートする場合、設定画面はどう動作させるべきか?」→ cp.md(Settings Pages → Config-file overrides: フィールドを無効にせず、フィールド上に警告を表示する)を読む
  • 「設定が保存されても何も変わらない/設定ファイルが暗黙的に優先される」→ cp.md(Settings Pages → Config-file overrides)を読む
  • 「URL タブで移動できないのはなぜか/別ページにはタブとサイドバーナビゲーションのどちらを使うべきか?」→ cp.md(タブはペインを切り替えるものであり、ページ遷移はしません)を読む
  • 「CP のインデックス/一覧画面を構築する:カラム、コピーチップ、行アクション」→ cp-ui-patterns.md(Index-screen column scheme)+ cp-components.md(VueAdminTable)を読む
  • 「VueAdminTable で見出しが切れる/紹介文や New ボタンはどこに置くべきか?」→ cp-components.md(VueAdminTable → sole pane content)を読む
  • 「ユーティリティアイコンが表示されない/icon() のパス」→ cp-components.md(Utility Pages)を読む
  • 「レイアウト要素の Visibility/Editability 条件ビルダーを非表示にする」→ fields.md(条件ビルダーを抑制する)を読む
  • 「フィールドに「グローバル設定をオーバーライドします」という警告を表示する」→ cp-ui-patterns.md(Field Warning Parameter)を読む
  • 「Craft CP で使われている CSS 変数/デザイントークンを知る」→ cp-ui-patterns.md(Craft CSS Custom Properties — color/status/spacing/radius/control/focus/font tokens)を読む
  • 「ブール値の設定には Lightswitch とチェックボックスのどちらがよいか?」→ cp.md(Form Macros Reference → Lightswitch vs checkbox)を読む
  • 「コピー用テキスト/API キー/Webhook URL のフィールドを表示する」→ cp.md(Form Macros Reference → copytextField)を読む
  • 「保存/削除/追加ボタンにはどのボタンクラスを使うべきか?」→ cp.md(Form Macros Reference → Button modifier classes)を読む
  • 「CP ペインに内側のサイドバーサブナビゲーションを追加する」→ cp.md(Form Macros Reference → Inner sidebar navigation)を読む
  • 「設定ページにインライン編集可能なテーブルを追加する」→ cp-components.md(Editable Table Field)を読む
  • 「CP でモーダルまたは確認ダイアログを表示する(Craft.confirm() はありません)」→ cp-components.md(Modals)を読み、動作については craft-garnish スキルを読み込む
  • 「リレーションフィールドの表示モード/previewMode/maxRelations にはどのようなものがあるか?」→ element-index.md(Relation Field Display/Props)を読む
  • 「Tip/Heading/組み込み UI 要素をフィールドレイアウトに追加する」→ fields.md(Field-Layout UI Elements Reference)を読む
  • 「要素編集画面のサイドバーにパネルを追加する」→ cp-ui-patterns.md(Element Edit Screen)+ elements.md(EVENT_DEFINE_SIDEBAR_HTML)を読む
  • 「要素の上部ツールバーに分割ボタンを追加する」→ cp-ui-patterns.md(Element Edit Screen → toolbar split button)+ elements.md(EVENT_DEFINE_ADDITIONAL_BUTTONS)を読む
  • 「サイドバーパネルがスタイルなしで表示される/見た目がおかしいのはなぜか?」→ cp-ui-patterns.md(Element Edit Screen → .meta と .meta read-only)を読む
  • 「カスタム要素で metaFieldsHtml() をオーバーライドする」→ cp-ui-patterns.md(Element Edit Screen → metaFieldsHtml override)を読む
  • 「コード品質向上のために pre-commit フックを設定する」→ quality.md(Pre-Commit Hooks セクション)を読む
  • 「ユーザーグループごとに要素へのアクセスを制限する」→ element-authorization.md + permissions.md を読む
  • 「CP の要素インデックスを権限でスコープする」→ element-authorization.md(Layer 3: Query Scoping)を読む
  • 「カスタム要素に認可イベントを追加する」→ element-authorization.md + elements.md を読む
  • 「セキュリティプラグインの多層防御を構築する」→ element-authorization.md(Defense Patterns)を読む
  • 「ユーザーをすべてのデバイスから強制ログアウトさせる」→ sessions-and-auth.md(Plugin Patterns)を読む
  • 「Craft のセッションの仕組みを理解する」→ sessions-and-auth.md を読む
  • 「パスワードリセットを必須にする」→ sessions-and-auth.md(passwordResetRequired Gap)を読む
  • 「Users 要素インデックスにカラムを追加する」→ element-index.md(イベントを使った要素インデックスの拡張)を読む
  • 「要素インデックスに一括アクションを追加する」→ element-index.md(カスタム一括アクションの追加)を読む
  • 「要素ごとの編集画面メニューにアクションを追加する」→ element-index.md(要素ごとの編集画面アクションメニュー)を読む
  • 「テーブルカラムにステータスピルを表示する」→ element-index.md(テーブル属性のステータスピル)を読む
  • 「要素インデックスにカスタムサイドバーソースを追加する」→ element-index.md(サイドバーソースの追加)を読む
  • 「カスタムフィールドタイプを構築する」→ field-types-custom.md + fields.md を読む
  • 「リレーションフィールドタイプを構築する」→ field-types-custom.md(Relation Fields)を読む
  • 「エントリーインデックスに条件ルールを追加する」→ conditions.md + element-index.md を読む
  • 「カスタム条件ルールを構築する」→ conditions.md を読む
  • 「プラグインからメールを送信する」→ email.md を読む
  • 「カスタムシステムメッセージを登録する」→ email.md(カスタムシステムメッセージの登録)を読む
  • 「SMTP トランスポートを設定する」→ config-app.md + email.md を読む
  • 「Craft CMS を本番環境にデプロイする」→ deployment.md を読む
  • 「Craft プロジェクトの CI/CD を設定する」→ deployment.md(CI/CD Patterns)を読む
  • 「ダウンタイムなしでデプロイする」→ deployment.md(Zero-Downtime)を読む
  • 「失敗したデプロイをロールバックする」→ deployment.md(Rollback Strategies)を読む
  • 「ドラフトとリビジョンを扱う」→ drafts-revisions.md を読む
  • 「プログラムからドラフトを作成する」→ drafts-revisions.md(ドラフトの作成)を読む
  • 「afterSave でドラフトに対する副作用をスキップする」→ drafts-revisions.md(Plugin Considerations)を読む
  • 「カスタム要素に生成フィールドを追加する」→ elements.md(Generated Fields)を読む
  • 「チップまたはカードとしての要素の表示をカスタマイズする」→ element-index.md(Element Display Modes)を読む
  • 「ユーザー編集ページに画面を追加する」→ elements.md(Extending User Edit Screens)を読む
  • 「allowAdminChanges がオフのときにプラグイン設定を読み取り専用にする」→ cp.md(Read-Only Mode)を読む
  • 「プラグインの設定ページにタブを追加する」→ cp.md(Settings Pages → タブまたはカスタムアクションを使用する)を読む。settingsHtml() は単一ペイン専用です。タブを使うにはカスタムコントローラーを用意し、_layouts/cp を直接拡張するテンプレートが必要です。
  • 「プラグイン専用の CP セクション内にプラグイン設定を表示する(グローバル設定/プラグイン画面ではなく)」→ cp.md(Settings Pages → 設定をプラグイン専用の CP セクション内に配置する)を読む
  • 「プラグインを Cloud 対応にする」→ craft-cloud スキルを読み込む → plugin-development.md(一時ファイルシステム、アセットバンドルの制約、キュー上限、CSRF 関数、Cookie を使用しない設計)
  • 「Craft プロジェクトを Cloud にデプロイする」→ craft-cloud スキルを読み込む → config-file.md + deploy-pipeline.md + extension.md
  • 「セルフホストの Craft サイトを Cloud に移行する」→ craft-cloud スキルを読み込む → migration.md
  • 「プラグインによるファイル書き込みが Cloud で何も通知されずに失敗するのはなぜか?」→ craft-cloud スキルを読み込む → plugin-development.md(一時ファイルシステム)+ extension.md(App::isEphemeral)
  • 「SSO/OIDC ログインまたは SCIM プロビジョニング機能を構築する」→ identity-protocols.md + sessions-and-auth.md を読む
  • 「シングルログアウト/logout_token/プロバイダー起点のデプロビジョニングを扱う」→ identity-protocols.md を読む タスクに必要なリファレンスファイルのみを読み込んでください。ファイルごとに、毎回入力トークンを消費します。 | タスク | 参照先 | 約トークン数 | |------|------|--------:| | エレメントの基礎:ライフサイクル、クエリ、ステータス、認可、下書き、リビジョン、伝播、フィールドレイアウト、ユーザー編集画面、イベント | references/elements.md | 8.4K | | エレメントインデックス:ソース、テーブル/カード属性、ステータスピル、並べ替え、条件、アクション(一括およびエレメントごとのアクションメニュー)、エクスポーター、サイドバー、メタデータ、リレーションフィールドの表示/プロパティ(viewMode、previewMode、maxRelations)、イベントによる拡張 | references/element-index.md | 6.1K | | サービス、モデル、レコード、プロジェクト設定(ランタイムでのサイト作成/削除キャッシュを含む)、MemoizableArray、イベント、API クライアント、カスタムバリデーター | references/architecture.md | 7.4K | | コントローラー:CP の CRUD、Webhook、API エンドポイント、アクションのルーティング、認可 | references/controllers.md | 3.9K | | CP テンプレート、フォームマクロ(lightswitch と checkbox の違い、copytext、money、ボタンのクラスを含む)、設定ページ、ナビゲーション(内側のサイドバーナビゲーションを含む)、権限、読み取り専用モード | references/cp.md | 7.2K | | CP コンポーネント:ダッシュボードウィジェット、ユーティリティページ、スライドアウトエディター、Ajax、編集可能なテーブル、スピナー、モーダル(マークアップとシェード)、アラート | references/cp-components.md | 1.8K | | CP UI パターン:3 状態コントロール、ステータスインジケーター、セマンティック CSS トークン(色/ステータス/間隔/角丸/コントロール/フォーカス/フォント)、条件ビルダー、アセットバンドル、エレメント編集画面のサイドバーパネルとツールバーの分割ボタン | references/cp-ui-patterns.md | 3.4K | | データベースマイグレーション、Install.php、外部キー、インデックス、冪等性、デプロイ | references/migrations.md | 3.9K | | キュージョブ、BaseJob、TTR、再試行、進捗、バッチジョブ、サイトコンテキスト | references/queue-jobs.md | 4.2K | | コンソールコマンド、引数、オプション、プログレスバー、出力ヘルパー、再保存アクション | references/console-commands.md | 6.0K | | デバッグ、パフォーマンス、クエリ戦略、プロファイリング、Xdebug、キャッシュ、ロギング | references/debugging.md | 4.6K | | PHPStan、ECS、コードレビューのチェックリスト | references/quality.md | 3.5K | | テスト:craft-pest スキルへの案内(Pest/craft-pest-core はその中にあります)と Codeception の基本 | references/testing.md | 0.6K | | フィールドタイプ、ネイティブフィールド、BaseNativeField、フィールドレイアウト要素(組み込みの Tip/Heading/LineBreak/HorizontalRule のリファレンス)、FieldLayoutBehavior | references/fields.md | 3.6K | | イベント:登録、ライフサイクル、命名規則、カスタムイベント、ビヘイビア、Twig 拡張機能、ユーティリティ、ウィジェット、ファイルシステム | references/events.md | 4.4K | | GraphQL の型、クエリ、ミューテーション、ディレクティブ、スキーマコンポーネント、リゾルバー | references/graphql.md | 4.6K | | プラグインの Vite:VitePluginService、CP アセットバンドル、HMR、TypeScript、CP での Vue | references/plugin-vite.md | 2.7K | | ヘッドレスとハイブリッド:headlessMode、GraphQL API、CORS、プレビュー用トークン、フロントエンドフレームワーク | craft-site スキルの references/headless.md | 3.4K | | GeneralConfig(システム、ルーティング、セキュリティ、ユーザー、セッション、検索、アセット、画像) | references/config-general.md | 8.4K | | GeneralConfig(コンテンツ、テンプレート、パフォーマンス、GC、ローカライズ、ヘッドレス、GraphQL、アクセシビリティ) | references/config-general-extended.md | 7.2K | | アプリ設定:キャッシュ、セッション、キュー、ミューテックス、メーラー/SMTP、検索、ロギング、CORS、DB レプリカ | references/config-app.md | 5.5K | | 設定のブートストラップ:環境変数、エイリアス、優先順位、fluent API、custom.php、db.php、routes.php | references/config-bootstrap.md | 3.6K | | キャッシュ:テンプレートキャッシュタグ、データキャッシュ、静的キャッシュ(Blitz)、CDN、階層化戦略、無効化 | references/caching.md | 5.2K | | 権限:組み込みハンドル、ユーザーグループ、カスタム登録、Twig/PHP でのチェック、認可イベント | references/permissions.md | 4.7K | | エレメントの認可:4 層の防御モデル、認可イベント、can*() メソッド、クエリのスコープ設定 | references/element-authorization.md | 4.6K | | セッションと認証の内部構造:2 層のセッションモデル、認証トークン、セッションの無効化、昇格セッション | references/sessions-and-auth.md | 3.0K | | SSO/プロビジョニングプラグイン向けの ID プロトコル:バックチャネルとフロントチャネルのログアウト、署名アルゴリズムの許可リスト、issuer とテナンシー(hd クレーム)、SCIM の active:false と PATCH の順序、ベンダーによる RFC からの逸脱 | references/identity-protocols.md | 1.3K | | カスタムフィールドタイプ:構築パターン、値のライフサイクル、設定、入力 HTML、バリデーション、検索、GraphQL | references/field-types-custom.md | 3.5K | | 条件フレームワーク:BaseCondition、ElementCondition、カスタム条件ルール、ルールの登録 | references/conditions.md | 2.3K | | メールシステム:システムメッセージ、カスタムメッセージ、プログラムからの送信、テンプレート、イベント、テスト | references/email.md | 2.4K | | デプロイ:標準パイプライン、プロジェクト設定のデプロイ、ゼロダウンタイム、CI/CD、ロールバック | references/deployment.md | 2.5K | | 下書きとリビジョン:下書きの種類、仮下書き、自動保存、適用、マージ、リビジョン | references/drafts-revisions.md | 2.5K |

プラグインとモジュールの違い

プラグインとモジュールは、同じアーキテクチャパターンを共有しています。違いは、ブートストラップと登録方法にあります。

機能プラグインモジュール
CP テンプレートルート自動(ハンドルによる)EVENT_REGISTER_CP_TEMPLATE_ROOTS を使って手動で登録
サイトテンプレートルートイベントを使って手動で登録同じ — どちらも手動で登録
翻訳カテゴリ自動(ハンドルによる)init() で PhpMessageSource を手動で登録
設定モデル組み込みの createSettingsModel()環境変数、設定ファイル、またはプライベートプラグイン(_ プレフィックス)
インストールマイグレーションmigrations/Install.phpコンテンツマイグレーションのみ
コンソールコマンドcontrollerNamespace により自動登録parent::init() の前に設定し、ブートストラップする必要があります
CP ナビゲーションセクション$hasCpSection = trueEVENT_REGISTER_CP_NAV_ITEMS
プロジェクト設定設定は自動的に追跡ProjectConfig::set() のみで手動登録
名前空間エイリアスComposer により自動登録Craft::setAlias() の呼び出しが必要
モジュールテンプレートルートの登録
use craft\events\RegisterTemplateRootsEvent;
use craft\web\View;

Event::on(View::class, View::EVENT_REGISTER_CP_TEMPLATE_ROOTS,
    function(RegisterTemplateRootsEvent $event) {
        $event->roots['my-module'] = __DIR__ . '/templates';
    }
);
モジュール翻訳の登録
Craft::$app->i18n->translations['my-module'] = [
    'class' => \craft\i18n\PhpMessageSource::class,
    'sourceLanguage' => 'en',
    'basePath' => __DIR__ . '/translations',
    'allowOverrides' => true,
];
モジュールコンソールコマンドの登録
public function init()
{
    Craft::setAlias('@mymodule', __DIR__);

    if (Craft::$app->getRequest()->getIsConsoleRequest()) {
        $this->controllerNamespace = 'modules\\mymodule\\console\\controllers';
    } else {
        $this->controllerNamespace = 'modules\\mymodule\\controllers';
    }

    parent::init(); // MUST come after setting controllerNamespace
}

コンソールコマンドを検出できるようにするには、モジュールを config/app.php でブートストラップする必要があります。

コメント