Konu Başlıkları
Yükleniyor...

Symfony Projesinde Claude Code: Kurulum ve Çalışan Bir CLAUDE.md

Symfony geliştiricileri için Claude Code kurulumu ve yapılandırması

Claude Code, terminalden çalışan bir yapay zeka aracı: dosyaları okuyor, komut çalıştırıyor, kod yazıyor. Symfony projelerinde işe yarar hale gelmesi kurulumdan çok yapılandırmaya bakıyor. Kurulum beş dakika sürüyor, asıl farkı projenin kökündeki CLAUDE.md dosyası yaratıyor.

Kurulum

Node.js kurulu olsun, gerisi tek satır:

npm install -g @anthropic-ai/claude-code

Sonra Symfony projenizin kök dizinine geçip claude yazın. İlk çalıştırmada oturum açmanızı ister; hesabınızla giriş yapabilir ya da ANTHROPIC_API_KEY ortam değişkenini tanımlayıp anahtarla kullanabilirsiniz. Kurulumu kontrol etmek için claude --version yeterli.

Symfony CLI şart değil. php bin/console zaten her şeyi yapıyor, aracın symfony binary'sine ihtiyacı yok.

CLAUDE.md olmadan araç yarım çalışıyor

/init komutu projeyi tarayıp bir taslak CLAUDE.md çıkarır. Taslak başlangıç noktasıdır, bitmiş dosya değil. Kendiniz doldurmadığınız sürece Claude her oturumda dizin yapısını yeniden keşfetmeye çalışır ve bunun bedelini yanlış varsayımlarla öder.

Bir Symfony projesinde CLAUDE.md'ye önce sadece dizin ağacını yazmıştım, sonuç ortalamaydı; sık kullandığım konsol komutlarını ve isimlendirme kurallarını ekleyince aradaki fark ilk istekte görüldü.

İşe yarayan bir dosya kabaca şuna benziyor:

# Symfony Projesi ## Komutlar - `php bin/console cache:clear` - `php bin/console make:entity` - `php bin/console doctrine:migrations:diff` sonra `doctrine:migrations:migrate` - `composer require [paket]` - `vendor/bin/phpunit` ## Dizinler - `src/Controller`, `src/Entity`, `src/Repository`, `src/Service` - `templates/` Twig şablonları - `migrations/` Doctrine migration dosyaları - `vendor/` ve `var/` içinde arama yapma, düzenleme ## Kurallar - PSR-12 - Servisler constructor injection ile alınır - Repository'ye sorgu yazılır, Controller'a yazılmaz - Yeni endpoint eklerken testi de yazılır

Buradaki vendor/ satırı süs değil. Belirtmezseniz araç bir sınıfı ararken Composer bağımlılıklarının tamamını tarayabiliyor, bu da hem süre hem bağlam penceresi harcıyor.

Aynı dosyanın gözden kaçan bir sınırı var: CLAUDE.md her oturumun başında bağlam penceresine giriyor. Yani dosyayı büyüttükçe, kazandırdığı yeri geri alıyorsunuz. Üç yüz satırlık bir CLAUDE.md, her istekte yeniden ödediğiniz bir vergiye dönüşür. Kısa tutun, projeye özgü olmayan genel PHP bilgisini oraya yazmayın.

İzinleri bir kere ayarlayın

Varsayılan davranış her eylem için onay sormak. Onay penceresi ilk yarım saatte öğretici, sonrasında yorucu. /permissions ile sık kullandıklarınızı listeye ekleyin:

  • Edit
  • Bash(php bin/console *)
  • Bash(composer *)
  • Bash(vendor/bin/phpunit *)

Git commit'i listeye eklemek size kalmış. Ben eklemiyorum, çünkü commit mesajını gözden geçirmeden ilerlemek istemiyorum.

Günlük işte nerede karşılığı var

Yeni devraldığınız bir kod tabanında ilk gün: hangi Controller'ın hangi servise bağlı olduğunu, Entity ilişkilerinin nerede tanımlandığını sorun. Cevabı doğrulamak dosyaları tek tek açmaktan hızlı.

Hata ayıklamada yığın izini olduğu gibi yapıştırın, ilgili dosyaları kendisi bulur. Test yazdırırken sınıf adı vermek yetmiyor, hangi metodun hangi senaryosunu istediğinizi söyleyin: "UserService'te register() metodunun aynı e-posta ile ikinci çağrısında exception fırlattığını doğrulayan bir PHPUnit testi yaz" gibi.

Doctrine ilişkilerinde açık olun. "Product ve Category arasında many-to-many kur" isteği, ara tablo adını ve cascade davranışını söylemediğiniz sürece varsayılanla gelir ve o varsayılan çoğu zaman istediğiniz şey değildir.

Tekrar eden işleri komuta çevirin

Projede sürekli aynı adımları yazıyorsanız .claude/commands/ altına bir markdown dosyası koyun. Örneğin crud.md:

$ARGUMENTS entity'si için CRUD üret: Entity, Repository, FormType, Controller, Twig şablonları (index, show, new, edit), rota tanımları ve migration. Symfony konvansiyonlarına uy, adımları sırayla bildir.

Artık /crud Product yazmanız yeterli. Dosya depoda durduğu için ekipteki herkeste aynı şekilde çalışır.

Tökezlediği yerler

Uzun oturumlarda bağlam doluyor ve cevaplar bulanıklaşıyor. İş değiştirirken /clear deyip temiz başlayın, bağlamı zorlamayın.

Büyük bir isteği tek seferde vermek de aynı sonucu veriyor: plan iyi çıkıyor, üçüncü adımdan sonra dağılıyor. Önce plan isteyin, sonra adımları tek tek çalıştırın.

Bir de şu var: ürettiği kod Symfony'nin son sürümüne göre değil, öğrendiği kadarıyla geliyor. Attribute tabanlı rota tanımı yerine annotation üretirse şaşırmayın, projedeki mevcut bir Controller'ı örnek göstermek bunu düzeltiyor. CLAUDE.md'ye Symfony sürümünü yazmak da işe yarıyor.

Kaynaklar