فرض کن سال 2001 هست و تو یه مدیر سیستم تازه کار تو یه شرکت بزرگ فناوری هستی. روز اول کارت، رئیست ازت میخواد که تنظیمات سرور اصلی شرکت رو به روزرسانی کنی. با کلی اعتماد به نفس میری پشت کامپیوتر، اما یک دفعه با یه عالمه فایل XML پیچیده و درهم تنیده روبرو میشی. ساعتها طول میکشه تا بتونی حتی یه تغییر کوچیک رو اعمال کنی و هر لحظه هم میترسی که نکنه یه اشتباهی کنی و کل سیستم از کار بیفته.
حالا بیا به سال 2024. تو همون مدیر سیستم هستی، ولی این بار با یه لبخند پشت کامپیوتر میشینی. وقتی فایل پیکربندی رو باز میکنی، با یه ساختار ساده و قابل فهم روبرو میشی. این YAML هست، زبانی که تو این سالها زندگی تو و هزاران توسعه دهنده دیگه رو متحول کرده. با چند تا کلیک ساده، تغییرات مورد نظرت رو اعمال میکنی و تو کمتر از چند دقیقه کارت تموم میشه. YAML نه تنها زمانت رو نجات داده، بلکه استرس و نگرانیهای گذشته رو هم از بین برده. این داستان نشون میده که چطوری YAML تونسته فرآیند پیکربندی و مدیریت دادهها رو از یه کابوس پیچیده به یه تجربه ساده و لذت بخش تبدیل کنه.

