Gemini CLI’yı Rust projenizde terminalde gemini komutuyla başlatırsınız; ajan, proje kökündeki GEMINI.md dosyasından bağlamı okur. Bu rehberde Rust’a özel kurulum, çalışma döngüsü ve doğrulama pratiklerini anlatıyorum. Temel kullanım için Gemini CLI nasıl kullanılır? Adım adım rehber yazısına göz atabilirsiniz.
Gemini CLI Rust işleri için neden uygun
Rust ekosistemi, ajanların işini kolaylaştıran güçlü bir araç zincirine sahiptir. cargo komutları deterministiktir; ajan cargo build, cargo test ve cargo clippy çıktılarını güvenilir bir şekilde yorumlayabilir. Derleyici hataları genellikle E0515, E0502 gibi kodlarla birlikte gelir ve düzeltme önerileri sunar; ajan bu mesajları kullanarak adım adım düzeltebilir. Clippy uyarıları ise Rust’a özgü en iyi pratikleri öğretir; ajan, uyarıyı bastırmak yerine kodu düzeltebilir. Trait ve modül yapısı, değişiklikleri küçük parçalara bölmeyi kolaylaştırır; örneğin bir fonksiyonun imzasını değiştirmek yalnızca o modülü etkiler. Rustfmt sayesinde kod formatı tutarlıdır; ajan ürettiği kodu formatladıktan sonra diff temiz kalır. Ajan ayrıca GEMINI.md içindeki proje kurallarını okuyarak her oturumda aynı standartları uygular. Bu nedenle refactor, test ekleme, clippy temizliği ve hata tipi dönüşümü gibi işlerde değer üretir. Örneğin, Result<T, Box<dyn Error>> yerine thiserror tabanlı özel hata tipine geçişi planlayıp uygulayabilir. Ajanın kendisi hakkında daha fazla bilgi için Gemini CLI sayfasına bakın.
Projeyi ajan için hazırlama ve GEMINI.md
Ajanın en büyük avantajı, her oturumda aynı bağlamı tekrar anlatmak zorunda kalmamanızdır. Proje köküne GEMINI.md ekleyin; dosyada build, test, lint komutlarını, klasör kurallarını ve Rust’a özel kısıtları yazın. Ajan bu dosyayı her çalıştırmada okur. Dosya ne kadar somut olursa ajan o kadar az yanlış karar verir. Örneğin, workspace’iniz varsa hangi crate’in ne işe yaradığını belirtin; ajan cargo test --workspace yerine yalnızca ilgili crate’i test etmesi gerektiğini anlar. Hata yönetimi, async runtime, unsafe kullanımı, feature flag’leri gibi konularda net kurallar koyun. Aşağıdaki örnek tek workspace’li bir proje için yeterli:
# Proje komutları
- Build: `cargo build --workspace`
- Test: `cargo test --workspace`
- Lint: `cargo clippy --workspace -- -D warnings`
- Format: `cargo fmt --all -- --check`
# Klasör düzeni
- `crates/core`: alan modelleri ve trait tanımları
- `crates/api`: HTTP ve gRPC katmanı
- `src/bin`: çalıştırılabilir uygulamalar
# Rust kuralları
- Ownership'u bozmadan, mümkünse referans ve borrow kullan; gereksiz clone ekleme.
- Hata yönetimi için `thiserror` (kütüphane) ve `anyhow` (uygulama) kullan.
- `unsafe` kod ancak performans kritik ve test edilmişse ekle; nedenini yorumla.
- Public API değiştirirken mevcut integration testleri güncelle.
- Clippy uyarılarını bastırma; kodunu uyarıya göre düzelt.
Bu dosyayı sürüm kontrolüne ekleyin; ekip arkadaşlarınız da aynı kuralları kullanır. GEMINI.md’yi değiştirdiğinizde ajanın yeni kuralları hemen uyguladığını göreceksiniz.
Çalışma döngüsü ve örnek Rust görev promptları
Ajanla verimli çalışmanın yolu, büyük görevi küçük adımlara bölmektir. Önce plan isteyin; ajan, hangi dosyaları değiştireceğini, hangi testlerin etkileneceğini ve olası riskleri sıralasın. Planı onayladıktan sonra uygulamasını isteyin; her adımda cargo test ve cargo clippy çalıştırmasını şart koşun. Ajan test başarısız olursa hatayı düzeltmesini isteyin; bu döngüyü en fazla iki kez tekrarlayın, sonra kendiniz devreye girin. Her aşamada git diff ile değişiklikleri gözden geçirin; ajanın yaptığı her hamleyi commit’lemeyin, önce test yeşil olsun. Ajanın ürettiği kodu okumadan merge etmeyin. Aşağıdaki promptlar Rust projelerinde sık kullanılır:
- “
src/parser.rsiçindekiparse_configfonksiyonunuResult<T, ConfigError>döndürecek şekilde yeniden düzenle; önce planı yaz, sonra uygula.” - “
Cargo.toml’aserdeveserde_jsonekle,Configstruct’ınaSerializeveDeserializederive’larını ekle; ardından JSON yuvarlak tur testi yaz.” - “
cargo clippy --workspace -- -D warningsçalıştır, çıkan tüm uyarıları kodu değiştirerek temizle,allowattribute’u ekleme.” - “
crates/coreiçindekiUsertipinicrates/api’ye taşımadan önce etki analizi yap; dairesel bağımlılık oluşmadan nasıl taşınacağını planla.” - “Bu modüldeki
unwrap()çağrılarını bul, hata bağlamıyla birlikteanyhow::Contextkullanarak dönüştür; testleri güncelle.”
Bu promptlardaki gibi, ajanın hangi araçları kullanacağını ve kabul kriterlerini açıkça belirtin. Ajan belirsizlik yaşarsa soru sormasını isteyin; sessizce varsayım yapmasına izin vermeyin.
Rust’ta ajanın iyi yaptığı işler ve dikkat edilecek tuzaklar
Ajan; trait türetme (Debug, Clone, Serialize, Deserialize), hata tipi dönüşümleri (From<io::Error> implementasyonları), modül taşıma, test ekleme (unit, integration, doc tests), clippy temizliği, dependency güncelleme ve Cargo.toml düzenleme gibi mekanik işleri iyi yapar. Örneğin, bir enum’a thiserror derive’ı ekleyip Display ve Error implementasyonlarını yazabilir; std::fs::read_to_string çağrısını ? operatörüyle dönüştürebilir; bir fonksiyonun imzasını impl Iterator<Item = &str> kullanacak şekilde sadeleştirebilir.
Ancak Rust’a özgü tuzaklarda dikkatli olun:
- Borrow checker hatalarını aşmak için gereksiz
clone()veyaRc<RefCell<T>>üretebilir; bu, performansı ve kodu bozar. Herclone()çağrısını sorgulayın; referans ömrü veyaCowdaha iyi olabilir. - Lifetimes ve generic bound’larda aşırı karmaşık çözümler önerebilir; basit alternatifleri sormadan kabul etmeyin. Bazen
'staticeklemek yerine borrowed data kullanmak daha temizdir. unsafeblok eklerken gerekçeyi ve güvenlik argümanını yazmasını isteyin; aksi halde reddedin. Rust’ın güvenlik garantilerini bozan kod, inceleme olmadan kabul edilemez.- Makro ve proc-macro üretimi bazen yanlış token sıralaması yapabilir; mutlaka inceleyin ve
cargo expandile genişletilmiş kodu kontrol edin. Özellikle derive macro’ları beklenmedik expansion üretebilir. - Bağımlılık eklerken
Cargo.toml’a gereksiz kütüphane ekleyebilir; her eklemeyi sorgulayın.cargo treeile bağımlılık ağacını kontrol edin; ajan bazen sadece bir fonksiyon için ağır bir crate ekleyebilir. - Async runtime seçiminde (tokio vs async-std) projede mevcut runtime’a uymayan kod üretebilir; GEMINI.md’de hangi runtime’ın kullanıldığını belirtin.
- Feature flag’lerini yanlış yönetebilir;
#[cfg(feature = "...")]bloklarını eklerken testlerin tüm feature kombinasyonlarında geçtiğini doğrulayın.
Test ve doğrulama pratiği
Rust projesinde ajanın çıktısını kabul etmeden önce şu doğrulama zincirini uygulayın:
| Adım | Komut veya kontrol | Ne beklenir |
|---|---|---|
| Format | cargo fmt --all -- --check | Hiçbir dosya değişmemiş olmalı |
| Lint | cargo clippy --workspace -- -D warnings | Sıfır uyarı |
| Test | cargo test --workspace | Tüm testler geçmeli |
| Diff | git diff --stat ve git diff | Yalnızca istenen dosyalar, beklenen değişiklikler |
Ajan her adımda bu komutları kendisi çalıştırabilir; ancak son onayı siz verin. Özellikle refactor sonrası cargo test çalıştırmadan commit’lemeyin. Unit testlerin yanı sıra integration testlerin (tests/ dizini) ve doc testlerin de çalıştığından emin olun. Ajan bazen yalnızca unit testleri çalıştırır; cargo test --workspace --all-features gibi komutlarla tüm feature’ları kapsayın. Ayrıca cargo check ile hızlı derleme hatalarını yakalayabilirsiniz; bu, uzun test döngülerinden önce zaman kazandırır. Ajanın ürettiği test adlarını ve assertion’ları inceleyin; bazen test geçiyor ama yanlış davranışı doğruluyor olabilir. Property-based testing (örneğin proptest) veya snapshot testing kullanıyorsanız, ajanın bu testleri güncellemesini talep edin.
Bir Rust projesinde birden fazla ajanı AgentVera ile yönetmek
AgentVera, kodlama ajanlarının gerçek komut satırı araçlarını (Claude Code, Codex, Gemini CLI ve diğerleri) tek pencerede, her biri kendi gerçek terminal panelinde yan yana çalıştıran bir masaüstü uygulamasıdır. Rust işleri için en değerli özellikler; paralel git worktree’leri sayesinde ajanların birbirinin dosyalarını ezmemesi, her dönüş sonunda ikinci bir modelin kodu inceleyip bulguları dosya:satır olarak raporlaması ve her dönüşün anlık görüntüsünün tek tıkla geri alınabilmesidir. Token bütçeleri de ajanın kontrolsüzce uzun bir refactoring’e dalmasını engeller. Böylece bir ajan cargo test ile uğraşırken diğeri clippy temizliği yapabilir; çakışma riski olmadan paralel ilerleme sağlanır. Daha fazlası için Windows’ta kodlama ajanlarını yönetmek: paralel ajanlar yazısına bakın.
Sonuç
Gemini CLI’yı Rust projesinde gemini komutuyla başlatın, GEMINI.md ile proje bağlamını verin ve her değişikliği cargo test, clippy ve fmt ile doğrulayın. Ajan mekanik işleri hızlandırır; ownership ve borrow kararlarını siz verin. Birden fazla ajanı paralel çalıştıracaksanız AgentVera gibi araçlarla çakışmaları önleyin.