mcpField
L
laravel:iterating-on-code

laravel:iterating-on-code

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

laravel:iterating-on-code について

Laravel のコーディング作業向けに、曖昧なフィードバックを具体的な問題、修正案、検証手順へ整理するスキルです。バグや実装漏れ、性能、スタイルを扱い、一つずつ変更して確認する方法を示します。

主な機能

  1. 01具体的なコード問題の特定
  2. 02原因の説明と修正例の提示
  3. 03実装に不足する手順の発見
  4. 04段階的な変更と検証
  5. 05コーディング規約に沿った調整

活用シーン

  1. 01フォームのバリデーション規則の修正
  2. 02注文処理へのエラーハンドリング追加
  3. 03データベースクエリの最適化
  4. 04メソッド名と型宣言の標準化

インストール

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

$npx skills add https://github.com/jpcaparas/superpowers-laravel --skill laravel:iterating-on-code

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

詳細

コードを反復的に改善する

AI が生成したコードは、最初から完璧であることはほとんどありません。効果的に反復することで、「あと少し」を「まさにこれだ」に近づけられます。

正しくないコード

曖昧なフィードバック

「動きません」

具体的なフィードバック

「バリデーションが正しくありません。

現在のコード:

'email' => 'required|email|unique:users'

問題点: これでは、ユーザーのメールアドレスを、別のユーザーがすでに使っているメールアドレスに更新できてしまいます。一意性ルールでは、現在のユーザーを除外する必要があります。

修正:

'email' => [
    'required',
    'email',
    Rule::unique('users')->ignore($this->user()->id)
]

これにより、ユーザーは自分のメールアドレスをそのまま使えますが、他のユーザーとの重複は防げます。」

効果がある理由: 問題を具体的に特定し、なぜ誤っているのかを説明し、正しい解決策を示しています。

不完全なコード

曖昧

「何かが足りません」

具体的

「OrderService にエラー処理がありません。

現在の実装:

public function createOrder(array $data): Order
{
    $order = Order::create($data);
    $this->processPayment($order);
    return $order;
}

不足しているもの:

  1. トランザクションの適用(支払いと注文作成は原子的に処理する必要があります)
  2. 支払い失敗時の処理
  3. 注文作成前の在庫検証
  4. 作成成功後のイベント発行

追加:

DB::transaction(function () use ($data) {
    $this->validateInventory($data['items']);
    $order = Order::create($data);
    $this->processPayment($order);
    event(new OrderCreated($order));
    return $order;
});

さらに、支払い失敗時の try/catch を追加してください。」

効果がある理由: 不足している項目をそれぞれ具体的な背景とともに挙げ、追加方法を示しています。

改善が必要

曖昧

「もっと良くしてください」

具体的

「パフォーマンスを向上させるためにクエリを改善してください。

現在:

$products = Product::all()->filter(function ($product) {
    return $product->isActive() && $product->inStock();
});

問題点:

  • すべての商品をメモリに読み込んでいます(大規模なデータセットでは非効率です)
  • データベースではなく PHP で絞り込んでいます
  • 各商品でメソッドを呼び出しています(N+1 問題が発生する可能性があります)

改善後:

$products = Product::query()
    ->where('active', true)
    ->where('stock_quantity', '>', 0)
    ->get();

絞り込みをデータベースに移し、インデックス付きのカラムを使い、不要なデータの読み込みを避けてください。」

効果がある理由: 改善が必要な点とその理由を説明し、改善後のコードを示しています。

スタイルの問題

曖昧

「スタイルガイドに従ってください」

具体的

「コーディング規約に合わせて更新してください。

現在:

public function get_user_orders($userId) {
    return Order::where('user_id', $userId)->get();
}

スタイル上の問題点:

  1. メソッド名は camelCase にする必要があります:getUserOrders
  2. パラメーター名は camelCase にする必要があります:$userId ✓(すでに正しいです)
  3. 戻り値の型ヒントがありません
  4. 複雑なクエリの docblock がありません

修正後:

/**
 * Get all orders for a specific user.
 */
public function getUserOrders(int $userId): Collection
{
    return Order::where('user_id', $userId)->get();
}

スタイルガイドを参照してください:docs/coding-standards.md」

効果がある理由: スタイル違反を具体的に指摘し、修正を示し、スタイルガイドを参照しています。

段階的な検証

悪いアプローチ

「バリデーションを変更し、エラー処理を追加し、サービスをリファクタリングし、テストを更新して、ロギングを追加してください」

良いアプローチ

「一つずつ進めましょう。

ステップ 1: まずバリデーションの問題を修正します

'email' => Rule::unique('users')->ignore($this->user()->id)

次に進む前に、これが動作することを確認しましょう。」

[バリデーションが動作することを確認した後]

「ステップ 2: 次に、支払い処理のエラー処理を追加します

try {
    $this->processPayment($order);
} catch (PaymentException $e) {
    Log::error('Payment failed', ['order' => $order->id]);
    throw new OrderProcessingException('Payment failed', previous: $e);
}

続ける前に、これをテストしてください。」

効果がある理由: 一度に一つの変更を行い、各ステップを検証することで、段階的に信頼性を高めています。

フィードバックのパターン

パターン:指摘 + 説明 + 修正を提示
"The relationship is incorrect:

**Current:** `return $this->hasMany(Post::class);`

**Problem:** A User has many Posts, but you're defining this in the Post model. This creates a circular relationship.

**Fix:** Move this to the User model, or if you meant Post belongs to User:
```php
// In Post model
public function user(): BelongsTo
{
    return $this->belongsTo(User::class);
}
```"
パターン:不足点 + 重要な理由 + 追加方法
"Missing authorization check:

**Why it matters:** Any authenticated user can delete any order, not just their own.

**Add this to OrderController@destroy:**
```php
$this->authorize('delete', $order);

そして、ポリシーメソッドを作成します:

// In OrderPolicy
public function delete(User $user, Order $order): bool
{
    return $user->id === $order->user_id;
}
```"
パターン:現状 + 問題点 + 改善後
"Current implementation has issues:

**Current:**
```php
foreach ($orders as $order) {
    $order->load('items', 'customer', 'shipping');
}

問題点:

  • N+1 クエリ(ループ内でリレーションを読み込んでいます)
  • 大規模なデータセットでは非効率です

改善後:

$orders = Order::with(['items', 'customer', 'shipping'])->get();

イーガーロードを使った単一のクエリです。」


## Quick Reference

Iterate effectively:
- **Be specific** - Point to exact lines, explain exact problems
- **Show, don't just tell** - Provide corrected code
- **Explain why** - Help the AI understand the reasoning
- **One change at a time** - Validate incrementally
- **Reference standards** - Point to style guides, docs, examples

Specific feedback = better iterations = code that fits your needs.

コメント