YAML مخفف "YAML Ain't Markup Language" هست، که یعنی "YAML یه زبان نشانه گذاری نیست". شاید بپرسی چرا همچین اسمی گذاشتن؟ چون برخلاف زبان هایی مثل XML و HTML، هدف اصلی YAML این نیست که یه زبان نشانه گذاری پیچیده باشه. در واقع، YAML طراحی شده تا ساده و خوانا باشه، مخصوصاً برای پیکربندی و مدیریت دادههای ساختاریافته.
فرض کن داری یه فایل پیکربندی رو میخونی؛ اگه این فایل به زبان XML نوشته شده باشه، پر از براکتها و تگهای مختلفه که خوندنش سخته و گیجت میکنه. ولی YAML این مشکل رو حل کرده. به جای استفاده از تگها و براکتهای پیچیده، از یه ساختار ساده و قابل فهم استفاده میکنه. این سادگی باعث شده که YAML برای توسعه دهندگان و مدیران سیستمها خیلی جذاب و کارآمد باشه.
وقتی یه فایل YAML رو باز میکنی، به راحتی میتونی بفهمی که هر بخش چه کاری انجام میده و چطور پیکربندی شده. همین خوانایی بالا و سادگی استفاده، YAML رو به ابزاری محبوب برای مدیریت پیکربندیها تبدیل کرده.
یادگیری YAML برای کسایی که تو حوزه فناوری اطلاعات کار میکنن، خیلی مفیده. این زبان نه تنها کار با فایلهای پیکربندی رو سادهتر میکنه، بلکه به کاهش خطاهای انسانی هم کمک میکنه. تو دنیای امروز که سرعت و دقت تو توسعه و مدیریت سیستمها خیلی مهمه، آشنایی با YAML میتونه یه مزیت بزرگ برای متخصصان IT باشه.
ماجرای YAML برمی گرده به سال 2001، وقتی که Clark Evans برای اولین بار این زبان رو پیشنهاد داد. اون این زبان رو با کمک Ingy döt Net و Oren Ben-Kiki طراحی کرد. در ابتدا، YAML مخفف "Yet Another Markup Language" بود، چون تو دورانی به وجود اومد که پر از زبانهای نشانه گذاری مثل HTML، XML و SGML بود. اسم اولیه اش به نوعی یه شوخی بود با وضعیت فناوری اون زمان، اما بعداً به "YAML Ain't Markup Language" تغییر کرد تا هدف اصلی اش رو که بیشتر برای داده محوریه تا نشانه گذاری اسناد، نشون بده.
نسخههای مختلف YAML هم به مرور زمان عرضه شدند:
این تغییرات و به روزرسانیها نشون میده که YAML همواره در حال پیشرفت و بهبود بوده تا نیازهای توسعه دهندگان رو بهتر برآورده کنه. از اون زمان تا حالا، YAML تبدیل به یه ابزار محبوب برای پیکربندی و مدیریت دادهها شده و زندگی خیلی از توسعه دهندگان و مدیران سیستم رو راحتتر کرده.
YAML یه زبان طراحی شده برای پیکربندی و مدیریت داده هاست که کلی ویژگی خوب داره و کار باهاش رو برای ما خیلی راحت میکنه. بیایید با هم چند تا از مهمترین مزایاش رو بررسی کنیم.
یکی از بزرگترین مزایای YAML اینه که خیلی خواناست. وقتی یه فایل YAML رو باز میکنی، خیلی راحت میتونی بفهمی هر قسمت چی میگه. این زبان به گونه ای طراحی شده که بدون نیاز به خوندن تگهای پیچیده یا براکت ها، به راحتی قابل فهم باشه. مثلاً فرض کن داری تنظیمات یه سرور رو توی فایل YAML میخونی. به جای اینکه مثل XML یا JSON با کلی براکت و تگ گیج کننده روبرو بشی، همه چیز به صورت ساده و مرتب نوشته شده. این یعنی زمان کمتری رو صرف پیدا کردن و فهمیدن تنظیمات میکنی و سریعتر میتونی به کارهای مهمتر برسی.
server:
port: 8080
host: localhost
database:
name: mydb
user: admin
password: secretتو این مثال، به راحتی میتونی بفهمی که تنظیمات سرور و دیتابیس چیه، بدون اینکه گیج بشی یا بخوای دنبال تگهای خاص بگردی.
سینتکس YAML فوق العاده ساده ست. خبری از براکتها و کوتیشنهای پیچیده نیست. همه چیز با استفاده از فاصلهها و تورفتگیها (indentation) مشخص میشه. این باعث میشه که حتی اگه اولین بارته که با YAML کار میکنی، خیلی زود بتونی بهش مسلط بشی. تورفتگیها و فاصلهها به وضوح نشون میدن که کدوم بخش به کدوم قسمت دیگه مرتبطه.
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: '14'
- run: npm install
- run: npm testتوی این مثال، میبینی که مراحل اجرای یک workflow تو GitHub Actions چقدر ساده و مرتب نوشته شدن. هر مرحله با یک تورفتگی مشخص شده و به راحتی میتونی بفهمی چه کارهایی باید انجام بشه.
YAML توی خیلی از پروژهها و ابزارهای معروف استفاده میشه. از پیکربندی سرورها و تنظیمات CI/CD گرفته تا مدیریت دادههای برنامه نویسی و تعریف ساختارهای پیچیده. این گستردگی استفاده به خاطر سادگی و کارایی بالای YAML هست و نشون میده که این زبان چقدر کاربردیه. مثلاً تو Kubernetes برای تعریف منابع و تنظیمات سرویسها از YAML استفاده میشه.
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: nginxاین یه مثال ساده از فایل پیکربندی Kubernetes هست که توش یه پاد تعریف شده که شامل یه کانتینر با ایمیج nginx هست. این نشون میده که چطور میتونی با استفاده از YAML به راحتی منابع زیرساختی رو تعریف کنی.
با این ویژگی ها، YAML به یه ابزار ضروری برای هر توسعه دهنده ای تبدیل شده. پس اگه هنوز باهاش آشنا نشدی، وقتشه که به دنیای YAML وارد بشی و از مزایاش بهره مند بشی.
حالا که با مزایا و ویژگیهای YAML آشنا شدی، بذار یه نگاهی هم به چند تا از معایبش بندازیم. هر زبانی کنار مزایاش، یه سری محدودیتها هم داره.
یکی از مشکلات YAML اینه که خیلی به فاصلهها حساسه. یعنی اگر حتی یه اشتباه کوچیک توی فاصله گذاریها داشته باشی، ممکنه با خطا مواجه بشی و پیدا کردن این نوع خطاها هم گاهی وقتها میتونه کلی وقت بگیره. برای مثال، اگه یه تورفتگی (indentation) رو درست انجام ندی، ممکنه کل فایل رو خراب کنی.
name: Example
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1توی این مثال، میبینی که تورفتگی نادرست توی خط سوم باعث میشه که فایل YAML به درستی اجرا نشه و ممکنه خطا بگیری. این حساسیت به فاصلهها میتونه گاهی وقتها آزاردهنده باشه.
یه مشکل دیگه YAML اینه که در مدیریت دادههای خیلی پیچیده، مثل ساختارهای داده چندلایه یا مواردی که نیاز به نوعهای داده خاص دارن، به خوبی عمل نمیکنه. برای مثال، اگه بخوای یه ساختار داده خیلی پیچیده و چندلایه رو تعریف کنی، ممکنه YAML کمی دست و پات رو ببنده و بهتر باشه از فرمتهای دیگه ای مثل JSON یا XML استفاده کنی.
data:
items:
- name: Item 1
details:
- info: Detail 1
- info: Detail 2
- name: Item 2
details:
- info: Detail 3
- info: Detail 4این مثال نشون میده که چطور میتونی یه ساختار داده چندلایه رو تو YAML تعریف کنی، اما اگه دادهها خیلی پیچیده بشن، ممکنه مدیریت و نگهداری این فایلها سخت بشه.
با دونستن این معایب، میتونی بهتر تصمیم بگیری که چه زمانی و برای چه پروژه هایی از YAML استفاده کنی تا بیشترین بهره وری رو داشته باشی. YAML با همه مزایا و معایبش، یه ابزار فوق العاده کاربردیه که میتونه کارهای زیادی رو برات سادهتر کنه.

