Tüm yazılara dön
·4 dk okuma

Geliştirici dostu CLI tasarımı: güvenli varsayılanlar ve otomasyon sözleşmesi

Komut satırı aracı küçük bir yardımcı betik olarak başlayabilir: geliştirici tek komutla veritabanını hazırlar, içerik üretir veya bir servisi başlatır. Araç ekip içinde yaygınlaştığında ise yalnızca insanın terminalde kullandığı bir kısayol olmaktan çıkar. CI iş akışları, başka betikler, dokümantasyon ve bazen üçüncü taraflar onun çıktısına, hata koduna ve varsayılanlarına güvenmeye başlar.

Bu yüzden bir CLI'nin kullanıcı arayüzü yalnızca komut adından ibaret değildir. Argümanlar, seçenekler, çevre değişkenleri, standart çıktı, standart hata, çıkış kodu, etkileşim istemleri ve yapılandırma dosyaları birlikte bir sözleşme oluşturur. İyi tasarlanmış araç, hem ilk kez kullanan kişiye yol gösterir hem de otomasyon içinde tahmin edilebilir davranır.

Komut ağacını iş diline göre kurun

Komut adları uygulama iç ayrıntılarını değil, kullanıcının yapmak istediği işi anlatmalıdır. project init, content validate, deploy preview gibi fiil-nesne düzeni; kullanıcının komutu keşfetmesini kolaylaştırır. Aynı işi farklı şekillerde yapan eş anlamlı komutlar ve belirsiz kısaltmalar zamanla dokümantasyonu ve desteği zorlaştırır.

Üst seviye yardım çıktısı, en sık kullanılan komutları ve kısa amaçlarını göstermelidir. Bir alt komutta --help ise gerekli argümanları, varsayılan değerleri, örnekleri ve yan etkileri açıklamalıdır. Bir kullanıcı hata yaptıktan sonra ancak kaynak kodu okuyarak doğru komutu bulabiliyorsa yardım metni sözleşmenin önemli bir parçasını eksik bırakmıştır.

Argüman biçimini tutarlı seçin. Kimlik veya dosya yolu gerektiren bir komut bunları konumsal argüman yapıyorsa, benzer komutlarda da aynı beklentiyi koruyun. İsteğe bağlı davranışlar için uzun seçenek adları kullanmak, komutun okunabilirliğini artırır. Kısa seçenekler sık kullanılan ve açık karşılığı olan birkaç durumla sınırlı kalmalıdır.

İnsan çıktısı ile makine çıktısını ayırın

Renkli ilerleme çubukları ve açıklayıcı cümleler terminalde yararlıdır; fakat başka bir programın bunları ayrıştırması kırılgandır. Araç betikler tarafından da kullanılacaksa yapılandırılmış bir çıktı seçeneği sunmalıdır. --json benzeri açık bir kipte, başarı ve hata sonucu belgelenmiş alanlarla verilebilir.

Standart çıktı yalnızca komutun asıl sonucunu taşımalıdır. Uyarılar, ilerleme bilgisi ve hata açıklamaları standart hataya yazılırsa, tool list --json | other-command gibi boru akışları kararlı kalır. Renk, terminal algılandığında ya da açıkça istendiğinde etkin olmalı; makine çıktısına kaçmamalıdır.

Çıkış kodları da API'dir. 0 başarıyı, sıfır dışı değerler hatayı göstermelidir. Kullanım hatası, doğrulama hatası, ağ sorunu ve beklenen “bulunamadı” durumu aynı kodu paylaşmak zorunda değildir; ancak kodların anlamı belgelenmeli ve sürümler arasında rastgele değişmemelidir. Betik, metni değil bu sözleşmeyi kullanmalıdır.

Güvenli varsayılanı etkileşimden bağımsız tasarlayın

Silme, taşıma, üretime gönderme veya toplu güncelleme gibi yıkıcı işlemler, onay istemi olmadan çalıştırılmamalı gibi görünebilir. Ancak CI ortamında beklenmedik bir soru sormak işi kilitler. Daha iyi model, varsayılanın güvenli biçimde başarısız olması; açık --yes, --force veya benzeri bir seçenekle onay verilmesidir.

Örneğin records delete 42 kullanıcıya neyin silineceğini gösterip onay isteyebilir; etkileşimsiz ortamdaysa açık onay bayrağı yoksa hatayla çıkabilir. --dry-run seçeneği ise gerçek değişiklik yapmadan hangi kaynağın etkileneceğini gösterir. Bu kip özellikle filtre veya toplu işlem komutlarında geri dönüşü olmayan hataları azaltır.

