Re-Shell: Mikroservisler ve Mikrofrontend'ler İçin Tek Bir CLI
Katıldığım her proje, on yılın iyi bir kısmı boyunca aynı şekilde başladı. Yeni bir repo, boş bir pnpm çalışma alanı ve ardından iki-üç günlük sessiz, gösterişsiz tesisat. Gateway'i kur. Frontend'lerin servislerle nasıl konuşacağına karar ver. Bir bileşen kütüphanesi seç ve onu monte et. Üretimde bir şey çökene kadar herkesin unuttuğu sağlık kontrolü uç noktalarını yaz. Asıl ürün işi başladığında, son üç projede inşa ettiğim aynı iskeleyi, her seferinde biraz farklı şekilde yeniden inşa etmiş oluyordum. Re-Shell, bundan bıkmaktan doğdu. Açık kaynak tam yığın (full-stack) geliştirme platformum ve var olma sebebinin tamamı, her yeni projede aynı tesisatı yeniden dikmemi durdurmak.
Tutkal Betiklerinin (Glue Scripts) Sorunu
Ekiplerin bunu çözmesinin alışılmış yolu tutkaldır. Bir servisi iskeleleyen bir bash betiği. Kimsenin güncellemediği bir README bölümü. Diğer repodakiyle senkronizasyondan çıkan, kopyala-yapıştır bir Vite yapılandırması. Hiçbiri tam olarak yanlış değil ama hepsi, yalnızca iki-üç kişinin kafasında ve bir klasör dolusu yarı belgelenmiş betikte var olan bir araç zincirine ekleniyor.
Daha derin mesele şu: mikroservisler ve mikrofrontend'ler genellikle iki ayrı araç setiyle iki ayrı dünya olarak ele alınır. Backend ekibinin kendi üreteçleri ve konvansiyonları vardır. Frontend ekibinin kendi bileşen kütüphanesi ve derleme kurulumu vardır. Aralarındaki sözleşme bir Slack başlığında yaşar. Bir tarafta bir şey değiştiğinde, diğer taraf bunu çalışma zamanında öğrenir. Her iki yarıyı da aynı sistemin parçası olarak ele alan tek, uyumlu bir araç zinciri istedim çünkü pratikte öyleler.
Re-Shell Aslında Ne
Re-Shell, at-re-shell adlı bir npm organizasyonu yayınlayan bir pnpm monorepo'su. Üç paket gönderiyor ve bu bölünme önemli.
İlki CLI. Bu, gerçekten çalıştırdığınız kısım. Yeni servisler ve frontend'ler iskeleler, kod üretir, çalışma alanı genelinde sağlık kontrolleri çalıştırır, bir frontend'i neyin şişirdiğini görebilmeniz için paketleri (bundle) analiz eder, CI/CD'yi bağlar ve sürümler arası konvansiyonlar değiştiğinde geçişleri (migration) ele alır. Diğer her şeyin ön kapısıdır.
İkincisi UI paketi, Shadcn öncelikli bir React bileşen kütüphanesi. Shadcn'i temel olarak bilinçli olarak seçtim. Tasarımınız varsayılanlarından saptığı anda sizinle savaşan ağır, görüş sahibi bir bileşen çerçevesi istemedim. Shadcn size sahip olduğunuz ve düzenleyebileceğiniz bileşenler verir ve Re-Shell bunun üzerine tutarlı bir katman inşa eder; böylece CLI tarafından iskelelenen her frontend aynı kelime dağarcığından başlar.
Üçüncüsü contracts paketi, UI ile CLI arasında oturan paylaşılan TypeScript sözleşmeleri. Bu, en bilinçli olduğum parça. İki tarafı dürüst tutan tip sınırıdır. CLI, UI'ın tükettiği bir şey ürettiğinde, üzerinde anlaştıkları şekil iki yerde değil, tek bir yerde yaşar; altı ay içinde birbirinden ayrılan biraz farklı iki arayüzde değil.
Burada Tam Yığın Platform Ne Demek
"Tam yığın platform" ifadesini dikkatle kullanıyorum çünkü abartmak kolay. Re-Shell'in her şeyi yaptığını kastetmiyorum. Dikişleri (seam) sahiplendiğini kastediyorum. Bir mikroservis ile gateway arasındaki dikiş. Bir mikrofrontend ile onu barındıran kabuk (shell) arasındaki dikiş. Üretilmiş bir backend ile onu çağıran tipli istemci arasındaki dikiş. Projelerin çürüdüğü yer o dikişlerdir ve insanların hızlı hareket ederken tam olarak atladığı kısımlar onlardır.
Yani platform, sıkıcı kararlar hakkında bir duruş alır. Sağlık ve gözlemlenebilirlik hook'ları nereye gider. Servisler nasıl kaydedilir. Yeni bir frontend, manuel bir entegrasyon talebi olmadan kabuğa nasıl dahil edilir. Bunların hiçbiri tek başına zor bir sorun değil. Değer, bir kez, tutarlı biçimde kararlaştırılmaları ve CLI'ın onları kararlı kalacak şekilde zorunlu kılmasıdır.
Yapay Zekâ, Devralmadan Nereye Uyar
Re-Shell'in üreteç ve geçiş kodunun epey bir kısmı Claude ile birlikte yazıldı. Bunun nasıl işlediğinin dürüst versiyonu, pazarlama versiyonundan daha az heyecan vericidir. Claude, geniş, tekrarlayan yüzey alanında iyidir; tam da senaryolar arasında çok benzer olduğu için sıkıcı olan türden iş. Beş backend üretecini yapısal olarak hizalı tutmak, eski iskeleyi yeni bir konvansiyona yeniden yazan geçişi yazmak, bir şablonlama katmanındaki uzun uç durum kuyruğunu doldurmak. Bu, gerçek zaman tasarrufu.
Yapmadığı şey mimariye karar vermektir. Sözleşme sınırı, sözleşmeleri birinci sınıf bir paket yapma seçimi, CLI'ın neyi sahiplenmesi ve neyi rahat bırakması gerektiğine dair karar — bunlar başarısızlık modlarıyla yaşamış olmamdan geldi. Bir ajan, işaret ettiğiniz her şeyi, yanlış soyutlama da dahil olmak üzere, çok verimli biçimde seve seve üretir. Kaldıraç, önce ne istediğinizi bilmekten ve oraya daha hızlı varmak için ajanı kullanmaktan gelir; ona ne istediğinizi sormaktan değil.
Benim İçin Neyi Değiştirdi
Somut sonuç şu: yeni bir proje artık üç günlük tesisatla başlamıyor. CLI ile ve gerçekten ürünle ilgili birkaç kararla başlıyor. Mesele bütün bu. Bunun gibi bir platform, herhangi bir tek özellik nedeniyle etkileyici değildir. Yalnızca bir kez elle yapılmayı asla hak etmemiş bir tekrarlayan iş kategorisini ortadan kaldırdığı için faydalıdır. Re-Shell açık kaynak ve hâlâ gelişiyor; çoğunlukla daha zayıf değil, daha güçlü görüşlere sahip olma yönünde. Sahiplendiği dikişler, artık düşünmediğim dikişler ve bu, her zaman hak ettikleri tam dikkat miktarı.