YAML یه زبان ساده و خواناست که برای پیکربندی و مدیریت دادهها استفاده میشه. بیایید با هم به ویژگیها و عناصر اصلی YAML نگاهی بندازیم:
توی YAML، مپها یا دیکشنریها به شکل جفتهای کلید-مقدار نمایش داده میشن. هر کلید به یه مقدار مرتبط میشه، مثل دیکشنریها تو زبانهای برنامه نویسی مختلف.
name: John
age: 30
job: EngineerYAML به تورفتگی و تعداد فاصلهها خیلی حساسه. این تورفتگیها برای نمایش سلسله مراتب و تو در تو بودن دادهها استفاده میشن. تو YAML نباید از تب استفاده کنی و فقط فاصله مجازه. یکنواختی تو تورفتگیها خیلی مهمه.
person:
name: John
age: 30
job: Engineerبرای بیشتر مقادیر تو YAML نیازی به علامت نقل قول نیست. اما وقتی که یه رشته شامل کاراکترهای خاص باشه یا بخوایم از تبدیل اشتباه جلوگیری کنیم، میتونیم از نقل قول استفاده کنیم.
message: "Hello, YAML!"YAML از یه فرمت ساده برای جفتهای Key-Value استفاده میکنه که با دو نقطه از هم جدا میشن.
profession: teacherتوالیها یا همون آرایهها بهت اجازه میدن یه لیست از آیتمها رو تعریف کنی. هر آیتم لیست با یه خط تیره و یه فاصله شروع میشه.
fruits:
- apple
- orange
- pearتوالیها رو میتونی به صورت فلو هم بنویسی:
fruits: [apple, orange, pear]YAML از انواع دادههای مختلف مثل رشته ها، اعداد صحیح، اعداد اعشاری، بولینها و مقادیر null پشتیبانی میکنه. این تنوع بهت اجازه میده اطلاعات مختلف رو به شکلهای مختلف نمایش بدی.
توی YAML میتونی از کامنتها استفاده کنی که با علامت # شروع میشن. کامنتها کمک میکنن توضیحات یا یادداشت هایی رو تو فایل هات اضافه کنی.
# This is a comment
name: JohnYAML از رشتههای چند خطی هم پشتیبانی میکنه. این یعنی میتونی متنهای طولانی رو تو چندین خط بنویسی بدون اینکه نیاز به شکست خطوط باشه.
description: >
This is a multi-line string
that spans multiple lines.
فایلهای YAML معمولاً با پسوندهای .yaml یا .yml ذخیره میشن. رعایت قواعد نام گذاری و ساختاردهی فایلها به یکنواختی و تفسیر درست دادهها کمک میکنه. فایلهای YAML رو میتونی تو زبان هایی مثل Perl، Ruby و Python هم بخونی.
به این ترتیب، YAML یه ابزار قوی و انعطاف پذیر برای مدیریت و پیکربندی دادهها فراهم میکنه که زندگی توسعه دهندهها و مدیران سیستمها رو آسونتر میکنه.
یکی از اصلیترین دلایل جذابیت YAML، خوانایی و سادگی بالای اونه. فرض کن داری یه اپلیکیشن بزرگ رو مدیریت میکنی و باید کلی فایل پیکربندی رو بخونی. اگر این فایلها به جای XML یا JSON به YAML نوشته شده باشن، کار خیلی راحتتر میشه. چرا؟ چون YAML طوری طراحی شده که به راحتی قابل فهم باشه و نیاز به تحلیل و بررسی زیاد نداشته باشه.
فرض کن یه فایل پیکربندی سرور وب داریم که به XML نوشته شده. اینجوری به نظر میرسه:
<server>
<port>8080</port>
<host>localhost</host>
</server>حالا همون پیکربندی رو توی YAML ببینیم:
server:
port: 8080
host: localhostمی بینی چقدر خواناتر و ساده تره؟ هیچ خبری از تگها و براکتهای پیچیده نیست. همه چیز به سادگی و وضوح نوشته شده.
فرض کن داری یه فایل پیکربندی برای یه پایگاه داده مینویسی. به فرمت JSON، اینجوری میشه:
{
"database": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "password"
}
}حالا همون پیکربندی رو توی YAML ببینیم:
database:
type: mysql
host: localhost
port: 3306
username: root
password: passwordباز هم میبینی چقدر خواناتر و مرتب تره؟ همه چیز به سادگی نوشته شده و راحتتر قابل درکه.
فرض کن داری از Docker Compose برای مدیریت چندین سرویس استفاده میکنی. فایل پیکربندی به JSON ممکنه این شکلی باشه:
{
"version": "3",
"services": {
"web": {
"image": "nginx",
"ports": ["8080:80"]
},
"database": {
"image": "mysql",
"environment": {
"MYSQL_ROOT_PASSWORD": "example"
}
}
}
}حالا همون پیکربندی رو توی YAML ببینیم:
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
database:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: exampleهمین طور که میبینی، YAML اینجا هم سادهتر و خواناتر از JSON به نظر میرسه. ساختار YAML خیلی راحتتر به چشم میاد و به راحتی میتونی بفهمی که هر بخش چه کاری انجام میده.
این زبان بیشتر برای فایلهای پیکربندی استفاده میشه و فرمت قابل فهمش باعث شده که توسعه دهندهها و مدیران سیستم به راحتی بتونن تنظیمات رو بخونن و ویرایش کنن. اینجا چند تا از رایجترین کاربردهای YAML رو برات توضیح میدم:
یکی از کاربردهای اصلی YAML تو مدیریت پیکربندی هست. به طور مثال، Ansible از فایلهای YAML برای توصیف همه تنظیمات CM مثل playbookها و roleها استفاده میکنه. این کار باعث میشه که تنظیمات به صورت ساختاریافته و قابل فهم برای انسان ذخیره بشن.
مثال از یه playbook ساده تو Ansible:
- name: Install and start Apache
hosts: webservers
become: yes
tasks:
- name: Ensure apache is installed
yum:
name: httpd
state: present
- name: Ensure apache is running
service:
name: httpd
state: startedYAML تو زیرساخت به عنوان کد هم استفاده میشه. به طور مثال، OpenTofu میتونه فایلهای YAML رو بخونه و از اونها برای تعریف منابع مختلف، منابع داده و حتی خروجیها استفاده کنه.
مثال از یه تعریف ساده منابع تو OpenTofu:
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}خیلی از محصولات CI/CD برای توصیف pipelineهاشون به YAML وابسته هستن. مثلاً GitHub Actions، GitLab CI/CD، Azure DevOps و CircleCI از فایلهای YAML برای تعریف مراحل اجرای کارهاشون استفاده میکنن.
مثال از یه workflow تو GitHub Actions:
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: '14'
- run: npm install
- run: npm testYAML تو هماهنگی کانتینرها هم نقش مهمی داره. Kubernetes (K8s) و Docker Compose به شدت به فایلهای YAML برای توصیف منابع زیرساختی وابسته هستن.
مثال از یه فایل پیکربندی تو Kubernetes:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: nginxYAML برای توصیف انواع دادههای پیچیده مثل لیست ها، مپها و آبجکتها هم استفاده میشه. این قابلیت باعث میشه که بتونیم دادهها رو به شکل ساختاریافته و خوانا ذخیره کنیم.
مثال از یه ساختار داده پیچیده:
person:
name: John
age: 30
children:
- name: Jane
age: 10
- name: Joe
age: 8YAML برای تعریف قراردادها و مشخصات APIها هم استفاده میشه. مثلاً OpenAPI از YAML برای تعریف endpointها، ورودیها و خروجیهای APIها استفاده میکنه.
مثال از یه تعریف API تو OpenAPI:
openapi: 3.0.0
info:
title: Sample API
version: 0.1.9
paths:
/users:
get:
summary: Returns a list of users.
responses:
'200':
description: A JSON array of user names
content:
application/json:
schema:
type: array
items:
type: stringدر کل، YAML یه ابزار فوق العاده کاربردیه که تو خیلی از زمینهها به کار میاد و باعث میشه کارهای پیچیدهتر رو به راحتی و با خوانایی بالا انجام بدیم. اگه تو حوزه فناوری اطلاعات کار میکنی، یاد گرفتن YAML میتونه زندگی کاریت رو خیلی آسونتر کنه.

