Blogs

Claude Code ile SAP ABAP/RAP Geliştirme: Token İsrafına Son Vermenin Yolları

İtiraf edeyim: Claude Code’u ilk kullanmaya başladığımda, her session’da sanki sınırsız bir bütçem varmış gibi davranıyordum. CDS view’ları düzeltmek için Opus modeli, basit bir annotation değişikliği için bile uzun uzun açıklamalar, 80.000 token’a ulaşmış bir context window… Sonuç? Hem yavaş yanıtlar hem de cüzdanımda açılan delik.SAP dünyasında çalışıyorsanız bu hikaye tanıdık gelebilir. S/4HANA projelerinde CDS view’lar, RAP uygulamaları, Fiori Launchpad konfigürasyonları derken dosya sayısı hızla artıyor. Claude Code da bu dosyaların hepsini okumaya çalışınca, asıl işe geçmeden token bütçesinin yarısı buharlaşıyor.Bu yazıda, Claude Code’u SAP ABAP/RAP projelerinde kullanırken token tüketimini ciddi şekilde düşüren üç temel yaklaşımı paylaşacağım. Karmaşık bir şey yok. Üçü de birkaç dakikada uygulanabiliyor ve etkisi ilk session’dan itibaren hissediliyor.

Claude Code Kullanırken Token Optimizasyonu Neden Bu Kadar Önemli?

Claude Code’un çalışma mantığını anlamak gerekiyor. Her mesaj gönderdiğinizde, Claude sadece yazdığınız prompt’u değil, tüm konuşma geçmişini, CLAUDE.md dosyasını, okuduğu dosyaları ve komut çıktılarını birlikte işliyor. Yani saat 10’da başlattığınız session’da öğlene doğru her yeni mesajın maliyeti katlanarak artıyor.SAP projelerinde bu sorun daha da belirgin çünkü bir RAP uygulaması bile birden fazla CDS view, service definition, service binding ve implementation class içeriyor. Bunun yanında node_modules/ klasörü Fiori projelerinde kolayca onbinlerce dosyaya ulaşıyor. package-lock.json gibi lock dosyaları tek başına 5.000 satırı geçebiliyor. UI5 kütüphane dosyaları da devasa boyutlarda olabiliyor.Claude bunların hepsini taradığında, siz daha ilk satır kodu yazmadan yüzlerce token harcamış oluyorsunuz.

1. CLAUDE.md: Claude’un Hafızası, Sizin Kontrolünüz

CLAUDE.md, her session’ın başında otomatik olarak yüklenen özel bir dosya. Claude’a projenizin kurallarını, yapısını ve tercihlerinizi anlatıyorsunuz. Böylece her seferinde aynı şeyleri tekrar açıklamanız gerekmiyor.Ama burada kritik bir tuzak var:CLAUDE.md’ye ne kadar çok şey yazarsanız, her etkileşimde o kadar çok token harcanıyor. 5.000 token’lık bir CLAUDE.md, Claude kodunuza bakmadan önce 5.000 token vergi ödediğiniz anlamına geliyor. Hem de her turda.

Doğru Yaklaşım: Yalın Tut, Referansla Genişlet

CLAUDE.md dosyanızı 500 token civarında tutun. Detaylı bilgileri ayrı dosyalara koyun ve sadece referans verin. Claude bu dosyaları yalnızca ilgili bir görevde çalışırken okur, her turda değil.

İşte bir S/4HANA projesi için örnek CLAUDE.md:

İşte bir S/4HANA projesi için örnek CLAUDE.md:# SAP S/4HANA Project    ## Rules  - Use modern ABAP syntax (VALUE, FOR, COND, NEW)  - RAP: separate UI annotations into Metadata Extension, not inline in CDS entity  - Always use DAO class with interface for database operations, no direct table access from handler    ## Key references  - CDS architecture: see docs/cds-patterns.md  - RAP boilerplate: see docs/rap-template.md  - External API integration: see docs/api-guide.md  - Naming conventions: see docs/naming.md    ## Compact instructions  When compacting, preserve: active CDS entity names,  current error messages, and test results. 18 satır. Yaklaşık 480 token. Claude’un bilmesi gereken her şey burada ama detaylar burada değil. Referans Dosyaları docs/ klasörü altında, Claude’un ihtiyaç duyduğunda bakacağı detaylı dosyalar oluşturun: # docs/rap-template.md    ## SAP'ye Katmanlı Geliştirme Mimarisi    RAP'ın katmanlı yapısı aslında yazılım mühendisliğindeki temel prensiplerin  SAP dünyasına uyarlanmış halidir. Bu yapıyı anlamak, Claude'a daha iyi talimat vermenizi de sağlar.    ### Single Responsibility (Tek Sorumluluk)  - Behavior handler class: Sadece validation, determination ve action    mantığı içerir. Veritabanı erişimi veya dış servis çağrısı yapmaz.  - DAO class (Data Access Object): Veritabanı okuma/yazma işlemlerini    izole eder. Handler doğrudan tablo okumamalı.  - Service wrapper class: Dış sistem entegrasyonlarını (HTTP, RFC)    soyutlar. İş mantığı dış servisin teknik detaylarını bilmemelidir.    ### Davranış Katmanları  - Behavior Definition (.bdef): Ne yapılabileceğini tanımlar    (CRUD, action, validation, determination).  - Behavior Implementation (.bimpl): Nasıl yapılacağını kodlar.    Handler method'ları ve saver class'ı burada yaşar.  - Service Definition: Hangi entity'lerin dışarı açılacağını belirler.  - Service Binding: Hangi protokolle (OData V2/V4) açılacağını belirler.    ### Open/Closed Prensibi  - Projection view'lar sayesinde aynı interface view farklı UI'lara    farklı şekillerde açılabilir, temel veri modeline dokunmadan.  - Custom action'lar CRUD'un ötesindeki iş mantığını kapsüller,    mevcut davranışı bozmadan yeni özellik ekler.    ## Naming Convention  - ZR_   : Root CDS entity (RAP)  - ZI_   : Interface view  - ZC_   : Consumption view  - ZUI_  : Service Definition ve Service Binding Not: MD dosyaları temsilidir, kendi projenize uygun şekilde dosyaları oluşturabilirsiniz.Bu yaklaşımın güzelliği şu: Claude bir CDS view üzerinde çalışırken docs/cds-patterns.md’yi okur ve katmanlı mimarinin kurallarını bilir. Ama dış sistem entegrasyonuyla uğraşırken bu dosyayı yüklemez. Böylece her turda sadece ilgili context yükleniyor. Aynı zamanda Claude, DAO class’ın nerede bitip handler’ın nerede başladığını bilerek size doğru katmanda kod üretir.

Compaction Talimatları

CLAUDE.md’nin sonundaki “Compact instructions” bölümü genellikle gözden kaçıyor ama çok değerli. Claude context window dolduğunda otomatik olarak özetleme yapar. Bu bölüm sayesinde özetleme sırasında neyin korunacağını siz belirliyorsunuz.SAP projelerinde genellikle şunları korumak istersiniz: aktif CDS entity isimleri, hata mesajları ve test sonuçları. Bunlar kaybolursa, Claude aynı dosyaları tekrar okumak zorunda kalır, yani daha fazla token harcar.

2. .claudeignore: Claude’un Görmemesi Gereken Dosyalar

Bu, en az eforla en çok tasarruf sağlayan adım. .gitignore ile aynı syntax’ı kullanan .claudeignore dosyası, Claude’un belirli dosya ve klasörleri okumasını engelliyor.SAP Fiori projelerinde bu dosya hayat kurtarıyor:# Build artifacts  dist/  node_modules/  webapp/resources/    # SAP generated files  *.bak  *.lck  .che/  .project  .classpath    # UI5 build output  webapp/Component-preload.js  webapp/Component-dbg.js    # Lock files  package-lock.json  yarn.lock  pnpm-lock.yaml    # Large binary/data files  *.xlsx  *.pdf  *.zip  *.tar.gz    # IDE files  .vscode/  .idea/  *.swp    # Logs  *.log  logs/ Bu dosyayı bir kere oluşturuyorsunuz ve bir daha dokunmuyorsunuz. Ama etkisi her session’da kendini gösteriyor.

Neden Bu Kadar Etkili?

Claude Code bir proje üzerinde çalışırken, dosya yapısını keşfetmek için dizinleri tarar. .claudeignore olmadan node_modules/ klasörüne girip binlerce dosyayı indexlemeye çalışabilir. Bir package-lock.json dosyasının 5.000+ satır olduğunu düşünün. Claude bunu okuduğunda yüzlerce token boşa gidiyor ve üstelik bu bilgi neredeyse hiçbir zaman işe yaramıyor.SAP projelerine özgü bir detay daha var: webapp/resources/ altındaki UI5 kütüphane dosyaları. Bunlar projenizin bir parçası değil, framework dosyaları. Claude’un bunları okumasının hiçbir anlamı yok.

3. Prompt Disiplini: Az Söyle, Çok İş Çıkar

Bu bir dosya değil, bir alışkanlık. Ama token tasarrufunda belki de en büyük etkiyi yaratan şey bu.

Model Seçimi

