mcpField
P
php-pro

php-pro

github.com/jeffallan開発12.1k15.7k 回インストール今日更新
リポジトリ

php-pro について

php-proは、PHP 8.3+、Laravel、Symfonyを扱う開発者向けのPHP開発スキルです。厳密な型付け、安全な実装、静的解析とテストによる検証を重視します。

主な機能

  1. 01PHP 8.3+とフレームワークのガイダンス
  2. 02厳密な型付けとPSR-12の実践
  3. 03セキュリティと依存性注入のパターン
  4. 04PHPStanレベル9とテストによる検証
  5. 05トピック別のリファレンスガイド

活用シーン

  1. 01型付きPHPサービスやDTOの実装
  2. 02LaravelまたはSymfonyの機能開発
  3. 03コードのセキュリティリスク確認
  4. 04PHPStanとテストによる変更の検証

インストール

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

$npx skills add https://github.com/jeffallan/claude-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 プロ

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、イベント、コマンド、投票者
非同期 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]', '<test-password>');
        $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

@jeffallan(Synergetic Solutions のプリンシパルコンサルタント)が管理しています。

ドキュメント

コメント