YAML، JSON و XML سه تا از محبوبترین فرمتها برای ذخیره سازی و انتقال دادههای ساختاریافته هستن. هر کدوم از این فرمتها ویژگیهای خاص خودشون رو دارن که اونها رو برای کاربردهای مختلف مناسب میکنه. بیایید با هم این سه فرمت رو بررسی کنیم.
YAML به خاطر تمرکز روی خوانایی و سادگی، برای فایلهای پیکربندی و دادههای ساختاریافته عالیه. ساختارش مبتنی بر فاصله و عدم نیاز به نشانه گذاریهای پیچیده، خوندنش رو برای انسانها خیلی راحت کرده. مثلاً وقتی یه فایل YAML رو باز میکنی، نیازی به خوندن تگهای پیچیده یا براکتها نداری و سریع میتونی بفهمی چی به چیه.
JSON، که مخفف JavaScript Object Notation هست، یه فرمت سبک و متنی برای تبادل داده هاست. این فرمت به خاطر سازگاری با JavaScript و راحتی پردازش توسط ماشین ها، تو برنامههای وب و APIها خیلی محبوبه. JSON ساختار سادهتری نسبت به XML داره، اما اگه فایلها بزرگ و پیچیده بشن، خواناییش کمتر از YAML میشه.
XML یا eXtensible Markup Language، یه زبان نشانه گذاری قدرتمنده که برای ذخیره سازی و انتقال دادههای پیچیده استفاده میشه. XML با استفاده از تگها و ویژگی ها، امکان تعریف ساختارهای داده ای خیلی پیچیده رو فراهم میکنه. این فرمت برای کاربردهایی که نیاز به تعریف دقیق ساختار داده و اعتبارسنجی دارن، مناسبه. اما XML به خاطر استفاده از تگهای زیاد، معمولاً حجیمتر و ناخواناتره.
ویژگی | YAML | JSON | XML |
|---|---|---|---|
خوانایی برای انسان | بالا | متوسط | پایین |
سادگی ساختار | بالا | متوسط | پایین |
انعطاف پذیری | بالا | متوسط | بالا |
حجم فایل | کم | متوسط | زیاد |
سرعت پردازش | متوسط | بالا | پایین |
پشتیبانی از کامنت | بله | خیر | بله |
مناسب برای پیکربندی | عالی | خوب | متوسط |
کاربرد در وب و API | خوب | عالی | خوب |
هر کدوم از این فرمتها برای کاربردهای خاصی مناسبه. YAML به خاطر خوانایی بالا و ساختار ساده، برای فایلهای پیکربندی و داده هایی که نیاز به خوندن و ویرایش مکرر توسط انسان دارن، بهترین گزینه ست. JSON با سرعت پردازش بالا و ساختار متعادل، برای تبادل داده در وب و APIها مناسبه. XML هم به خاطر انعطاف پذیری بالا و قابلیت تعریف ساختارهای پیچیده، برای سیستم هایی که نیاز به تعریف دقیق ساختار داده و اعتبارسنجی دارن، خیلی مفیده. پس انتخاب بین این سه فرمت بستگی به نیازهای خاص پروژه، محیط توسعه و کاربران نهایی داره.

