mcpField
L
laravel:using-examples-in-prompts

laravel:using-examples-in-prompts

github.com/jpcaparasエージェントワークフロー157105 回インストール18 週間前に更新
リポジトリ

laravel:using-examples-in-prompts について

Laravel のコーディングエージェント向けに、コードベースの具体例で構造、スタイル、入出力、エラー処理を伝えるプロンプト作成スキルです。

主な機能

  1. 01既存コードを例として参照
  2. 02命名とスタイル規約の提示
  3. 03入力と期待する出力の提示
  4. 04コードによるエラー処理の説明
  5. 05再利用パターンの文書化

活用シーン

  1. 01既存サービスのパターンに沿った実装
  2. 02モデルの命名やリレーションの指定
  3. 03API データ変換形式の明確化
  4. 04エラー処理とテスト方針の提示

インストール

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

$npx skills add https://github.com/jpcaparas/superpowers-laravel --skill laravel:using-examples-in-prompts

インストール後、Claude Code で/laravel:using-examples-in-promptsを入力して読み込まれたか確認します。

詳細

プロンプトで例を使う

説明するよりも、例を示すほうが意図が伝わります。AI には、求める内容を言葉で伝えるだけでなく、実際に見せましょう。

既存のコードを参照する

抽象的な例

「決済サービスのようなサービスを作成してください」

具体的な例

「app/Services/PaymentService.php のパターンに沿って、OrderService を作成してください:

class PaymentService
{
    public function __construct(
        private PaymentGateway $gateway,
        private PaymentRepository $repository
    ) {}
    
    public function charge(Order $order): Payment
    {
        // Implementation
    }
}

コンストラクターインジェクションを使い、ドメインオブジェクトを返し、各メソッドの役割を絞ってください。」

効果: 参考にすべき構造、命名、パターンを示します。

望ましいスタイルを示す

曖昧な例

「一貫した命名を使ってください」

具体的な例

「app/Models/Product.php の命名規則に従ってください:

// Relationships: camelCase, descriptive
public function orderItems(): HasMany
public function primaryCategory(): BelongsTo

// Scopes: scope prefix, descriptive
public function scopeActive(Builder $query): void
public function scopePublishedAfter(Builder $query, Carbon $date): void

// Accessors: get prefix, Attribute suffix
public function getFormattedPriceAttribute(): string

新しい Subscription モデルにも同じパターンを適用してください。」

効果: 規則が実際にどう使われているかを、具体例で示します。

入出力の例

不明瞭な例

「商品データを変換してください」

明確な例

「API 用に商品データを変換してください:

入力(データベースから):

[
    'id' => 1,
    'name' => 'Widget',
    'price_cents' => 2999,
    'created_at' => '2024-01-15 10:30:00',
    'category' => ['id' => 5, 'name' => 'Tools']
]

期待される出力:

{
    "id": 1,
    "name": "Widget",
    "price": "29.99",
    "category": "Tools",
    "created_at": "2024-01-15T10:30:00Z"
}

この変換には ProductResource を使ってください。」

効果: 正確な入力と期待される出力形式を示します。

具体例と抽象例

抽象的な例

「エラーを適切に処理してください」

具体的な例

「app/Services/PaymentService.php と同じ方法でエラーを処理してください:

try {
    $charge = $this->gateway->charge($amount);
} catch (PaymentGatewayException $e) {
    Log::error('Payment failed', [
        'order_id' => $order->id,
        'amount' => $amount,
        'error' => $e->getMessage(),
    ]);
    
    throw new PaymentFailedException(
        'Unable to process payment: ' . $e->getMessage(),
        previous: $e
    );
}

具体的な例外を使い、コンテキストをログに記録し、元の例外を保持してください。」

効果: 再現すべきエラー処理パターンを正確に示します。

抽象的な例

「テストを追加してください」

具体的な例

「tests/Feature/ProductTest.php のパターンに沿ってテストを追加してください:

test('user can create product with valid data', function () {
    $user = User::factory()->create();
    $category = Category::factory()->create();
    
    $response = $this->actingAs($user)
        ->postJson('/api/products', [
            'name' => 'New Product',
            'price' => 29.99,
            'category_id' => $category->id,
        ]);
    
    $response->assertCreated()
        ->assertJsonStructure(['data' => ['id', 'name', 'price']]);
    
    $this->assertDatabaseHas('products', [
        'name' => 'New Product',
    ]);
});

ファクトリーを使い、正常なケースとバリデーションエラーをテストし、データベースの状態を確認してください。」

効果: テストの構成、アサーション、参考にすべきパターンを示します。

例をドキュメント化する

新しいパターンを確立するときは、ドキュメントにまとめましょう:

「外部 API 連携向けの新しいサービスパターンを作成してください。テンプレートはこちらです:

// app/Services/External/BaseApiClient.php
abstract class BaseApiClient
{
    protected string $baseUrl;
    protected int $timeout = 30;
    protected int $retries = 3;
    
    abstract protected function authenticate(): array;
    
    protected function request(string $method, string $endpoint, array $data = []): array
    {
        // Retry logic, error handling, logging
    }
}

// app/Services/External/StripeClient.php
class StripeClient extends BaseApiClient
{
    protected string $baseUrl = 'https://api.stripe.com/v1';
    
    protected function authenticate(): array
    {
        return ['Authorization' => 'Bearer ' . config('services.stripe.secret')];
    }
    
    public function createCharge(int $amount): array
    {
        return $this->request('POST', '/charges', ['amount' => $amount]);
    }
}

すべての外部 API クライアントにこのパターンを使ってください。docs/patterns/external-apis.md に記載してください。」

効果: 将来も参照できる、再利用可能なパターンをドキュメントとともに作成します。

クイックリファレンス

例を活用しましょう:

  • 既存のコードを示す - プロジェクト内の実際のファイルを参照する
  • スタイルを実演する - 命名、構造、パターンが実際にどう使われているかを示す
  • 入出力を提示する - 具体的なデータで変換内容を明確にする
  • 実際のコードを使う - 一般的な例ではなく、コードベースのスニペットを使う
  • パターンをドキュメント化する - 優れた例を再利用可能なテンプレートにする

例 > 説明。言葉で伝えるだけでなく、見せましょう。

コメント