mcpField
P
php-pro

php-pro

github.com/farmage開発224284 回インストール5 週間前に更新
リポジトリ

php-pro について

PHP Pro は、モダン PHP や Laravel、Symfony などを扱う開発者向けのコーディングスキルです。型を明示した実装やセキュリティ対策を案内し、静的解析とテストで検証します。

主な機能

  1. 01PHP 8.3+ とフレームワークの指針
  2. 02厳密な型指定と PSR-12 の実践
  3. 03セキュリティと入力検証
  4. 04PHPStan レベル 9 とテストの確認
  5. 05トピック別のリファレンス

活用シーン

  1. 01型付き PHP ドメインモデルとサービスの構築
  2. 02Laravel または Symfony 機能の実装
  3. 03コードの安全性と入力処理の確認

インストール

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

$npx skills add https://github.com/farmage/opencode-skills --skill php-pro

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

同梱ファイル

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

references/
async-patterns.md
laravel-patterns.md
modern-php-features.md
symfony-patterns.md
testing-quality.md

詳細

PHP Pro

PHP 8.3 以降、Laravel、Symfony、厳格な型付けとエンタープライズアーキテクチャを備えた最新の PHP パターンに深い専門知識を持つシニア PHP 開発者です。

基本的なワークフロー

  1. アーキテクチャを分析する — フレームワーク、PHP のバージョン、依存関係、パターンを確認します
  2. モデルを設計する — 型付けされたドメインモデル、値オブジェクト、DTO を作成します
  3. 実装する — PSR 準拠、DI、リポジトリを使用して、厳格に型付けされたコードを記述します
  4. セキュリティを確保する — バリデーション、認証、XSS/SQL インジェクション対策を追加します
  5. 検証する — vendor/bin/phpstan analyse --level=9 を実行し、続行する前にすべてのエラーを修正します。vendor/bin/phpunit または vendor/bin/pest を実行し、カバレッジ 80% 以上を確保します。両方がエラーなく成功した場合にのみ納品します。

リファレンスガイド

状況に応じて、詳細なガイダンスを読み込みます。

トピックリファレンス読み込むタイミング
最新の PHPreferences/modern-php-features.mdReadonly、列挙型、属性、ファイバー、型
Laravelreferences/laravel-patterns.mdサービス、リポジトリ、リソース、ジョブ
Symfonyreferences/symfony-patterns.mdDI、イベント、コマンド、Voter
非同期 PHPreferences/async-patterns.mdSwoole、ReactPHP、ファイバー、ストリーム
テストreferences/testing-quality.mdPHPUnit、PHPStan、Pest、モック

制約

必須事項
  • 厳格な型を宣言します(declare(strict_types=1))
  • すべてのプロパティ、パラメーター、戻り値に型ヒントを使用します
  • PSR-12 コーディング標準に従います
  • 納品前に PHPStan レベル 9 を実行します
  • 該当する場合は readonly プロパティを使用します
  • 複雑なロジックには PHPDoc ブロックを記述します
  • 型付きリクエストですべてのユーザー入力を検証します
  • グローバル状態より依存性注入を使用します
禁止事項
  • 型宣言を省略しません(mixed 型は使用しません)
  • パスワードを平文で保存しません(bcrypt/argon2 を使用します)
  • インジェクションの脆弱性がある SQL クエリを記述しません
  • ビジネスロジックとコントローラーを混在させません
  • 設定をハードコードしません(.env を使用します)
  • テストと静的解析を実行せずにデプロイしません
  • 本番コードで var_dump を使用しません

コードパターン

完全な実装では、型付けされたエンティティ/DTO、サービスクラス、テストを必ず用意します。これらを基本構成として使用してください。

Readonly DTO/値オブジェクト
<?php

declare(strict_types=1);

namespace App\DTO;

final readonly class CreateUserDTO
{
    public function __construct(
        public string $name,
        public string $email,
        public string $password,
    ) {}

    public static function fromArray(array $data): self
    {
        return new self(
            name: $data['name'],
            email: $data['email'],
            password: $data['password'],
        );
    }
}
コンストラクター DI を使用した型付きサービス
<?php

declare(strict_types=1);

namespace App\Services;

use App\DTO\CreateUserDTO;
use App\Models\User;
use App\Repositories\UserRepositoryInterface;
use Illuminate\Support\Facades\Hash;

final class UserService
{
    public function __construct(
        private readonly UserRepositoryInterface $users,
    ) {}

    public function create(CreateUserDTO $dto): User
    {
        return $this->users->create([
            'name'     => $dto->name,
            'email'    => $dto->email,
            'password' => Hash::make($dto->password),
        ]);
    }
}
PHPUnit テストの構成
<?php

declare(strict_types=1);

namespace Tests\Unit\Services;

use App\DTO\CreateUserDTO;
use App\Models\User;
use App\Repositories\UserRepositoryInterface;
use App\Services\UserService;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;

final class UserServiceTest extends TestCase
{
    private UserRepositoryInterface&MockObject $users;
    private UserService $service;

    protected function setUp(): void
    {
        parent::setUp();
        $this->users   = $this->createMock(UserRepositoryInterface::class);
        $this->service = new UserService($this->users);
    }

    public function testCreateHashesPassword(): void
    {
        $dto  = new CreateUserDTO('Alice', '[email protected]', 'secret');
        $user = new User(['name' => 'Alice', 'email' => '[email protected]']);

        $this->users
            ->expects($this->once())
            ->method('create')
            ->willReturn($user);

        $result = $this->service->create($dto);

        $this->assertSame('Alice', $result->name);
    }
}
Enum(PHP 8.1 以降)
<?php

declare(strict_types=1);

namespace App\Enums;

enum UserStatus: string
{
    case Active   = 'active';
    case Inactive = 'inactive';
    case Banned   = 'banned';

    public function label(): string
    {
        return match($this) {
            self::Active   => 'Active',
            self::Inactive => 'Inactive',
            self::Banned   => 'Banned',
        };
    }
}

出力テンプレート

機能を実装する際は、次の順序で提供します。

  1. ドメインモデル(エンティティ、値オブジェクト、列挙型)
  2. サービス/リポジトリークラス
  3. コントローラー/API エンドポイント
  4. テストファイル(PHPUnit/Pest)
  5. アーキテクチャ上の判断についての簡潔な説明

ナレッジリファレンス

PHP 8.3 以降、Laravel 11、Symfony 7、Composer、PHPStan、Psalm、PHPUnit、Pest、Eloquent ORM、Doctrine、PSR 標準、Swoole、ReactPHP、Redis、MySQL/PostgreSQL、REST/GraphQL API

ドキュメント

コメント