بله، YAML و JSON هر دو برای پیکربندی و انتقال داده استفاده میشن. YAML به خاطر خوانایی بیشترش، توی خیلی از موارد بهتره ولی JSON به خاطر سازگاری بیشترش توی برنامههای وب و APIها استفاده میشه.
بله، YAML به فاصلهها حساسه. یعنی اگه یه اشتباه کوچیک توی فاصله گذاری داشته باشی، ممکنه با خطا مواجه بشی و پیدا کردن این خطاها هم گاهی وقتها میتونه کلی وقت بگیره.
در خیلی از موارد، بله. YAML خواناتر و سادهتر از XML هست و برای پیکربندی و مدیریت دادهها بسیار مناسب تره. ولی XML برای تعریف ساختارهای خیلی پیچیده و چندلایه کاربرد داره.
تقریباً همه زبانهای برنامه نویسی مدرن از YAML پشتیبانی میکنن، از جمله Python، JavaScript، Ruby و Java. این یعنی میتونی YAML رو توی پروژههای مختلف استفاده کنی و خیالت راحت باشه که سازگاری داره.
بله، YAML توی پروژههای بزرگ به خوبی کار میکنه و توسط بسیاری از شرکتها و ابزارهای بزرگ استفاده میشه. این زبان به خاطر سادگی و خوانایی بالا، توی محیطهای تیمی خیلی محبوبه.
خب، حالا که با کلی از ویژگیها و کاربردهای YAML آشنا شدی، میتونی از این زبان ساده و کارآمد برای مدیریت پیکربندیها و دادههای پروژه هات استفاده کنی. YAML بهت کمک میکنه تا فایلهای پیکربندی رو به راحتی بخونی و ویرایش کنی و از قابلیتهای پیشرفته اش بهره مند بشی. امیدوارم این مقاله بهت کمک کرده باشه و اگر سوالی داشتی یا نیاز به راهنمایی بیشتری داشتی، حتماً بپرس.
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: