Claude Code · Kod Kalitesi · Yapay Zekâ
Claude'un yazdığı gereksiz kodu Ponytail ile bul
Ponytail, yapay zekâ ajanının kod yazmadan önce "buna gerçekten gerek var mı?" diye sormasını sağlayan açık kaynak bir eklenti. Claude Code'a kurulum, mevcut projeyi tarama, bulguları ayıklama, güvenle silme ve yeni kodda açık tutma.
- Süre
- 20 dk
- Seviye
- Orta
- Adım
- 5
- Prompt
- 1
Claude Code gibi ajanlar hızlı kod yazıyor. Bazen gereğinden fazlasını da yazıyor: hiç kullanılmayan bir bileşen, tarayıcının zaten yaptığı bir iş için kurulan paket, tek yerde çağrılan bir soyutlama. Bu rehberde bu fazlalığı Ponytail ile nasıl bulacağını ve güvenle sileceğini anlattım. Ben bunu kendi sitemde, yani şu an okuduğun dec5'te denedim. Komutların ve prompt'ların sağ üstündeki Kopyala butonuna bas, yapıştır, devam et.
Ne yapacağız
Projedeki gereksiz kodu bulup sileceğiz, sonra yeni kodda aynı fazlalığın birikmesini önleyeceğiz. Önce neden.
Gereksiz kodun üç bedeli var:
- Okuması zor. Projeyi açan herkes (sen de, Claude da) önce o kodun ne işe yaradığını anlamaya çalışıyor. Hiçbir işe yaramıyorsa bu zaman boşa gidiyor.
- Bakım yükü. Kullanılmayan kod da güncelleme, tip hatası ve build süresi olarak sana dönüyor.
- Paketler güvenlik yüzeyi ve boyut demek. Kurulu her paket, bir gün güvenlik açığı çıkabilecek bir bağımlılık. Bir kısmı da sitenin yüklediği JavaScript'i büyütüyor.
Ponytail ne yapıyor? Ponytail açık kaynak (MIT lisanslı) tek bir prompt. Ajan kod yazmadan önce bir merdivenden geçiyor ve tutan ilk basamakta duruyor:
- Buna gerçekten gerek var mı?
- Projede zaten var mı?
- Standart kütüphane bunu yapıyor mu?
- Platformun kendi özelliği var mı?
- Kurulu bir paket bunu yapıyor mu?
- Tek satır olur mu?
- Ancak o zaman: çalışan en az kod.
Merdiven, problemi anlamanın yerine geçmiyor. Ajan önce kodu okuyup akışı anlıyor, sonra basamak seçiyor. Girdi doğrulama, veri kaybını önleyen hata yönetimi, güvenlik ve erişilebilirlik hiçbir seviyede kesilmiyor.
Örnek: Tarih seçici istiyorsun. Ponytail olmadan ajan bir paket kurup üstüne sarmalayıcı bileşen yazabiliyor. Ponytail ile tarayıcının kendi alanını kullanıyor:
<input type="date">
Rakamlar hakkında dürüst olalım. Ponytail'in sayfası "~%54 daha az kod, ~%20 daha ucuz, ~%27 daha hızlı" diyor. Bu ölçüm tek bir gerçek FastAPI + React projesinde, 12 görevde, Haiku 4.5 modeliyle, her görev 4 kez yapılarak alınmış; aynı ajan Ponytail'li ve Ponytail'siz karşılaştırılmış. Etki, gerçek bir "fazla inşa" tuzağı olan görevlerde büyük (tarih seçici 404 satırdan 23 satıra), zaten sade kodda sıfıra yakın. Yazar, daha önce yayımladığı "%80-94" tek seferlik ölçümün kısmen yanıltıcı olduğunu kendisi kabul etmiş. GPT-5.5 gibi uzun düşünen modellerde maliyetin tersine dönebildiğini de yazıyor. Bunlar repo sahibinin ölçümü ve küçük bir örneklem. Kendi projende /ponytail-audit ile kendin ölç.
Sonuçta elinde üç şey olacak:
- Projendeki gereksiz kodun sıralı bir listesi
- O listeden güvenle silinenleri içeren ayrı bir dal (PR)
- Yeni kod yazarken açık duran bir Ponytail
Ponytail'i kur
Claude Code'da iki komutu ayrı ayrı gönder. İkisini tek mesajda yazarsan kurulum çalışmıyor.
text/plugin marketplace add DietrichGebert/ponytail
text/plugin install ponytail@ponytail
Kurulumdan sonra Ponytail her oturumda varsayılan full seviyesinde açık geliyor.
Yalnız resmi kaynaktan kur. Ponytail'in sahibi iki kaynak gösteriyor: GitHub'da
DietrichGebert/ponytail, npm'de@dietrichgebert/ponytail. Ponytail hiçbir zaman.exeya da.dlldosyası içermiyor; içeren bir kopya sahte.Codex, Cursor, Copilot ya da başka bir ajan kullanıyorsan kurulum adımları Ponytail'in INSTALL.md sayfasında.
Mevcut projeyi tara
Önce temiz bir yerden başla. Kaydedilmemiş değişikliğin varsa commit'le, sonra tarama için yeni bir dal aç:
Terminalgit checkout -b temizlik/ponytail
Sonra Claude Code'da:
text/ponytail-audit
/ponytail-auditbütün projeyi tarıyor ve bulguları en büyük kazançtan başlayarak numaralı bir liste olarak veriyor. Her satırın başında bir etiket var:delete:ölü kod, kullanılmayan esneklik, spekülatif özelliknative:platformun zaten yaptığı işi yapan kod ya da paketstdlib:standart kütüphanede olan bir şeyin elle yazılmışıreuse:projede zaten var olan bir yardımcının kopyasıyagni:tek uygulaması olan soyutlama, kimsenin ayarlamadığı ayarshrink:aynı mantık, daha az satır
Liste
net: -N satır, -M paketile bitiyor. Audit hiçbir şeyi değiştirmiyor, yalnız rapor veriyor.Bende ne çıktı? dec5'te tarama yaklaşık 3,5 dakika sürdü. Yaklaşık 1.400 satır ölü kod ve 7 kullanılmayan paket buldu. En büyük üç bulgu:
- Anasayfada artık gösterilmeyen bölümler (Contact, Services, Work, Process, CreatorTopics ve diğerleri), yaklaşık 781 satır.
- Hiç import edilmeyen paketler: gsap, @react-three/fiber, @react-three/drei, react-hook-form, rehype-raw ve diğerleri.
- Çalışmayan bir kaydırma geri yükleme kodu (ScrollRestore ve smooth-scroll), yaklaşık 35 satır.
Claude "yüzde kaç?" soruma yaklaşık %15 dedi. Daha karmaşık kendi projelerimde bu oran bende %35'e kadar çıktı. Bu ölçülmüş bir istatistik değil, kendi gözlemim; senin projende farklı çıkabilir.
Bulguları oku ve ayır
Listeyi olduğu gibi uygulama. Önce iki gruba ayır:
- Güvenle silinebilir: Hiçbir yerden import edilmeyen dosya,
package.json'da duran ama kodda geçmeyen paket, hiç çağrılmayan fonksiyon. - Sorulması gereken: Elle tetiklenen bir script, bir dosya adıyla ya da string olarak çağrılan modül, başka bir projenin kullandığı ortak kod. Bunları sen bilirsin, ajan bilmeyebilir.
Claude'dan dokunmayacaklarının listesini de iste. dec5'te Claude, aktif kullanılan lenis, three, next-intl ve react-markdown'ı ayrı tuttu. Emin olmadığı bir modülü silmeden önce bana sordu. Bu listeye bak; orada olması gerekip olmayan bir şey varsa söyle.
Bu ayıklamayı Claude Code'a da yaptırabilirsin:
Prompt/ponytail-audit sonucunu birlikte uygulayacağız. Henüz hiçbir şeyi silme. 1. Bulguları iki gruba ayır: "güvenle silinebilir" ve "bana sorman gereken". Bir dosya dinamik import, string ile yol, script ya da CI ayarı üzerinden kullanılıyor olabilirse ikinci gruba koy. 2. Her "güvenle silinebilir" madde için projenin tamamında (testler, ayar dosyaları ve scriptler dahil) ara ve hiçbir yerden kullanılmadığını göster. 3. Dokunmayacağın paket ve dosyaları gerekçesiyle ayrı bir liste olarak yaz. 4. Planı bana göster, onay vermeden silme.
- Güvenle silinebilir: Hiçbir yerden import edilmeyen dosya,
Sil ve doğrula
Onay verdiğin maddeleri sildir. Silme işi ayrı bir dalda ve ayrı bir PR'da olsun; o dala başka iş karıştırma. Bir şey ters giderse tek hamlede geri alırsın.
Sildikten sonra sırayla:
- Paket sildiysen bağımlılıkları yeniden kur (ör.
npm install). Lock dosyası da güncellenmeli. - Build al. Geçmiyorsa sorun büyük ihtimalle ölü sanılan ama aslında kullanılan bir dosya.
- Testlerin ve lint'in varsa onları da çalıştır.
- Siteyi ya da uygulamayı aç ve elle gez. Build'in yakalamadığı şeyler olabiliyor: bir sayfa açılıyor ama bir bölüm boş geliyor gibi.
Terminalnpm install npm run build npm run lint
Komut adları projene göre değişebilir; kendi
package.json'una bak.dec5'teki temizlik bu şekilde ayrı bir PR'a gitti: 1.060 satır ve 7 paket siliniyor. Taramanın bulduğu 1.400 satırın hepsi silinmedi; ör. elle tetiklenebilen bir script'e bilerek dokunmadık. Bu rehberi yazarken o PR hâlâ açık, henüz yayına alınmadı.
- Paket sildiysen bağımlılıkları yeniden kur (ör.
Yeni kodda açık tut
Temizlik bir kerelik. Asıl kazanç, fazlalığın tekrar birikmemesi. Ponytail kurulduktan sonra her oturumda açık; seviyesini değiştirebilirsin:
text/ponytail lite /ponytail full /ponytail ultra /ponytail off
- lite: İsteneni yapıyor, daha sade bir yol varsa tek satırla söylüyor. Seçim senin.
- full: Varsayılan. Merdiven zorunlu: önce standart kütüphane ve platform özellikleri, en kısa değişiklik.
- ultra: En agresif seviye. Eklemeden önce silmeyi düşünüyor, isteğin kendisini de sorguluyor.
- off: Kapatıyor.
Argümansız
/ponytailkapalıysa açıyor, açıksa şu anki seviyeyi söylüyor.Her PR'dan önce de değişikliği taratabilirsin:
text/ponytail-review
/ponytail-reviewyalnız mevcut değişikliğe (diff) bakıyor ve "bunlar silinebilir" listesi veriyor. Audit gibi o da bir şey değiştirmiyor.Diğer komutlar:
/ponytail-debt: Koddaponytail:yorumuyla bıraktığın bilinçli kısayolları tek listede topluyor. "Sonra bakarım" dediklerin unutulmasın diye./ponytail-gain: Ponytail'in kendi benchmark ortalamalarını gösteriyor. Senin projen için hesaplanmış bir rakam değil; kendi projen için/ponytail-audit'e bak./ponytail-help: Komutların kısa özeti.
Püf noktaları
Kullanılan bir dosya "ölü" görünüyor. Dinamik import, string olarak verilen dosya yolu, bir script ya da CI ayarı üzerinden kullanılan dosyalar, kodda import edilmediği için ölü sanılabiliyor. Her silmeden sonra build al. Emin değilsen o maddeyi "sorulması gereken" grubuna koy.
Komutlar arada hata veriyor. Ajanın çalıştırdığı terminal komutlarında tırnak ya da kaçış karakteri hataları çıkabiliyor (ör. zsh'de). Bu Ponytail'in bulgusu değil, komutun hatası. Hata mesajını ajana yapıştır, komutu düzeltip tekrar denesin. Hatalı komut yüzünden yarım kalan bir aramayı "bulunamadı" diye okuma.
ultra fazla agresif geliyor. ultra eklemek yerine silmeyi tercih ediyor ve isteğin kendisini de sorguluyor. Temizlik yaparken full'da kal. ultra'yı kullanırsan her önerisini tek tek oku.
Bulguyu uygulayınca bir şey bozuldu. Ayrı dalda çalıştığın için o dalı silip baştan başlayabilirsin. Bu yüzden 2. adımdaki temiz dal önemli.
Bitti mi?
- Ponytail'i iki ayrı komutla, yalnız resmi kaynaktan kurdum
- Çalışmamı commit'leyip temizlik için ayrı bir dal açtım
-
/ponytail-auditçalıştırdım, listeyi okudum - Bulguları "güvenle silinebilir" ve "sorulması gereken" diye ayırdım
- Claude'un dokunmayacaklarım listesini kontrol ettim
- Sildikten sonra build, test ve lint geçti
- Siteyi ya da uygulamayı açıp elle gezdim
- Temizliği ayrı bir PR olarak açtım
- Yeni kodda Ponytail açık; PR öncesi
/ponytail-reviewçalıştırıyorum
Takıldığın yeri Instagram'da yaz, rehbere eklerim.