7 puan yazan GN⁺ 2025-10-07 | 2 yorum | WhatsApp'ta paylaş
  • mise, yeni monorepo görevleri özelliğini duyurdu
  • Birden fazla projede ayrı ayrı ortamları, araçları ve görevleri kolayca yönetmek için birleşik bir görev ad alanı sunuyor
  • Güçlü wildcard desenleri, ortam/araç kalıtımı ve tutarlı çalıştırma bağlamı gibi çeşitli özellikler içeriyor
  • Farklı diller veya karmaşık ortamlara sahip monorepo'lar için sadelik ve esneklik sağlıyor
  • Mevcut Bazel, Turborepo vb. ile karşılaştırıldığında dilden bağımsızlık, kolay yapılandırma ve birleşik yönetim güçlü yönleri arasında

Giriş: Monorepo görevleri özelliği duyuruldu

  • mise, Monorepo Tasks adında yeni bir özellik sundu
  • Birden fazla projenin bulunduğu depolarda her proje için araçları, ortam değişkenlerini ve görevleri bağımsız tutup verimli biçimde yönetmeyi sağlayan birinci sınıf monorepo desteği sunuyor

Temel özellikler

  • Birleşik görev ad alanı: Monorepo içindeki tüm görevleri otomatik olarak bulur ve konuma göre önek ekleyerek açık biçimde ayırır
    Örnek:
    mise //projects/frontend:build
    mise //services/api:deploy
  • Akıllı araç ve ortam kalıtımı: Ortak araçlar kökte tanımlanır, gerektiğinde alt projelerde yeniden tanımlanabilir
    • Örnek: kök mise.toml içindeki node=20, python=3.12 ayarları tüm alt projelere otomatik olarak kalıtılır
    • Belirli bir proje (mise.toml) içinde node=14 ile override yapılabilir; üstteki python ayarı ise kalıtılmaya devam eder
  • Güçlü wildcard desenleri:
    • Tüm projelerde test çalıştırma: mise //...:test
    • services/ altındaki tüm build'leri çalıştırma: mise //services/...:build
    • frontend içindeki tüm görevleri çalıştırma: mise '//projects/frontend:*'
    • Görev adına göre gruplu çalıştırma yapılabilir
  • Her zaman tutarlı çalıştırma: Görev nereden çalıştırılırsa çalıştırılsın, ilgili görevin config_root içinde tanımlanan ortam ve araçlarla aynı şekilde çalışır
  • Otomatik güven yayılımı: Yalnızca monorepo kökü Trust olarak işaretlenirse alt yapılandırmalar otomatik olarak güvenilir kabul edilir

Hızlı başlangıç kılavuzu

  1. Kök mise.toml içinde experimental_monorepo_root=true ayarını yapın
  2. Deneysel bayrağı etkinleştirin: MISE_EXPERIMENTAL=1
  3. Her projenin mise.toml dosyasına tasks ekleyin
    • Örnek:
      [tasks.build]
      run = "npm run build"
  4. Kökten veya herhangi bir yoldan istediğiniz görevi çalıştırın
    • mise //projects/frontend:build
    • mise //...:test

Örnek monorepo yapısı

  • myproject/
    ├── mise.toml (experimental_monorepo_root = true)
    ├── services/
    │ ├── api/mise.toml
    │ ├── worker/mise.toml
    │ └── scheduler/mise.toml
    └── apps/
    ├── web/mise.toml
    └── mobile/mise.toml
  • Tüm servislerin build'ini çalıştırma: mise //services/...:build
  • Tüm uygulamalarda test çalıştırma: mise //apps/...:test
  • Tüm görevler: mise '//...:*'

Çıkış noktası ve etkileri

  • Monorepo yönetimindeki karmaşıklık ve tekrar eden script'lerle ilgili sorunlardan yola çıkıyor
  • once tanımla, her yerden çalıştır yaklaşımıyla tekrarları en aza indiriyor
  • Her proje için doğru araç/ortamı otomatik uyguluyor
  • Güçlü wildcard'larla CI/CD pipeline'larını basitleştiriyor
  • Görev ad alanı ile keşfi ve anlaşılabilirliği artırıyor