Claude Code’da her session’ın başında kullanacağınız modeli bilinçli olarak seçin. Sonnet günlük işlerin yüzde sekseninde yeterli: CDS view düzenleme, annotation ekleme, basit bug fix, test yazma. Opus ise sadece karmaşık mimari kararlar için. Örneğin katmanlı CDS mimarisini sıfırdan tasarlamak veya RAP uygulamasının tüm yapısını refactor etmek gibi durumlar. Haiku da rename, format ve basit lookup gibi tekrarlayan işlerde işinizi görür.Aynı konuşma, aynı uzunlukta olsa bile Opus modeliyle Sonnet’e göre yaklaşık 5 kat daha fazla token tüketiyorsunuz. Session’a /model sonnet ile başlayıp gerçekten ihtiyaç duyduğunuzda /model opus ile geçmek büyük fark yaratıyor.

Spesifik Prompt Yazma

Kötü bir prompt Claude’un tüm projeyi taramasına neden olur. İyi bir prompt ise Claude’u doğrudan hedefe yönlendirir.Mesela “CDS view’da bir hata var, düzelt” derseniz Claude ne yapacak? Tüm CDS dosyalarını okuyacak, hepsini analiz edecek, belki birkaç tanesinde potansiyel sorun bulacak. Yüzlerce token harcanacak.Ama “consumption view’daki LongText alanı SELECT DISTINCT ile uyumsuz, base view’a STRING field olmadan bir katman ekle” derseniz Claude tam olarak ne yapması gerektiğini biliyor. Tek dosyaya bakıyor, spesifik bir çözüm uyguluyor.

Çıktıyı Kısıtlama

Claude’un varsayılan modu detaylı açıklamadır. Her değişikliği neden yaptığını, alternatif yaklaşımları, potansiyel riskleri anlatır. Bu bazen faydalıdır ama çoğu zaman gereksiz token tüketimine neden olur.Prompt’unuza basit kısıtlamalar eklemek çıktı token’larını yarıya indirebilir. “Sadece kodu ver, açıklama yapma” veya “sadece değişen satırları göster” ya da “diff formatında göster” gibi ifadeler buna iyi örnekler.

Context Yönetimi

Session boyunca şu komutları alışkanlık haline getirin./compact komutu bir milestone tamamladığınızda işe yarar. Bir bug fix bitti, bir CDS view tamamlandı, hemen /compact çalıştırın. Context dolmadan, temiz bir noktada özetleme yapmak çok daha kaliteli sonuç verir. Üstelik /compact CDS entity isimlerini ve hata mesajlarını koru diyerek özetleme sırasında neyin korunacağını da belirtebilirsiniz./clear komutu tamamen farklı bir göreve geçerken kullanılır. Eski context sadece token israfıdır./cost komutu anlık token kullanımınızı gösterir. Nerede durduğunuzu bilmek, bilinçli kararlar vermenizi sağlar.

Scope Daraltma

SAP projelerinde komut çıktıları da context’i şişirebilir. Birkaç küçük alışkanlık büyük fark yaratır. git log --oneline -5 yazın, git log değil. Tüm commit geçmişi context’e yüklenmesin. “Testleri sadece auth modülü için çalıştır” deyin, “tüm testleri çalıştır” değil. Hata loglarında stack trace genellikle yeterlidir, 200 satırlık uygulama çıktısı çoğunlukla gereksizdir.

Claude Code ile Günlük İş Akışı Nasıl Olmalı?

Tüm bunları bir araya getirdiğimizde, günlük iş akışınız şöyle görünmeli:Önce bir kerelik proje hazırlığını yapın: .claudeignore ve CLAUDE.md oluşturun, docs/ altına referans dosyaları koyun. Sonra her session’ın başında /model sonnet ile başlayın. Çalışırken spesifik prompt’lar yazın, çıktıyı kısıtlayın.Hermilestone sonrası /compact çalıştırın. Görev değiştirirken /clear kullanın veya yeni session açın. Karmaşık bir sorunla karşılaştığınızda /model opus’a geçin, çözün, sonra Sonnet’e dönün.Bu alışkanlıkları edinmek bir iki session sürüyor. Ama bir kez oturduğunda, aynı bütçeyle çok daha fazla iş çıkardığınızı fark edeceksiniz.

Sonuç

Claude Code, SAP ABAP/RAP geliştirmede gerçekten güçlü bir araç. Modern ABAP syntax’ı, CDS view mimarisi, RAP uygulamaları… Hepsinde ciddi bir hızlanma sağlıyor. Ama bu gücü verimli kullanmak sizin elinizde.Üç basit adımla, yani yalın bir CLAUDE.md, kapsamlı bir .claudeignore ve bilinçli prompt alışkanlıklarıyla token tüketiminizi yarıya indirebilirsiniz. Daha az token demek daha hızlı yanıtlar, daha temiz context ve daha az maliyet demek.Sonuçta mesele Claude’u daha az kullanmak değil, daha akıllı kullanmak.  

Benzer
Bloglar

Mailiniz başarıyla gönderilmiştir en kısa sürede sizinle iletişime geçilecektir.

Mesajınız ulaştırılamadı! Lütfen daha sonra tekrar deneyin.