dotenvx - Yeni nesil dotenv aracı

3 Tem 2024 tarihinde yayınlandı

Selamlar,

Bu yazıda dotenv paketinin geliştiricisi, @motdotla tarafından bizlere sunulan yeni nesil çevre değişkeni yönetme aracı dotenvx'i inceleyeceğiz.

dotenv neydi ki?

Hepinizin bildiği üzere yazdığımız programları, nasıl çalışması gerektiğini anlayabilmesi adına çevre değişkenlerini kullanacak şekilde yapılandırıyoruz. Her seferinde bu çevre değişkenlerini tekrar tanımlamaktan kurtulmak için de .env dosyalarından yararlanıyoruz.

Temelde .env dosyalarının mantığı çok basit; İstenen path üzerindeki .env dosyasını (varsayılan olarak process çalışma dizini içerisindeki) okumak ve içerisinde tanımlı olan değişkenleri çevre değişkeni olarak programımızda kullanılabilir hale getirmek. Bu sayede programımızı çalıştırmak istediğimizde, ihtiyacı olan değişkenleri tek tek tanımlama zahmetinden kurtuluyoruz.

Tahmin edersiniz ki .env bir kavram ve bu kavramı her programlama dilinde implemente eden farklı bir paket bulabiliyorsunuz. dotenvx ise bu duruma bir standart getiriyor. Çünkü şimdiye kadar .env işleme araçlarının hepsi harici paket/kütüphane olarak sunulurken, dotenvx çalıştırılabilir bir program olarak karşımıza çıkıyor.

Örnek vermek gerekirse .env dosyasını okumak için X programlama dilinde Y paketini kurdunuz. Artık bu Y paketini kullanarak .env dosyasını okumak için gereken kodları programınıza dahil etmeniz gerekiyor. dotenvx'te ise durum birazcık farklı. Programımızı başlatmak için ilk olarak dotenvx'i çalıştırıyoruz ve argüman olarak kendi programımızı veriyoruz. Çalışan dotenvx okuduğu .env dosyasındaki çevre değişkenlerini programınıza aktarıyor.

Hadi şunu deneyelim!

Şimdi bir örnek üzerinden inceleyelim. İlk olarak dotenvx'i sistemimize kuralım. Kurulumu npm, brew, curl, docker veya windows exe dosyalarını kullanarak gerçekleştirebiliyorsunuz. Daha fazla bilgi için yükleme sayfasına göz atabilirsiniz. Ben Debian sistemim altında npm ile kurmayı tercih ediyorum:

$ sudo npm i -g @dotenvx/dotenvx

added 100 packages in 11s

21 packages are looking for funding
  run `npm fund` for details

dotenvx paketi Node.js ile yazılmıştır ve dotenv ile uyumludur. Bu da şu anlama geliyor; eğer programınızı Node.js ile yazdıysanız ve hali hazırda dotenv kullanıyorsanız, dotenvx'i drop-in replacement olarak kullanabilirsiniz.

Örneğimizde Go ve Python kullanacağımız için ben global olarak kurulum yaptım. Bu sayede dotenvx komutu ile çalıştırabiliyorum. Şimdi bir dizin ve .env dosyası oluşturalım:

$ mkdir dex
$ cd dex
$ touch .env

Şimdi .env dosyamızın içeriğini güncelleyelim:

NAME=John

NAME çevre değişkenini selamlayan bir Go programı yazalım:

// main.go
package main

import (
	"fmt"
	"os"
)

func main() {
	name, exists := os.LookupEnv("NAME")

	if !exists {
		panic("NAME cevre degiskeni bulunamadi!")
	}

	fmt.Println("Selamlar", name)
}

Aynı örneği bir de Python ile yapalım:

# main.py
import os

name = os.environ['NAME'] # NAME isimli key bulunamaz ise hata fırlatır.
print("Selamlar", name)

Her iki örnekte de programımız çalıştırıldığı zaman NAME isminde bir çevre değişkeni bulmayı umuyor ve bulamaz ise hata vererek sonlanıyor.

Eğer biz bu iki programda da .env dosyası okuyabilmeyi isteseydik, Python için python-dotenv paketini, Go için de godotenv paketini kurmamız gerekecekti. Tahmin edersiniz ki Python ve Go için tek dotenv paketleri bunlar değil.

O yüzden biz dotnevx kullanarak bu paket bağımlılığından kurtulacağız. Tek yapmamız gereken programımızı dotenvx aracılığıyla çalıştırmak:

$ dotenvx run -- go run main.go
[dotenvx@1.5.0] injecting env (1) from .env
Selamlar John

Python için:

$ dotenvx run -- python3 main.py
[dotenvx@1.5.0] injecting env (1) from .env
Selamlar John

injecting... satırını görmek istemiyorsanız tek yapmanız gereken -l parametresi ile log seviyesini belirlemek:

$ dotenvx -l none run -- python3 main.py
Selamlar John

dotenvx sayesinde standartlaşmış bir yöntem kullandık. Ayrıca artık .env dosyalarımıza şifreleme, multiple environment ve variable expansion gibi özellikler kazandırmış olduk. Hem de kodumuzda herhangi bir değişiklik yapmadan!

Elbette bu dotenvx'in hiç bir eksiği yok anlamına gelmiyor. dotenvx çalıştırılabilir bir program olduğu için, programınızı kullanan kişilerin dotenvx'i de programınız ile beraber sistemlerine kurması ya da programınızı dotenvx ile birlikte dağıtmanız gerekiyor. Eğer programınızı docker image'ı olarak dağıtıyorsanız, dotenvx'i image'ınıza curl ile kurmak en mantıklı çözüm yolu gibi görünüyor.

dotenvx ile ilgili daha fazla bilgi almak için sayfasını ziyaret edebilirsiniz. Bir sonraki yazıda görüşmek üzere!

Dipnotlar