Güvenli varsayılan, bağlamı da kapsar. Üretim hedefi seçilmemişse araç sessizce üretime yönelmemelidir. Ortam adı, hesap veya tenant gibi kritik bağlamı açıkça istemek; yanlış terminal penceresinde çalıştırılan komutun maliyetini düşürür.

Yapılandırma önceliğini görünür kılın

CLI'ler çoğu zaman seçenek, çevre değişkeni, kullanıcı ayarı ve proje dosyasından değer alır. Bu kaynakların çakıştığında hangisinin üstün geldiği belirsizse, araç “makinemde çalışıyor” sorununu yeniden üretir. Açık ve belgelenmiş bir öncelik sırası gerekir.

Yaygın bir düzen şöyledir: komut satırında verilen değer en yüksek önceliktedir; ardından çevre değişkeni, proje yapılandırması ve güvenli varsayılan gelir. Araç bir config show veya diagnose komutuyla etkin değeri ve kaynağını gösterebilirse, kullanıcı hangi anahtarın neden kullanıldığını hızlıca anlar. Gizli değerleri bu çıktıda maskelemek gerekir.

Yapılandırma dosyası, tek kullanıcının yerel tercihi ile ekip tarafından paylaşılan proje kararını ayırmalıdır. Kullanıcı ev dizinindeki token veya kişisel yol, depodaki yapılandırma dosyasına girmemelidir. Proje örnek dosyası ise gerekli değişkenleri açıklamalı ve ilk kurulumda çalışabilir başlangıç sunmalıdır.

Hataları düzeltme yoluyla birlikte verin

“İşlem başarısız” anlamlı bir hata değildir. İyi hata mesajı, neyin yanlış olduğunu, hangi girdinin etkilediğini ve kullanıcının bir sonraki güvenli adımını söyler. Örneğin “--environment eksik; dev, staging veya production seçin” ile “geçersiz argüman” arasında büyük kullanım farkı vardır.

Hata zincirini logda veya ayrıntı kipinde korumak da faydalıdır. Varsayılan mesaj kısa kalırken --verbose ile istek kimliği, bağlantı hedefi veya iç hata türü görülebilir. Ancak access token, parola, tam bağlantı dizisi veya kişisel veri hata çıktısına yazılmamalıdır.

Tekrar deneme mantığı yalnızca güvenli işlemlerde otomatik olmalıdır. Ağ zaman aşımında idempotent bir okuma tekrar denenebilir; ödeme, yayımlama veya silme gibi işlemlerde önce sonucun belirsizliği ele alınmalıdır. Araç, “başarısız” ile “sonuç bilinmiyor” durumunu ayırmalıdır.

Sürüm ve uyumluluğu yönetin

Bir CLI güncellemesinde varsayılanı değiştirmek, alan adını yeniden adlandırmak veya JSON çıktısındaki alanı kaldırmak otomasyonu kırabilir. Komut satırı sözleşmesini sürümleyin: kırıcı değişiklikleri not edin, kullanım dışı bırakma uyarısı verin ve mümkünse geçiş dönemi sunun.

Araç sürümünü, gerektiğinde API hedefini ve yapılandırma şemasını görünür kılmak destek süresini azaltır. tool version yalnızca sürüm numarası değil, hata bildirimine eklenecek yararlı tanılama bilgisini de vermelidir. Otomasyon için sürüm sabitleme veya uyumlu sürüm aralığı tanımlamak, beklenmedik güncellemelerin etkisini sınırlar.

Gerçek kullanım akışlarıyla test edin

CLI testleri sadece komut işlevini değil, kullanıcının gördüğü sözleşmeyi doğrulamalıdır. Hiç yapılandırma olmadan yardım çalışıyor mu? Geçersiz argümanda çıkış kodu ve hata metni doğru mu? --json kipinde standart çıktı geçerli JSON mu? Etkileşimsiz yıkıcı işlem güvenli biçimde reddediliyor mu? Bunlar uçtan uca test senaryolarıdır.

Dokümantasyondaki örnekleri CI içinde çalıştırmak, eskimiş komutları ve örtük varsayımları yakalar. Temiz ortam testi ise araç kurulumunun kişisel bilgisayardaki gizli bağımlılıklara dayanmadığını kanıtlar.

İyi bir CLI, komutları kısa tutmaktan daha fazlasıdır. Açık bir dil, kararlı makine sözleşmesi, güvenli varsayılanlar ve eyleme geçirilebilir hatalar; aracı bir geliştiricinin bir kez kullandığı betikten, ekibin güvenle otomatikleştirebildiği kalıcı bir ürüne dönüştürür.