YAML (YAML Ain't Markup Language), insan tarafından kolayca okunabilen bir veri serileştirme formatıdır. Girintiye dayalı yapısı sayesinde JSON ve XML'den çok daha okunaklıdır. Özellikle yapılandırma dosyalarında, CI/CD pipeline'larında, Docker Compose ve Kubernetes manifestolarında yaygın olarak kullanılır.
YAML Temel Söz Dizimi
YAML'da girinti için yalnızca boşluk (space) kullanılır — tab karakteri yasaktır. Genellikle 2 boşluk tercih edilir.
Anahtar-Değer Çiftleri
# Basit anahtar-değer
isim: Fatih
yas: 30
aktif: true
email: [email protected]
İç İçe Yapılar (Nesting)
veritabani:
host: localhost
port: 5432
isim: mydb
kimlik:
kullanici: admin
sifre: gizli123
Veri Tipleri
# String (metin)
isim: "Fatih Uzuner"
baslik: Geliştirici # Tırnak opsiyonel
# Sayılar
yas: 30 # Integer
fiyat: 29.99 # Float
onaltili: 0xFF # Hexadecimal
# Boolean
aktif: true # true, yes, on
pasif: false # false, no, off
# Null
deger: null # null, ~, boş bırakma
# Tarih
tarih: 2026-01-03
zaman: 2026-01-03T10:30:00Z
Dikkat: yes, no, on, off değerleri YAML'da boolean olarak yorumlanır. Bunları metin olarak kullanmak istiyorsanız tırnak içine alın: "yes", "no".
Listeler (Diziler)
# Blok stili
meyveler:
- elma
- armut
- portakal
# Satır içi (flow) stili
meyveler: [elma, armut, portakal]
# İç içe listeler
takimlar:
- isim: Frontend
uyeler:
- Ali
- Ayşe
- isim: Backend
uyeler:
- Mehmet
- Fatma
Çok Satırlı Metinler
# Satır katlamalı (>) — yeni satırlar boşluğa dönüşür
aciklama: >
Bu uzun bir açıklamadır.
Tüm satırlar tek bir
paragrafa birleştirilir.
# Blok stili (|) — yeni satırlar korunur
script: |
#!/bin/bash
echo "Merhaba"
echo "Dünya"
# Sondaki boş satırı kaldır (-)
aciklama: >-
Sondaki yeni satır
karakteri olmayacak
# Sondaki boş satırı koru (+)
metin: |+
Sondaki boş satır
korunacak
Çapalar ve Takma Adlar (Anchors & Aliases)
Tekrarlayan yapıları kopyalamak yerine çapa (&) ve takma ad (*) kullanarak yeniden kullanabilirsiniz:
# Çapa tanımlama
varsayilan_ayarlar: &varsayilan
zaman_asimi: 30
tekrar_sayisi: 3
log_seviyesi: info
# Takma ad ile kullanma
gelistirme:
<<: *varsayilan
log_seviyesi: debug # Üzerine yazma
uretim:
<<: *varsayilan
zaman_asimi: 60 # Üzerine yazma
YAML vs JSON
- Okunabilirlik: YAML, girintiye dayalı yapısıyla JSON'dan çok daha okunabilir
- Yorum desteği: YAML
#ile yorum destekler, JSON desteklemez - Çok satırlı metin: YAML doğal destek sunar, JSON'da
\nkullanmanız gerekir - Veri tipi zenginliği: YAML tarih, timestamp gibi ek tipler destekler
- Çapa ve takma adlar: YAML'a özel, JSON'da karşılığı yok
- Dosya boyutu: YAML genellikle daha küçüktür (süslü parantez ve tırnak yok)
- Ayrıştırma hızı: JSON daha hızlı ayrıştırılır
- API kullanımı: JSON, API iletişiminde standart; YAML, yapılandırmada standart
Yaygın Kullanım Alanları
Docker Compose
version: "3.9"
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: gizli123
POSTGRES_DB: mydb
GitHub Actions (CI/CD)
name: CI Pipeline
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm test
- run: npm run build
Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: my-app:latest
ports:
- containerPort: 3000
Sık Yapılan Hatalar
- Tab kullanımı: YAML'da tab yasaktır, yalnızca boşluk kullanın
- Tutarsız girinti: Aynı seviyedeki öğeler eşit sayıda boşlukla girintili olmalıdır
- Özel karakter kaçışı: İki nokta (:), süslü parantez ve köşeli parantez içeren değerleri tırnak içine alın
- Boolean tuzağı:
yes,no,on,offboolean olarak yorumlanır — metin olarak kullanmak için tırnak ekleyin
YAML dosyalarınızı JSON'a dönüştürmek veya doğrulamak mı istiyorsunuz? SiteScripti'nin YAML ↔ JSON Dönüştürücü aracıyla formatlar arasında kolayca geçiş yapabilirsiniz.
Bu konuyla ilgili araçlarımızı da deneyin: Docker Compose Oluşturucu, ENV Generator, JSON Formatter