┐─ تحليل الملف ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ┌
│ المطور : Clark Evans وIngy dot Net وOren Ben-Kiki
│ الفئة : بيانات
│ نوع MIME : text/yaml
┘ ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── └
ما هو ملف YAML؟
YAML (YAML Ain’t Markup Language — YAML ليست لغة ترميز، اسم متكرر بذاته) هو صيغة تسلسل بيانات صديقة للإنسان أنشأها Clark Evans وIngy dot Net وOren Ben-Kiki عام 2001. يستخدم المسافة البادئة (Indentation) لتمثيل البنية الهرمية، مما يجعله أكثر قابلية للقراءة من JSON أو XML.
المزية الرئيسية لـ YAML: إزالة علامات ترقيم مزعجة كالأقواس المتعرجة والمربعة والفواصل، مع الحفاظ على دعم كامل للهياكل المعقدة كالقوائم المتداخلة والقواميس. لكن هذا الاعتماد على المسافات مصدر أخطاء شائعة — خلط Tab مع مسافات يُعطب الملف.
كيفية فتح ملفات YAML
- VS Code (ويندوز، ماك، لينكس) — دعم YAML مدمج مع تلوين وتحقق
- Zed Editor — دعم YAML أصلي
- IntelliJ IDEA (ويندوز، ماك، لينكس) — مع إضافة YAML
- أي محرر نصوص — ملفات YAML نص عادي
- YAML Lint (yamlint.com) — التحقق من الصحة عبر الإنترنت
- Python:
import yaml(PyYAML) أوimport ruamel.yaml
المواصفات التقنية
| الخاصية | القيمة |
|---|---|
| الإصدار الحالي | YAML 1.2.2 (2021) |
| الترميز | UTF-8، UTF-16، UTF-32 |
| البنية | قائمة على المسافة البادئة |
| أنواع البيانات | نص، عدد، عشري، منطقي، null، تاريخ، مصفوفة، قاموس |
| التعليقات | يبدأ بـ # |
| المستندات المتعددة | --- للفصل بين المستندات |
| الأنكور والمرجع | &anchor و*alias |
الاستخدامات الشائعة
- DevOps وKubernetes: ملفات
deployment.yamlوservice.yamlوconfigmap.yamlهي لغة Kubernetes الأساسية - CI/CD: GitHub Actions وGitLab CI وCircleCI وAzure Pipelines جميعها تعتمد YAML لتعريف خطوط الأنابيب
- Docker Compose: ملف
docker-compose.ymlلتعريف الخدمات والشبكات والأحجام - إعدادات إطارات العمل: Rails وSpring Boot وNextJS وAstro تستخدم YAML للإعدادات
- OpenAPI/Swagger: تعريف واجهات برمجة التطبيقات REST بصيغة YAML المقروءة
YAML مقابل JSON مقابل TOML
| الميزة | YAML | JSON | TOML |
|---|---|---|---|
| قابلية القراءة | ✅ ممتازة | متوسطة | ✅ ممتازة |
| التعليقات | ✅ | ❌ | ✅ |
| التداخل العميق | ✅ | ✅ | محدود |
| الغموض | بعض الحالات | ✅ لا غموض | ✅ لا غموض |
| الاستخدام | DevOps، K8s | APIs | Rust، Python |
مثال Kubernetes YAML
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
namespace: production
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: myapp:v1.2
ports:
- containerPort: 8080
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: db-secret
key: url
مثال GitHub Actions
name: CI Pipeline
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: تشغيل الاختبارات
run: npm test