mcpField
M
moai-lang-php

moai-lang-php

github.com/modu-ai開発1.2k66 回インストール今日更新
リポジトリ

moai-lang-php について

PHP 8.3+、Laravel 11、Symfony 7、ORM、テスト手法を扱うモダンPHP開発スキルです。PHPアプリやAPIの構築と保守に利用できます。

主な機能

  1. 01PHP 8.3+の言語機能
  2. 02Laravel 11とEloquent
  3. 03Symfony 7とDoctrine
  4. 04PHPUnitとPestのテスト
  5. 05ComposerとPSR-12規約

活用シーン

  1. 01Laravel APIの構築
  2. 02Symfonyコントローラーとサービスの実装
  3. 03アプリケーションと単体テストの作成
  4. 04PHPコーディング規約の設定

インストール

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

$npx skills add https://github.com/modu-ai/moai-adk --skill moai-lang-php

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

同梱ファイル

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

modules/
advanced-patterns.md
references/
examples.md
reference.md

詳細

クイックリファレンス(30秒)

PHP 8.3 以降の開発スペシャリスト — Laravel 11、Symfony 7、Eloquent、Doctrine、モダンな PHP のパターン。

自動トリガー:拡張子が .php の PHP ファイル、composer.json、artisan コマンド、symfony.yaml、Laravel または Symfony に関するディスカッション

主な機能:

  • PHP 8.3 の機能:readonly クラス、型付きプロパティ、属性、列挙型、名前付き引数
  • Laravel 11:コントローラー、モデル、マイグレーション、フォームリクエスト、API リソース、Eloquent
  • Symfony 7:属性ベースのルーティング、Doctrine ORM、サービス、依存性注入
  • ORM:Laravel では Eloquent、Symfony では Doctrine
  • テスト:PHPUnit、Pest、機能テストと単体テストのパターン
  • パッケージ管理:オートロードを使用する Composer
  • コーディング規約:PSR-12、Laravel Pint、PHP CS Fixer
  • Docker:PHP-FPM、nginx、マルチステージビルド
クイックパターン

Laravel コントローラーパターン:

App\Http\Controllers\Api 名前空間に、Controller を継承する UserController を作成します。StoreUserRequest、UserResource、User、JsonResponse をインポートします。StoreUserRequest を受け取る store メソッドを定義し、検証済みデータを使用して User を作成します。ユーザーをラップした UserResource とステータス 201 を含む JsonResponse を返します。

Laravel フォームリクエストパターン:

App\Http\Requests 名前空間に、FormRequest を継承する StoreUserRequest を作成します。authorize メソッドは true を返します。rules メソッドは、name に required、string、max 255 の検証を要求し、email に required、email、users テーブルでの unique の検証を要求し、password に required、min 8、confirmed の検証を要求する配列を返します。

Symfony コントローラーパターン:

App\Controller 名前空間に、AbstractController を継承する UserController を作成します。User、EntityManagerInterface、JsonResponse、Route 属性をインポートします。クラスレベルに、パス api/users を指定する Route 属性を適用します。空のパスと POST メソッドを指定する Route 属性を持つ create メソッドを作成します。EntityManagerInterface を注入し、新しい User を作成して永続化とフラッシュを行った後、ユーザーとステータス 201 を含む JSON レスポンスを返します。


実装ガイド(5分)

PHP 8.3 のモダンな機能

Readonly クラス:

public プロパティとして int id、string name、string email をプロモーションするコンストラクターを持つ readonly クラス UserDTO を宣言します。

メソッドを持つ列挙型:

string を基底型とする OrderStatus 列挙型を作成します。pending 値の Pending、processing 値の Processing、completed 値の Completed をケースとして定義します。$this に対する match 式を使う label メソッドを追加し、各ケースに対応する表示ラベルを返します。

属性:

Attribute 属性を使い、プロパティを対象とする Validate 属性クラスを作成します。コンストラクターは string 型の rule と、省略可能な string 型の message を受け取ります。Validate 属性で required と email のルールを指定した email プロパティを持つ UserRequest クラスを作成します。

Laravel 11 のパターン

リレーションを持つ Eloquent モデル:

App\Models 名前空間に、Model を継承する Post モデルを作成します。protected の fillable 配列に title、content、user_id、status を設定します。protected の casts 配列では、status を PostStatus 列挙型に、published_at を datetime にキャストするよう設定します。BelongsTo リレーションを返す user メソッドを定義します。HasMany リレーションを返す comments メソッドを定義します。published ステータスで絞り込む scopePublished メソッドを追加します。

API リソースのパターン:

App\Http\Resources 名前空間に、JsonResource を継承する PostResource を作成します。toArray メソッドは Request パラメーターを受け取ります。id、title、user リレーションが読み込み済みの場合に UserResource を使う author、whenCounted を使う comments_count、ISO 8601 形式の文字列としてフォーマットした created_at を含む配列を返します。

マイグレーションのパターン:

Migration を継承する無名マイグレーションクラスを作成します。up メソッドで posts テーブルに対する Schema create を呼び出します。id、constrained と cascadeOnDelete を指定した user_id の foreignId、title の string、content の text、デフォルト値を draft とする status の string、timestamps、softDeletes を定義します。

サービスレイヤーのパターン:

App\Services 名前空間に UserService クラスを作成します。UserDTO を受け取る create メソッドを定義します。DB トランザクション内で、DTO のプロパティのデータを使った User の作成と、デフォルトの bio を設定したプロフィールの作成を行い、profile リレーションを読み込んだ user を返します。検証エラーを処理するため、ActiveRecord\RecordInvalid 例外をキャッチします。

Symfony 7 のパターン

Doctrine 属性を使ったエンティティ:

App\Entity 名前空間に User クラスを作成します。repositoryClass に UserRepository を指定した ORM\Entity 属性を適用します。name に users を指定した ORM\Table 属性を適用します。ORM\Id、ORM\GeneratedValue、ORM\Column 属性を付けた private nullable int の id を追加します。長さを 255 に指定した ORM\Column 属性と Assert\NotBlank を付けた private nullable string の name を追加します。長さを 180 に指定し、unique を設定した ORM\Column 属性と Assert\Email を付けた private nullable string の email を追加します。

依存性注入を使ったサービス:

App\Service 名前空間に UserService クラスを作成します。コンストラクターでは、プロパティプロモーションを使って readonly EntityManagerInterface と readonly UserPasswordHasherInterface を受け取ります。email と password の文字列を受け取る createUser メソッドを定義します。新しい User を作成し、email を設定して、パスワードハッシャーでパスワードをハッシュ化します。エンティティマネージャーで永続化して flush し、user を返します。

テストのパターン

Laravel 用 PHPUnit フィーチャーテスト:

Tests\Feature 名前空間に、RefreshDatabase トレイトを使う TestCase 継承の UserApiTest を作成します。test_can_create_user メソッドでは、name、email、password、password_confirmation を指定して api/users に JSON を POST します。ステータス 201 と、id、name、email を含む data を持つ JSON 構造をアサートします。email を持つ users テーブルのレコードがデータベースに存在することをアサートします。

Laravel 用 Pest テスト:

App\Models\User と Post を使います。can create a post の it 関数を使ったテストを作成します。ファクトリーでユーザーを作成します。actingAs にユーザーを渡し、title と content を指定して api/posts に JSON を POST します。ステータス 201 をアサートし、Post の件数が 1 であることを期待します。認証なしで投稿するとステータス 401 になることをアサートする、requires authentication の 2 つ目のテストを作成します。


高度な実装(10 分以上)

以下を含む包括的な内容について:

  • Docker と Kubernetes を使った本番環境へのデプロイパターン
  • オブザーバー、アクセサー、ミューテーターなどの高度な Eloquent パターン
  • 埋め込み可能なオブジェクトと継承を使った Doctrine の高度なマッピング
  • キューとジョブの処理
  • イベント駆動型アーキテクチャ
  • Redis と Memcached を使ったキャッシュ戦略
  • OWASP のパターンに沿ったセキュリティのベストプラクティス
  • CI/CD 統合パターン

以下を参照してください:

  • 完全版の高度なパターンガイドについては、modules/advanced-patterns.md を参照してください。

Context7 ライブラリのマッピング

  • laravel/framework:Laravel ウェブフレームワーク用
  • symfony/symfony:Symfony コンポーネントおよびフレームワーク用
  • doctrine/orm:PHP 用 Doctrine ORM
  • phpunit/phpunit:PHP テストフレームワーク
  • pestphp/pest:洗練された PHP テストフレームワーク
  • laravel/sanctum:Laravel API 認証用
  • laravel/horizon:Laravel キューダッシュボード用

相性の良いもの

  • moai-domain-backend:REST API およびマイクロサービスアーキテクチャ用
  • moai-domain-database:SQL パターンおよび ORM 最適化用
  • moai-workflow-testing:DDD およびテスト戦略用
  • moai-platform-deploy:Docker およびデプロイパターン用
  • moai-essentials-debug:AI を活用したデバッグ用
  • moai-foundation-quality:TRUST 5 品質原則用

トラブルシューティング

よくある問題:

PHP バージョンの確認:

バージョンフラグを付けて php を実行し、8.3 以降であることを確認します。-m フラグを付けて php を実行し、grep にパイプして pdo、mbstring、openssl 拡張機能を確認します。

Composer のオートロードに関する問題:

-o フラグを付けて composer dump-autoload を実行し、最適化されたオートローダーを生成します。composer clear-cache を実行してパッケージキャッシュを消去します。

Laravel のキャッシュに関する問題:

php artisan config:clear を実行して設定キャッシュを消去します。php artisan cache:clear を実行してアプリケーションキャッシュを消去します。php artisan route:clear を実行してルートキャッシュを消去します。php artisan view:clear を実行してコンパイル済みビューを消去します。

Symfony のキャッシュに関する問題:

php bin/console cache:clear を実行してキャッシュを消去します。php bin/console cache:warmup を実行してキャッシュをウォームアップします。

データベース接続:

DB::connection()->getPdo() の呼び出しを try-catch ブロックで囲みます。接続に成功した場合は成功メッセージを出力し、失敗した場合は例外メッセージを出力します。

マイグレーションのロールバック:

php artisan migrate:rollback に step 1 を指定して、最後のマイグレーションをロールバックします。開発環境のリセットに限り、seed フラグを付けて php artisan migrate:fresh を使用します。Symfony の場合は、php bin/console doctrine:migrations:migrate prev を使用してロールバックします。


バージョン:1.1.0 | 更新日:2026-01-11 | ステータス:有効

コメント