Claude Code in Action — Geliştirici Pratiği Referansı
Claude Code (CLI) için kapsamlı pratik notlar. Coding assistant temellerinden başlayıp CLAUDE.md bağlam yönetimine, custom command ve hook'lara, MCP server entegrasyonuna ve Claude Code SDK'ya kadar 13 bölüm — geliştirici masasında günlük kullanım için hazır.
- 1. Coding Assistant Nedir?
- 2. Claude Code in Action — Demo Senaryolar
- 3. Bağlam Ekleme (CLAUDE.md, /init, # ve @)
- 4. Değişiklik Yapma (Plan Mode, Thinking Mode, Screenshot)
- 5. Bağlam Kontrolü (Escape, Compact, Clear)
- 6. Custom Commands (Slash Komutları)
- 7. MCP Server ile Genişletme
- 8. GitHub Integration (Actions)
- 9. Hooks — Tanım ve Kullanım
- 10. Hook Implementation Örneği (.env Koruma)
- 11. Faydalı Hook'lar (Type Checker, Duplicate Prevention)
- 12. Claude Code SDK
- 13. Komtaş İçin Pratik Önerileri
1. Coding Assistant Nedir?
Bir coding assistant, dil modelini araç (tool) kullanımı ile birlikte çalıştırarak kod yazma ve geliştirme görevlerini tamamlayan sistemdir.
Çekirdek Süreç (Core Process)
- Görev alır — örn. error mesajından bug fix talebi
- Bağlam toplar — dosyaları okur, codebase'i anlar
- Plan yapar — sorunu çözmek için adım planı oluşturur
- Aksiyon alır — dosyaları günceller, test çalıştırır
Temel kısıt: Dil modelleri yalnızca text input/output işler — doğrudan dosya okuyamaz, komut çalıştıramaz, dış sistemlerle etkileşmez.
Tool Use System — Aksiyon Mekanizması
Dil modelinin aksiyon alabilmesi için coding assistant şu döngüyü kurar:
- Assistant, kullanıcı isteğine instruction'lar ekler
- Instruction'lar formatlanmış aksiyon yanıtlarını tanımlar (örn.
"read file: filename") - Dil modeli formatlanmış aksiyon isteğiyle yanıt verir
- Assistant gerçek aksiyonu yürütür (dosyayı okur, komut çalıştırır)
- Sonuçlar dil modeline geri gönderilir → final response üretilir
Claude Modellerinin Avantajı
- Diğer dil modellerine kıyasla üstün tool use yetkinliği
- Tool fonksiyonlarını anlama ve karmaşık görevler için bunları birleştirmede daha iyi
- Claude Code extensible — yeni tool'lar kolayca eklenir
- Kod aramasında direct search kullanır — codebase'i dış sunuculara göndermez (güvenlik avantajı)
2. Claude Code in Action — Demo Senaryolar
Claude Code'un default tool seti: file read/write, command execution, basic development operations. Pratikteki güç, gerçek senaryolarda görülür:
| Senaryo | Tool Kullanımı | Sonuç |
|---|---|---|
| Performance optimization | Chalk (5. en çok indirilen JS paketi, 429M haftalık) için benchmark + profiling tools, todo list, bottleneck analizi | 3.9× throughput iyileşmesi |
| Data analysis | Video streaming churn analizi: Jupyter notebook'ta CSV verisi, hücre hücre çalıştırma, sonuçları görerek sonraki analizleri customize etme | İteratif keşif analizi |
| Tool extensibility | Playwright MCP server: browser açma, screenshot, UI styling güncelleme, görsel feedback ile iterasyon | Otomatik prompt iyileştirme + daha iyi UI |
| GitHub integration | GitHub Actions içinde PR review; Terraform AWS infra'da DynamoDB + S3 dış paylaşımı + Lambda'da PII output kombinasyonu | PR review'da otomatik PII exposure tespit |
3. Bağlam Ekleme (Adding Context)
Bağlam yönetimi Claude Code etkinliği için kritik. Çok fazla irrelevant bilgi performansı düşürür; az ama doğru bağlam ise yapılan iş kalitesini belirler.
/init komutu
İlk çalıştırmada tüm codebase analiz edilir, otomatik CLAUDE.md dosyası oluşur. İçinde proje özeti, mimari, kritik dosya referansları yer alır. Bu dosyanın içeriği her request'e dahil edilir.
3 tip CLAUDE.md
- Project level — takımla paylaşılır, source control'e commit edilir
- Local level — kişisel notlar, commit edilmez
- Machine level — tüm projeler için global instruction'lar
Memory mode (# sembolü)
CLAUDE.md dosyalarını doğal dil isteğiyle akıllıca düzenlemek için kullanılır. Örnek: # proje SQL dialect'i Postgres, asla MySQL syntax önerme yazınca Claude bunu CLAUDE.md'ye uygun şekilde yerleştirir.
@ sembolü ile dosya mention
Belirli dosyaları request'e dahil etmek için kullanılır. Claude'un kendi başına aramasını beklemek yerine hedeflenmiş bağlam sağlar. Örnek: @src/db/schema.sql tablo yapısına göre yeni bir migration yaz
4. Değişiklik Yapma (Making Changes)
Screenshot integration
Control-V (macOS'ta Command-V değil) ile screenshot yapıştırılır. Claude UI'daki belirli bir elementi anlamak için görseli okur.
Plan Mode
Shift + Tab iki kez basılarak aktive edilir. Claude daha fazla dosya araştırır, yürütmeden önce detaylı bir implementation plan oluşturur.
Ne zaman: Çok adımlı, codebase'in birçok yerini etkileyen görevler.
Thinking Mode
"Ultra think" gibi tetikleyici ifadelerle aktive edilir. Karmaşık logic için Claude'a extended reasoning budget verir.
Ne zaman: Tricky logic, debugging, derinlik gereken tek-noktada problem.
| Mod | Güçlü olduğu boyut | Tipik kullanım | Maliyet |
|---|---|---|---|
| Plan | Genişlik (breadth) | Çok dosyalı, çok adımlı görevler | Ek token |
| Thinking | Derinlik (depth) | Tek konuda derin akıl yürütme | Ek token |
| İkisi birlikte | Genişlik + derinlik | Karmaşık refactoring | En yüksek token |
Git integration: Claude Code, değişiklikleri git stage + commit edebilir ve descriptive commit message yazar.
5. Bağlam Kontrolü (Controlling Context)
| Teknik | Ne yapar | Ne zaman kullan |
|---|---|---|
| Escape (1×) | Claude'u yanıt ortasında durdurur, konuşmayı yönlendirmeye olanak verir | Yanlış yöne gidiyorsa hemen kes |
| Escape + Memory | Durdur + # ile tekrarlayan hatayı CLAUDE.md'ye not düş |
Aynı hatayı sürekli yapıyorsa kalıcı not bırak |
| Double Escape | Konuşmayı geriye sarar, eski mesajları gösterir, geri noktaya zıplama imkanı verir | Uzun debugging gidiş-gelişinden sonra eski temiz noktaya dön |
| Compact Command | Tüm conversation history'yi özetler, Claude'un öğrendiği bilgi korunur | Claude bilgi biriktirdi ama conversation kalabalıklaştı |
| Clear Command | Tüm conversation'ı siler, sıfırdan başlar | Tamamen ilgisiz yeni bir göreve geç |
6. Custom Commands (Slash Komutları)
Yapı
- Konum: Proje dizininde
.claude/commands/klasörü - Dosya adı = komut adı:
audit.md→/auditkomutu üretir - İçerik: Markdown dosyası — Claude'un yürüteceği instruction'lar
- Aktivasyon: Komut dosyaları oluşturulduktan sonra Claude Code restart
- Çalıştırma:
/commandname+ (opsiyonel) argument string
$arguments placeholder
Komut metnine $arguments ekleyerek runtime parametre alınır. Argument tipi serbest string'dir (file path, açıklama metni vb.).
Örnek: /audit komutu
# .claude/commands/audit.md
Aşağıdaki dosyada güvenlik audit'i yap: $arguments
Kontrol et:
1. SQL injection riski (string concat ile sorgu)
2. Hardcoded secret/API key
3. Yetkisiz dosya erişimi
4. Eksik input validation
Bulduğun her sorun için:
- Dosya:satır referansı
- Risk seviyesi (kritik/yüksek/orta)
- Öneri (1-2 cümle)
Format: Markdown tablo.
Kullanım: /audit src/api/users.py
/komtas-pr (PR template doldur), /komtas-test (eksik birim test üret), /komtas-rls (Cloud SQL row-level security politikası ekle), /komtas-dpia (KVKK DPIA mini-şablonu doldur) gibi şirket içi komutlar oluşturulabilir.
7. MCP Server ile Genişletme
MCP server'lar Claude Code'a yeni yetenekler ekler — yerel veya uzak çalışabilir. Browser otomasyonundan kurumsal API çağrılarına kadar her şeyi mümkün kılar.
Kurulum
claude mcp add [name] [start-command]
İzin yönetimi
İlk tool kullanımı manuel onay ister. Otomatik onay için settings.local.json içindeki allow array'ine "MCP__[servername]" eklenir.
Pratik örnek: Playwright MCP
Claude → localhost:3000 aç → UI component üret → styling kalitesini analiz et → görsel feedback'e göre prompt'u otomatik refine et. Sonuç: belirgin şekilde daha iyi component styling.
8. GitHub Integration (Actions)
Claude Code resmi entegrasyonu ile GitHub Actions içinde çalışır.
Kurulum süreci
/install GitHub appkomutu çalıştır- Claude Code app'i GitHub'a kur
- API key ekle
- Auto-generated PR iki GitHub action ekler
Default action'lar
| Action | Davranış |
|---|---|
| Mention support | @Claude issue/PR'da → görev assign edilir |
| PR review | Her yeni PR'da otomatik code review |
Customization
- Action'lar
.github/workflowsiçindeki config dosyaları üzerinden customize edilir - Custom instructions = Claude'a doğrudan context/yön talimatı geçilir
- MCP server entegrasyonu = Claude dış tool'lara erişebilir (örn. browser test için Playwright)
- Permission gerekliliği: Claude Code'un her permission'ı + her MCP tool için tekil olarak listelenmesi gerekir (kısayol yok)
9. Hooks — Tanım ve Kullanım
Hooks = Claude'un tool çalıştırması öncesinde veya sonrasında çalışan komutlar. Tool çağrılarını inceleme, engelleme veya feedback verme imkanı sağlar.
| Hook tipi | Ne zaman çalışır | Bloklama | Tipik kullanım |
|---|---|---|---|
| Pre-tool use | Tool çağrısı öncesi | ✅ Exit code 2 ile blok | Sensitive dosya korunması, izin kontrolü |
| Post-tool use | Tool çağrısı sonrası | ❌ | Auto-format, test çalıştır, type check |
Konfigürasyon
Settings dosyasına (global / project / personal) eklenir; manuel düzenleme veya /hooks komutuyla. Yapı: 2 bölüm (pre/post), her birinde matcher (hangi tool'lara uygulanır) ve command (yürütülecek komut).
Hook implementation süreci
- Hook tipini seç (pre vs post)
- Hedef tool name'leri belirle (matcher)
- Komut yaz — tool call data'yı stdin'den JSON olarak alır
- JSON parse et:
tool_name,input parameters - Uygun exit code ile çık
| Exit code | Anlam |
|---|---|
0 | Tool çağrısına izin ver |
2 | Tool çağrısını blok et (yalnızca pre-tool use) |
| stderr | Bloklarken Claude'a feedback olarak iletilir |
10. Hook Implementation Örneği — .env Koruma
Amaç: Claude'un .env dosyalarını okumasını engellemek (sırlar dışarı çıkmasın).
.claude/settings.local.json
{
"hooks": {
"preToolUse": [
{
"matcher": "read|grep",
"command": "node ./hooks/read_hook.js"
}
]
}
}
hooks/read_hook.js
#!/usr/bin/env node
// Hook: .env dosyalarına read/grep tool erişimini engeller
let stdinData = '';
process.stdin.on('data', chunk => stdinData += chunk);
process.stdin.on('end', () => {
try {
const data = JSON.parse(stdinData);
const filePath = data.tool_input?.file_path
|| data.tool_input?.path
|| '';
if (filePath.includes('.env')) {
console.error(
`🚫 .env dosyasına erişim hook ile engellendi: ${filePath}`
);
process.exit(2); // Block + feedback to Claude
}
process.exit(0); // Allow
} catch (e) {
// JSON parse hatası — güvenli tarafa geç, izin ver
process.exit(0);
}
});
.env dosyasına read ve grep operasyonları başarıyla bloklandı. Claude blokun nedenini stderr'dan görür ve operasyonu denemeyi bırakır. Hook değişikliklerinden sonra Claude Code restart gerekir.
11. Faydalı Hook'lar
Hook'lar = Claude Code'un yaygın zayıflıklarını (type errors, code duplication) yakalayan otomatik feedback döngüleri.
Hook 1 — TypeScript Type Checker
Sorun: Claude function signature'ı değiştirir ama tüm call site'ları güncellemez → type error.
Çözüm: Post-tool-use hook ile TypeScript dosya edit'inden sonra tsc --no-emit çalıştır.
Süreç: Tip hatası tespit → hata Claude'a feedback olarak gider → Claude call site'ları otomatik düzeltir.
Adapte: Tipli her dilde (Java, Go, Rust) çalışır. Tipsiz dillerde test suite çalıştırılabilir.
Örnek: post-tool-use TypeScript hook
{
"hooks": {
"postToolUse": [
{
"matcher": "edit|write",
"command": "bash -c 'tsc --no-emit 2>&1 || (echo \"Type errors above\" >&2; exit 0)'"
}
]
}
}
Hook 2 — Duplicate Code Prevention
Sorun: Claude karmaşık görevde mevcut query/function'ı kullanmak yerine yenisini üretir.
Çözüm: Watched directory'deki edit'lerde ayrı bir Claude instance başlat (TypeScript SDK ile), yeni kodu mevcut kodla karşılaştır, duplicate bulursa exit code 2 + feedback gönder.
Süreç:
- Watched dir'de edit tespit (örn.
src/queries/) - SDK ile yeni Claude instance başlat
- Yeni kodu mevcutla karşılaştır
- Duplicate varsa exit 2 + neden açıkla
- Original Claude feedback alır → mevcut kodu reuse eder
Trade-off: Ek zaman + maliyet vs. temiz codebase.
Öneri: Yalnızca kritik dizinler için aktive et (her edit'te değil).
12. Claude Code SDK
Claude Code SDK = programatik interface. CLI, TypeScript ve Python kütüphaneleri var. Terminal sürümüyle aynı tool'lara sahiptir.
Birincil kullanım
Mevcut process'lere intelligence eklemek için büyük pipeline'lara entegrasyon. Standalone bir araç olarak değil, helper komut, script, hook olarak kullanılır.
Default permission
Read-only (file, directory, grep). Write için manuel konfigürasyon gerekir — options.allowTools array'inde belirtilir veya .claude dizini settings içinde.
TypeScript SDK örneği — write permission ile
import { query } from '@anthropic-ai/claude-code';
for await (const message of query({
prompt: 'src/api/users.ts dosyasını okuyup type tanımlarını strict yap',
options: {
allowTools: ['read', 'edit'], // Write permission açıldı
cwd: '/Users/komtas/repo'
}
})) {
console.log(message); // Raw conversation: Claude ↔ model
}
13. Komtaş İçin Pratik Önerileri
| Konu | Komtaş için öneri |
|---|---|
CLAUDE.md |
Her repo'da project-level dosya. İçinde: .cursorrules referansı, branch adlandırma kuralları, kurumsal API endpoint listesi, KVKK kapsamı uyarısı, kullanılan internal MCP server listesi. |
| Custom commands | /komtas-pr, /komtas-test, /komtas-rls, /komtas-dpia, /komtas-changelog — şirket içi otomasyon. |
| Hooks (zorunlu) | (1) .env, secrets/, *.pem read/grep blok hook'u tüm repolara default. (2) Post-edit type check (TS projeleri için). |
| MCP server | Komtaş FastMCP server'ları lokal Claude Code'a bağlanabilir: contract search, customer lookup, internal docs. |
| GitHub Actions | PR review'ları otomatik. Custom instructions: "KVKK kapsamı kontrol et, PII output sızıntısı için Lakera Guard çağrısı eklenmemiş mi bak, .env reference'ı varsa flagle" |
| SDK | Ingest pipeline'ı içinde "belgeyi özetle, anahtar terimleri çıkar" gibi adımlar için kullanılır. |
| Plan/Thinking modları | Maliyet farkındalığı: ekibin token bütçesi takip edilmeli. Karmaşık refactor öncesi Plan, kritik logic için Thinking — günlük rutinde her dakika değil. |
CLAUDE.md şablonu + zorunlu doldurma → 3) İlk 5 custom command şirket içi paylaşımı → 4) GitHub PR review action default → 5) MCP server kataloğu (s3) için Claude Code presets.