プログラミングやシステム設定の話をしていると、よく「YAMLのファイルを編集してください」とか「YAML形式で書いてください」って言われることがありませんか?でも「YAML」って何かよくわからない…という人も多いですよね。実は、YAMLはプログラマーたちが毎日のように使う、とても便利な形式なんです。この記事を読めば、YAMLが何なのか、なぜそんなに使われているのか、がばっちりわかるようになりますよ。
- YAMLは設定ファイルやデータを書くための 形式・ルール で、スペースとコロンを使って簡潔に書ける
- インデント(スペースの数)で親子関係を表現するから、複雑な記号が少なくてすむ
- JSONやXMLより 人間が読みやすく、書きやすい ので、設定ファイルでよく使われている
もうちょっと詳しく
YAMLは「YAML Ain’t Markup Language」の頭文字で、2001年に開発されました。つまり「YAMLはマークアップ言語ではない」という、ちょっとユーモアのある名前なんです。YAMLが生まれた背景には「JSONやXMLはコンピュータが読みやすいけど、人間が書くときに複雑だし読みにくい」という問題がありました。そこで、人間にもコンピュータにも優しい形式として作られたのがYAMLというわけです。今では、Dockerなどのコンテナシステム、Kubernetes(たくさんのプログラムを管理するシステム)、AWSなどのクラウドサービスの設定ファイル、Pythonの設定など、本当にいろんなところで使われています。
YAMLはスペースの使い方がすごく大切。スペースが1個ズレるだけでエラーになることもあるから注意!
⚠️ よくある勘違い
→ YAMLはプログラミング言語ではなく、データの形式です。プログラムを書く言葉ではなく、情報を書き込むためのルールに過ぎません。
→ YAMLは「こういう形で情報を書いてね」というルール。プログラミング言語はPythonやJavaScriptのようにプログラム自体を書く言葉のこと。
[toc]
YAMLって、結局どうやって書くの?
YAMLの書き方はとってもシンプルです。基本的には「キーと値をコロンで区切る」という考え方で成り立っています。ここでいう「キー」というのは「名前」とか「ラベル」のこと、「値」というのは「そのラベルに対する情報」のことです。例えば、学校の成績表を考えてみてください。「数学:95点」「英語:80点」みたいに、教科名がキーで、点数が値になりますよね。YAMLではこれを同じように書くわけです。
では、実際の例を見てみましょう。例えば、ある子どもの情報を書くとしたら、こんな感じになります:
名前: 太郎
年齢: 14
学年: 2年
得意科目: 数学
見てわかるように、すごく読みやすいですよね。これがYAMLの大きな特徴です。
では、もっと複雑な情報はどうするか。例えば、太郎くんが複数の学校に通っていたり、成績が複数あったりする場合です。そんなときは「インデント」を使います。インデントというのは、行の最初にスペースを入れることで、階層を表現する方法です。例えば、太郎くんの「今の学校」と「前の学校」を分けたければこんな感じになります:
名前: 太郎
年齢: 14
学校:
今の学校: 山田中学
前の学校: 山田小学
得意科目: 数学
見てみると、「学校」の下に「今の学校」と「前の学校」があるという階層関係が、スペースで表現されていますね。これが「インデント」です。スペースが2個分、右にズレることで「これは『学校』の子どもだ」っていうのを表しているわけです。
さらに複雑な例として、複数の子どもの情報を管理したい場合を考えてみましょう。YAMLでは「リスト」というものを使って、複数の項目を表現できます。リストは「-」(ハイフン)を使って表します:
子ども:
– 名前: 太郎
年齢: 14
学年: 2年
– 名前: 花子
年齢: 12
学年: 1年
このように、「-」を使うことで「これは複数の項目のうちの1つ」という意味になります。こういった工夫によって、YAMLは複雑な情報でもわかりやすく表現できるんです。
スペースと改行がすごく大切
YAMLを使う上で、絶対に気をつけなければいけないことがあります。それは「スペースの数」と「改行」です。YAMLでは、スペース1個のズレでも、プログラムが「あ、これはエラーだ」って判断してしまうことがあります。これは、他のデータ形式(JSONなど)よりもずっと「厳しい」ということです。
例えば、さっきの「学校」の例で、もし「今の学校」の前のスペースが2個じゃなくて3個だったらどうなるか。プログラムは「あ、これは別の層だ」と解釈して、エラーになってしまいます。だから、YAMLを書くときは「スペースの数をちゃんと数えながら書く」ことがすごく大切なんです。
また、改行も重要です。JSONなどは改行がなくても大丈夫ですが、YAMLでは改行で情報を区切ります。だから、わざと改行を入れないでYAMLを書いたら、動きません。このあたりが「YAMLは人間が読みやすい」という利点と、「スペースに厳しい」という欠点が両立している理由なんです。
YAMLとJSON、XMLの違いはどこ?
プログラミングやシステム設定の世界では、YAMLの他にもJSONやXMLという形式があります。これらはすべて「データを構造化して書く」という目的は同じですが、書き方が大きく違います。ここでは、それぞれの違いを見ていきましょう。
まず、JSONからいきます。JSONは「JavaScript Object Notation」の頭文字で、JavaScriptという言語で使われていた形式を、他のプログラミング言語でも使えるように標準化したものです。JSONの特徴は「括弧とカンマをいっぱい使う」というところです。さっきの「太郎くんの情報」をJSONで書くと、こんな感じになります:
{
“名前”: “太郎”,
“年齢”: 14,
“学年”: “2年”,
“得意科目”: “数学”
}
JSONはコンピュータにとって読みやすく、プログラムの中で使いやすいのが利点です。でも、人間にとっては「括弧とカンマが多い」ので、ちょっと読みづらいですよね。
次にXMLです。XMLは「eXtensible Markup Language」の頭文字で、「拡張可能なマークアップ言語」という意味です。HTMLと似た書き方で、「タグ」というものを使って情報を囲みます。同じ情報をXMLで書くと:
<データ>
<名前>太郎</名前>
<年齢>14</年齢>
<学年>2年</学年>
<得意科目>数学</得意科目>
</データ>
XMLはタグで情報を囲むから、「どこからどこまでが何か」っていうのがすごくはっきりしています。でも、同じ情報でも、タグが両側にあるから「すごく長い」というのが欠点です。
では、同じ情報をYAMLで書くと:
名前: 太郎
年齢: 14
学年: 2年
得意科目: 数学
どうですか?すごくシンプルですよね。YAMLは「無駄な記号を最小限にして、本当に必要な情報だけを書く」という考え方で設計されているんです。だから、人間が読んで書くときに、一番「楽」だということです。
それぞれの形式の使い分け
では、どの形式をいつ使うのかというと、用途によって変わります。JSONは、ウェブアプリケーション(スマートフォンのアプリとか、Webサイトとか)で、サーバーとやり取りするデータとして、よく使われます。これは、JavaScriptという言語がJSONを得意としているからです。XMLは、昔からいろんなシステムで使われていて、今でも古いシステムとの連携が必要な場面で使われることがあります。
YAMLは、さっきも言ったように「設定ファイル」を書くときに使われることが多いです。設定ファイルは、プログラムがどう動くかを決めるために、人間が書く必要がある重要なファイルです。だから「人間にとって読みやすく、書きやすい」YAMLが向いているわけです。
YAMLはどんなときに実際に使われているの?
ここまで、YAMLの書き方について説明してきました。でも「実際に、どこで使われてるの?」という疑問が出てくると思います。ここでは、実際の現場で使われているYAMLの例を見てみましょう。
一つ目の例は「Docker」です。Dockerというのは、プログラムを「コンテナ」という箱に入れて、どのパソコンでも同じように動くようにするための道具です。これは、今のウェブアプリケーション開発では、ほぼ必須のツールになっています。Dockerで何か設定を書くときは、YAMLを使います。例えば「どのプログラムを使うか」「どの位のメモリを使うか」「どのポート(データの通り口)を使うか」といった情報を、YAMLで書きます。
二つ目の例は「Kubernetes」です。Kubernetesは、たくさんのコンテナを管理するシステムです。つまり、Dockerのコンテナがいっぱいあるときに「どこにどのコンテナを配置するか」「何個のコンテナを動かすか」「コンテナがもし止まったら、また起動するか」みたいなことを、自動的に管理してくれるシステムです。Kubernetesでも、ほぼすべての設定がYAMLで書かれています。
三つ目の例は「GitHub Actions」です。GitHubというのは、プログラムのコードを管理・共有するためのサービスです。GitHub Actionsというのは「もし誰かが新しいコードをアップロードしたら、自動的にテストを走らせる」「テストが通ったら、自動的に本番環境にデプロイする」みたいなことを、自動化するための機能です。この自動化の内容も、YAMLで書きます。
四つ目の例は「AWS CloudFormation」です。AWSというのは、アマゾンが提供しているクラウドサービスで、「サーバーを借りる」「データベースを借りる」みたいなことができます。CloudFormationというのは「こういう設定のサーバーを10個作ってほしい」みたいなことを、自動的にやってくれるサービスです。この設定もYAMLで書きます。
YAMLが使われている理由
なぜ、こんなにいろんなところでYAMLが使われているのでしょうか。それは、大きく分けて2つの理由があります。
一つ目は「人間が読みやすく、書きやすい」ということです。設定ファイルというのは、プログラマーや運用者が手で書く必要があります。だから「読みやすい」「書きやすい」というのは、すごく大切です。YAMLはそれを重視して設計されているから、どんなに複雑な設定でも「何が書いてあるか」がわかりやすいんです。
二つ目は「国際標準になっている」ということです。2つ目で説明した通り、YAMLはすごく多くのシステムで採用されているから「みんな知ってる」「みんな使える」という状況になっています。だから、新しいツールを作るときも「YAMLを使おう」ってなるし、既存のツールとの連携を考えるときも「YAMLだったらいろんなツールと組み合わせやすい」というメリットがあるんです。
YAMLを使うときの注意点とよくあるミス
YAMLを使うのは便利ですが、実際に使うときには気をつけなければいけないことがいくつかあります。ここでは、実際に起こりやすいミスを見てみましょう。
スペースとタブを混ぜてはいけない
これは、YAMLを使う上で最も大切なルールです。YAMLでインデント(階層を表現する方法)を書くときは「スペース」を使わなければいけません。「タブ」という別の種類のインデントを使ってはいけないんです。
スペースとタブの違いは何かというと、目では見分けられないくらいよく似ているんです。でも、コンピュータから見ると「全然違う」ということになってしまいます。もし、誰かがタブを使ってYAMLを書いたら「え、これエラーだ」ってなってしまうわけです。
多くのテキストエディタ(プログラムを書くときに使う道具)は「Tabキーを押したら、タブではなくスペースを入れる」という設定になっているので、通常は大丈夫です。でも、古いエディタを使ったり、設定を変えていたりすると、タブが入ってしまうことがあります。だから「もしYAMLを書いたらエラーが出た」という場合は「あ、タブが混ざってないか」っていうのを確認してみるといいですよ。
スペースの数を間違える
二つ目は「スペースの数を間違える」というミスです。YAMLでは、通常、インデントを表すのに「2個のスペース」を使います。でも、初心者は「3個」「4個」「5個」と、バラバラな数を使ってしまうことがあります。
例えば、さっきの「子ども」のリストの例で:
子ども:
– 名前: 太郎
年齢: 14 ← スペース4個(正しい)
学年: 2年 ← スペース6個(間違い!)
こんな感じで、スペースの数がバラバラになってしまうと、プログラムは「あ、これは別の階層だ」と誤解してしまって、エラーが出ます。
コロンの後のスペースを忘れる
三つ目は「コロンの後のスペースを忘れる」というミスです。YAMLでは「キー: 値」というように、コロンの後に必ずスペースが必要です。もし「キー:値」って書いたら、プログラムは「あ、『キー:値』が『キー』だ」と読んでしまって、値の部分を読み込みません。
例えば、名前を「太郎」にしたいのに「名前:太郎」って書いたら、プログラムは「『名前:太郎』という名前の項目がある」と読んでしまって、期待した動きをしません。
引用符を忘れる
四つ目は「引用符を忘れる」というミスです。通常、YAMLでは引用符がなくても大丈夫なのですが、特殊な文字(コロンとか、#とか)が入っている場合は、引用符で囲む必要があります。
例えば「学校: 山田中学」は大丈夫ですが「住所: 東京都:渋谷区」みたいにコロンが入っていたら、引用符で囲む必要があります。つまり「住所: ‘東京都:渋谷区’」という感じです。
コメントの書き方を間違える
五つ目は「コメントの書き方を間違える」というミスです。YAMLでも、プログラミングと同じように「コメント」(つまり「プログラムが読まない、人間のための説明」)を書くことができます。YAMLでは、#を使ってコメントを書きます。例えば:
名前: 太郎 # これは太郎の情報です
年齢: 14
# この子どもは中学2年生です
学年: 2年
という感じです。でも、#の前には必ずスペースが必要です。もし「名前:太郎#これはコメント」って書いたら「名前: 太郎#これはコメント」と読まれてしまって、値の一部だと思われてしまいます。
まとめ:YAMLを使いこなすコツ
ここまで、YAMLについて詳しく説明してきました。最後に「YAMLを使いこなすコツ」をまとめていきましょう。
まず、YAMLを書くときは「スペースをちゃんと数えながら書く」ことが最重要です。YAMLの最大の特徴は「シンプルで読みやすい」ということですが、その代わりに「スペースに厳しい」という厳しい一面があります。だから「1個のスペースのズレ」が大きなエラーになることもあります。
二つ目は「エディタの設定をちゃんとしておく」ということです。多くのモダンなテキストエディタ(VS Codeとか、Sublime Textとか)には「YAMLをサポートする」という機能があります。つまり「YAMLを書くときに、スペースが正しく入っているか」を確認してくれるんです。こういった機能を使うと「えっ、エラーになった」っていう事態を防ぐことができます。
三つ目は「複雑になったときは、JSONで同じ情報を表現できるか試してみる」ということです。YAMLとJSONは「同じ情報を違う形式で表現する」ことができます。だから、YAMLで「あ、これなんか複雑だ」と思ったら、JSONで同じことを書いてみて「本当にこの情報が必要なのか」を確認してみるといいですよ。
四つ目は「実在するYAMLファイルを参考にする」ということです。Dockerのファイルとか、GitHubのファイルとか、ネット上には、実在するYAMLファイルがいっぱいあります。自分で一からYAMLを書くのではなく「これに似た書き方がないか」って探してみると、案外簡単に書けたりするんです。
五つ目は「エラーメッセージをちゃんと読む」ということです。YAMLでエラーが出たときは、エラーメッセージに「何行目が間違ってるか」とか「何が悪いか」が、だいたい書いてあります。だから「えっ、何が悪いの?」じゃなくて「え、7行目が間違ってるんだ」って、エラーメッセージから情報を拾うことが大切です。
YAMLは、一度「スペースの使い方」を理解しちゃえば、すごく簡単で、使いやすい形式です。最初は「え、スペースが大事?」って思うかもしれませんが、慣れてくると「この形式、すごく読みやすくていいな」って感じるようになります。これからプログラミングやシステム設定の勉強をしていく上で、YAMLは必ず出てくる形式です。だから、この機会に「なんとなく」ではなく「ちゃんと理解する」というのが、将来の自分を助けることになりますよ。
MLって何?わかりやすく解説
