Podczas kilku ostatnich projektów potrzebowałem przejrzystego, elastycznego, a przede wszystkim lekkiego sposobu zapisu konfiguracji. Różne ilości danych, wiele kontekstów, a także forma zapisu wymogły na mnie poszukiwania czegoś naprawdę dobrego, ponieważ dotychczasowe sposoby i technologie miały swoje wady.
Kiedy programista tworzy konfigurację, a w przyszłości analizuje i zmienia ją osoba nietechniczna, najpewniej doprowadzi to do kłopotów. Dlaczego wprowadzanie zmian w plikach konfiguracyjnych jest trudne i mało zrozumiałe dla prostych ludzi? Pewnie dlatego, że same pliki są skomplikowane składniowo.
Najmniej użyteczna forma zapisu konfiguracji to pliki języka, w którym programujesz. Świetnie jeśli używasz PHP albo Pythona, ale handlowiec czy marketingowiec, któremu za rok zlecą zmianę na stronie nie zrozumie zapisów technicznych.
Używanie plików XML jest bardzo ciekawym doświadczeniem, bo przecież każdy rozumie filozofię znaczników otwierających i zamykających, atrybutów i wartości, nie wspominając o prologach i komentarzach. Niestety języki znaczników mają jedną wielką wadę! Ogromny narzut wielkości w stosunku do przesyłanych danych, poza tym, że mała literówka spowoduje błąd parsowania pliku.
Kiedy twoja konfiguracja będzie rozbudowana. Tablice, liczby i słowniki zagnieżdżone wielokrotnie potrzebujesz łatwego i czytelnego zapisu takich danych. Nie znałem języka, który oferowałby użytkownikowi tak wiele, za tak niewiele, dopóki nie poznałem YAML.
YAML jest uniwersalnym językiem przeznaczonym do zapisu danych w strukturalny sposób. Brzmi to skomplikowanie, w rzeczywistości składnia tego języka jest bajecznie prosta. Sposób edycji wymaga od autora zachowania kilku reguł, a daje praktycznie nieograniczone możliwości.
Poszczególne struktury danych pliku oddzielone są znakami nowej linii, a ich wzajemna hierarchia wynika z znaków wcięcia. Dzięki temu możliwy jest zapis list, słowników, a także skalarów. Możliwe są również wskaźniki pomiędzy istniejącymi danymi, co ogranicza nadmiarowość. Niestety używanie znaku tabulatora do tworzenia wcięć jest niezgodne ze specyfikacją języka.
Mimo tego, YAML jest zwięzły i czytelny dla człowieka. W swojej prostocie jest całkowicie przenośny pomiędzy językami programowania i reprezentuje wbudowane struktury danych. Dodatkowo YAML jest rozszerzalny i łatwy w edycji przez narzędzia, przetwarzające tekst. Moim skromnym zdaniem te cechy są ogromnymi atutami języka.