Mevcut başlıca araçlarla karşılaştırma

  • Basit görev çalıştırıcıları (Taskfile, Just vb.)

    • Tek proje otomasyonu için optimize edilmiştir; monorepo'da birleşik ad alanı, kalıtım ve wildcard desteği yoktur
    • mise, otomatik görev keşfi ve güçlü desen desteği sunar
  • JavaScript merkezli araçlar (Nx, Turborepo, Lerna)

    • JS/TS monorepo'larında güçlüdür (dependency graph, codegen, cache vb.)
    • mise, dilden bağımsızdır, farklı dil/yığınlara uyum sağlar ve birleşik araç/ortam değişkeni yönetimi sunar
  • Büyük ölçekli build sistemleri (Bazel, Buck2)

    • Dağıtık cache, remote execution vb. sunar ancak karmaşıklık ve öğrenme eğrisi yüksektir, yapısal kısıtlar fazladır
    • mise, non-hermetic bir yaklaşım benimser; esnek yapılandırma ve kolay benimseme sağlar
  • Diğerleri (Rush, Moon vb.)

    • Rush: JS odaklı build orchestration
    • Moon: Rust tabanlı, çoklu dil desteğini hedefler

mise Monorepo Tasks'ı özel kılan nedir?

Özellik Basit Runner'lar JS uzmanı Build sistemleri mise
Çoklu dil desteği
Öğrenmesi kolay ⚠️
Birleşik görev keşfi
Wildcard desenleri ⚠️
Araç sürüm yönetimi ⚠️
Ortam kalıtımı ⚠️
Minimum yapılandırma ⚠️
Görev önbellekleme
  • Mise ne zaman seçilmeli?
    • Karma dilli monorepo'lar
    • Birleşik araç ve görev yönetimi
    • Sadelik tercih edildiğinde
    • mise deneyimi olan kullanıcılar için uygun
  • Ne zaman başka seçenekler düşünülmeli?
    • Yalnızca JS/TS odaklıysa → Nx, Turborepo
    • Çok büyük kurumsal ölçek (Google/Meta vb.) → Bazel, Buck2
    • Gelişmiş görev önbellekleme gerekiyorsa → Nx, Turborepo, Bazel

Sonuç

  • mise'nin monorepo görevleri özelliği, tek bir dille sınırlı kalmadan farklı dil ortamlarına sahip karmaşık monorepo'ları kolay ve tutarlı biçimde yönetmek için tasarlandı
  • Minimum yapılandırma ve güçlü görev desenleriyle geliştirici üretkenliğini ve deneyimini birlikte artırıyor
  • Karmaşık kurumsal çözümlere kıyasla çok daha sade ve esnek

2 yorum

 
GN⁺ 2025-10-07
Hacker News görüşleri
  • Daha önce ağırlıklı olarak Python kullanırken Mise’in cazibesini pek hissedememiştim, uv’nin yeterli olduğunu düşünüyordum
    Ama Node’da olduğu gibi her dizin için sürümü eşleştirmek ve dil ya da proje türünden bağımsız olarak mise build veya mise test gibi ortak giriş noktalarına ihtiyaç duyunca Mise’in gerçek değerini anladım
    Just’ı da görev çalıştırıcısı olarak gerçekten seviyorum ve onun sayesinde Make’ten uzaklaşabildim
    Make güçlü ama geliştirici deneyimi açısından eksikleri vardı
    Just, özellik açısından Mise’in task işlevinden daha güçlü olabilir ama Mise, gayet iyi bir task özelliğini mükemmel araç yönetimiyle birlikte sunduğu için benim için en iyi kombinasyon

    • Basit Makefile’ları seven biri olarak merak ettiğim bir şey var: Make’ten Just’a, oradan da Mise’e geçerken ne gibi avantajlar gördün?

    • just’ı gerçekten çok seviyordum ama just task’lerinde doğru ortamı kurmak zahmetliydi ve sanal ortamı yüklemek de uğraştırıyordu
      Bu yüzden ben de benzer nedenlerle mise’e geçtim

  • mise konusunda büyük beklentilerim var
    Yeni bir projeye her başladığımda vazgeçilmez araçlardan biri haline hızla geldi
    Tek bir yapılandırma dosyasıyla node, python, rust, go gibi birden çok aracı yönetebilmek ve kolay kullanılabilen bir Makefile alternatifi sunması çok pratik
    Genelde postinstall hook’u ayarlıyorum; böylece biri projemi aldığında sadece mise install çalıştırarak doğru araç sürümlerini ve bağımlılık paketlerini otomatik olarak kurabiliyor, bu da işi gerçekten çok kolaylaştırıyor
    Nix’in giriş engelinin yüksek olduğunu düşünürken, mise çok daha pratik geliyor

    • Nix yaklaşımı göz korkutuyorsa, devenv.sh gibi araçlar erişilebilirliği ciddi biçimde artırıyor
      Örneğin languages.rust.enable = true ile Rust geliştirme ortamını hemen kurabiliyorsun
      Buna ek olarak script’ler, task’ler ve paketler de eklenebiliyor

    • Örnek bir yapılandırma paylaşabilir misin diye merak ediyorum
      Anlattıkların ilgi çekici
      Monorepo projelerinde just ve docker(-compose) kullanıyordum; moon ve proto denemelerim ise kısa sürdü ve biraz hayal kırıklığı yarattı
      just’ın sadeliği güzel ama farklı platformlarda yeni ekip üyelerini sisteme dahil ederken hâlâ zahmetli

    • Ben de yeni bir projeyi mise ile kurdum
      Yeni gelenlerin manuel adımlar olmadan çok daha rahat başlamasını sağladığı için gerçekten harika

    • mise içinde postinstall hook’u kullanman ilgimi çekti
      Genelde içine neler koyuyorsun?

  • Task cache desteğinin olmaması bence oldukça büyük bir eksik
    Görev grafiğinde bağımlılıklar oluştuğunda, tamamlanmış task’lerin tekrar çalıştırılmak yerine cache’ten karşılanması tekrar eden çalıştırmalarda verimlilik için önemli; özellikle orta ölçekli monorepo’larda
    Bu özelliğin planlanıp planlanmadığını araştırdım ama Mise deposunda issue’lar kapalıydı ve README’de de buna dair bir şey göremedim, bu da güven vermedi
    Eğer tek dilli bir npm monorepo kullanıyorsanız Wireit’i öneririm
    Wireit, npm script’lerine bağımlılıklar ile yerel/GitHub Actions cache işlevi ekliyor ve uzun süre çalışan servis tipi task’ler sunuyor
    Wireit GitHub

    • Mise, Make benzeri task’ler için yerel cache’i destekliyor
      sources ve outputs belirtirsen mümkün; mise task yapılandırma kılavuzunda görebilirsin
      Sadece sources belirtmek bile kaynak değişikliklerinin otomatik izlenmesini sağlıyor
      Bu özelliği Docker build’lerini hızlandırmak için uzun zaman önce istemiştim ve gerçekten çok faydalı kullanıyorum

    • Aslında mise’in proje kaynak kodu ya da kütüphane bağımlılıklarıyla daha az ilgilenmesi, sadeliğinin çekici tarafı
      Genelde yalnızca o sınıra kadar işlev sunuyor

    • Task cache’leme, mise’in hedefleriyle çok da uyumlu değil
      anti-goals resmi dokümanına bakabilirsin
      turbopack, moonrepo gibi araçlar zaten bu probleme odaklanıyor
      mise büyük olasılıkla sadece script çalıştırmaya odaklanan hafif bir task runner olarak kalacak

    • Mise deposundaki issue’ların neden kapalı olduğunu ben de bilmiyorum
      Eskiden “maintainer issues yerine discussion’ı tercih ediyor” diyen bir issue vardı ama şimdi kaldırılmış
      Bununla ilgili şu tartışmayı başlattım
      Benim gibi birkaç yıldır kullanan biri olarak bu projeye güvenim yüksek ve çevreme de öneriyorum
      Discussion’lara ve gerçek kullanım deneyimlerine bakmanı tavsiye ederim

    • Bu, mise’den bir build sistemi (bazel türü) özelliği istemeye benziyor
      Zaten belki de bir ölçüde öyle bir rol oynuyor denebilir
      Cache özelliği faydalı olsa da, ek özelliklerle karmaşıklığın artmamasına dikkat etmek gerekir
      Mevcut build sistemleriyle entegrasyon yolları da düşünülebilir

  • mise oldukça iyi görünüyor
    Ancak şu an bir asdf kullanıcısı olarak, mise’in çeşitli şeyleri (PATH düzenleme gibi) biraz fazla yönetmeye çalıştığı izlenimi beni hafif tereddütte bırakıyor
    Farklı araçların PATH’i farklı şekillerde kurcalaması gerçekten çok can sıkıcı olduğu için .zprofile içinde PATH’i sabitledim ve çeşitli başlatma script’lerini de tamamen çıkardım
    mise, programlama dillerini ve o diller üzerinden kurulan CLI uygulamalarını (cargo, go, uv vb.) birlikte yönetebiliyorsa güzel olur ama geçiş sırasında o kısım biraz uğraştırıcı olabilir gibi geliyor

    • Birden fazla aracın PATH önceliğiyle oynamasının rahatsız edici olduğunu söylemiştin ama mise bunu yapmıyor
      İstersen shim de kullanabilirsin
      Hem dile özgü araçları hem de dilin kendisini yönetebiliyor

    • Daha önce neden asdf’den mise’e geçtiğimi tam hatırlamıyorum ama birkaç yıldır kullanıyorum ve hiçbir sorun yaşamadım

  • Bence mise gerçekten müthiş
    Otomasyona, aynı ortamı yeniden kurmaya ve yeni projeleri hızlıca bootstrap etmeye önem veren insanlar için biçilmiş kaftan
    Özellikle Ruby/Python/Node ortamlarında ortaya çıkan farklı kurulum yöntemleri ve tekrarlanabilir ortam sorunlarını Docker benzeri şeylere ihtiyaç duymadan basitçe çözüyor
    Küçük ekiplerde veya kişisel projelerde, CI ortamı ya da build sistemi (Bazel, Gradle vb.) olmadan da tekrarlanabilir çalışma ortamlarını kolayca kurabiliyorsun
    chezmoi ile birlikte yerel sistem araçlarını yönetmek için de gayet iyi kullanıyorum

  • Yakın zamanda just’tan mise’e geçtim
    just da harika ama sadece komut çalıştırıcı işlevi sunuyor; ben ise mise’in ek özelliklerine ihtiyaç duyuyordum
    Geçiş yaptığıma memnunum
    Yine de kullanım senaryoları, geçmişi, başka araçlarla (nix, docker vb.) karşılaştırması ve yapısal açıklamaları, yeni başlayanların anlayacağı şekilde daha iyi anlatılsa güzel olurdu
    Gerçek, küçük farkları örneklerle göstererek mise’in neden gerekli olduğunu ve zaten var olan diğer araçlardan hangi yönleriyle ayrıştığını daha net belgelemelerini isterim

  • Bu haber beni gerçekten heyecanlandırdı
    just/taskfile gibi basit task runner’ların avantajlarıyla bazel/buck2 gibi güçlü araçların bazı yönlerini dengeli biçimde birleştiriyor gibi hissettiriyor
    Başkalarının bunu nasıl kullanacağını merak ediyorum ve yeni denemeleri görmek için sabırsızlanıyorum

    • Ben de ağırlıklı olarak mise kullanıyorum ve genel olarak memnunum
      Ortam yönetimi iş akışım çok sadeleşti
      Ama task runner özelliğine özel olarak ihtiyaç duymuyorum
      Make veya just bu rolü yeterince iyi yerine getiriyor
      Monorepo’da bizzat denemedim ama her iki araç da task/recipe dosyalarının import ve genişletilmesini desteklediği için ihtiyaca göre bir kurulum yapılabileceğini düşünüyorum
      Kullanım deneyimi özel amaçlı araçlar kadar pürüzsüz olmayabilir ama ben her aracın tek bir işe odaklanmasını tercih ediyorum
      mise zaten ortam yöneticisi rolünde çok sayıda özellik barındırıyor; o tarafa odaklanması daha iyi olur
      Bu arada karşımdaki kişinin mise yazarı olduğunu sanıyorum, teşekkürler
  • Eğer depodaki task’leri tek bir giriş noktasından yönetmek istiyorsanız, benim yaptığım dela değerlendirilebilir
    pyproject.toml, package.json, makefile gibi çeşitli task dosyası tanımlarını tarıyor ve task adlarıyla bunları doğrudan CLI üzerinden çalıştırmanıza izin veriyor
    Bunu birçok repoda hiçbir iyileştirme yapmadan hemen kullanabildim, bu yüzden çok pratikti; repo yapısını değiştirmeyi gerektirmemesi de avantaj
    Henüz mise task’lerini desteklemiyor ama talep olursa hemen eklemeye hazırım
    Son sayımlara göre mise, yıldızlı 100 bin GitHub deposunun 94’ünde kullanılıyor
    Ayrıntılı veriler için 2025 task runners census bağlantısına bakabilirsiniz

    • Güzel görünüyor; peki tüm task listesini de destekliyor mu diye merak ettim
      Bir Node proje deposuna girdiğimde ilk yaptığım şey her zaman script listesini görmek için npm run çalıştırmak oluyor
      Makefile varsa içine bakıyorum ama target’lar veya bağımlılıkların hepsi değişkenlerle yazılmışsa hemen çıkıyorum
  • Aslında tam da mise’de böyle bir özellik olsa iyi olur diye düşünüyordum; yeni gelmiş olması sevindirici
    mise’i kullanırken en çok sevdiğim şey, npm, go, cargo gibi araçlarla arka planda global araçlar kurabilmesi
    Mesela mise use -g npm:prettier gibi basit bir komutla kolayca kurabiliyorsun
    Eskiden nvm kullanırken hangi node sürümüne hangi global paketi kurduğumu sürekli hatırlamam gerekiyordu; mise sayesinde bu çok daha kolaylaştı
    Ama yakın zamanda en yeni node sürümünü kurmaya çalıştığımda, bir küçük hata yüzünden en yeninin bir altı kurulmuştu

  • Eğer saf Nix-shell kullanabiliyorsanız, mise biraz daha az çekici gelebilir
    Yine de Nix’e göre öğrenme eğrisi daha düşük olduğu için daha geniş yayılabilir gibi duruyor

    • mise, kişinin kendisi veya kendi bilgisayarı için değil, farklı insanların bir projeyi kolayca bootstrap edebilmesine odaklanması açısından gerçekten öne çıkıyor
      toml tabanlı yapılandırması da insanların anlaması açısından oldukça basit
      Eskiden README’leri didik didik edip ortamı elle kurmak, dilden dile değişen kurulum yöntemleriyle uğraşmak gerekirdi; mise ile bunlar sorun olmuyor
      Özellikle Node/Ruby/Python tarafındaki ortamları yönetirken çok avantajlı

    • nix-darwin’i bir yıl kullandıktan sonra sonunda mise’e geçtim
      mise, ihtiyacım olan şeylerin %90’ını zahmetin yalnızca %1’iyle karşılıyor
      Nix’in kavramlarını da beğeniyorum ve gelecekte yazılım derleme yaklaşımının kesinlikle bu yöne gideceğini düşünüyorum
      Ama şu anda bunun taşıyıcısının Nix olmayabileceğini düşünüyorum