moai-lang-php について
PHP 8.3+、Laravel 11、Symfony 7、ORM、テスト手法を扱うモダンPHP開発スキルです。PHPアプリやAPIの構築と保守に利用できます。
主な機能
- 01PHP 8.3+の言語機能
- 02Laravel 11とEloquent
- 03Symfony 7とDoctrine
- 04PHPUnitとPestのテスト
- 05ComposerとPSR-12規約
活用シーン
- 01Laravel APIの構築
- 02Symfonyコントローラーとサービスの実装
- 03アプリケーションと単体テストの作成
- 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.mdreferences/examples.mdreference.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 | ステータス:有効