Deno で YAML を扱う


Deno (ディーノ) Advent Calendar 25日目の記事です.

今日は Deno で YAML を扱う話です.

YAML モジュール

Deno は標準ライブラリで YAML モジュールを持っています. parse, stringify などの API を使って YAML のパースやシリアライズを行うことが出来ます.

import { parse, stringify } from "https://deno.land/std/encoding/yaml.ts";

const data = parse(`
foo: bar
baz:
  - qux
  - quux
`);
console.log(data);
// => { foo: "bar", baz: [ "qux", "quux" ] }

const yaml = stringify({ foo: "bar", baz: ["qux", "quux"] });
console.log(yaml);
// =>
// foo: bar
// baz:
//   - qux
//   - quux

parse は引数に YAML 文字列を受け取って, パースしたオブジェクトを返します.

stringify は逆にオブジェクトを受け取って, YAML 文字列を返します.

YAML は JSON とは違って, 1ファイルに複数のドキュメントを持つことが出来ます. 1ファイルに複数の YAML ドキュメントを記述するには各ドキュメントを --- という行で区切ります.

id: 1
name: Alice
---
id: 2
name: Bob
---
id: 3
name: Eve

上の例は3つのドキュメントを持った YAML の例です.

parse 関数はこのような複数ドキュメントを持った YAML 文字列をパースすることはできません. 複数ドキュメントの YAML をパースしたい場合は parseAll というメソッドを使うことが出来ます.

import { parseAll } from "https://deno.land/std/encoding/yaml.ts";

const data = parseAll(`
---
id: 1
name: Alice
---
id: 2
name: Bob
---
id: 3
name: Eve
`);
console.log(data);
// => [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" }, { id: 3, name: "Eve" } ]

3つのドキュメントを持った YAML が 3つのオブジェクトを持った配列にパースされたことが分かります.

YAML モジュールの歴史

YAML モジュールは js-yaml という npm で一番よく使われている YAML ライブラリがベースになっています. YAML モジュールの最初の移植作業はフランスの Deno meetup である Paris Deno のオーガナイザの Lilian Saget-Lethias ( @bios21 ) さんによって行われました.

まとめ

今日は Deno で YAML を扱う方法を紹介しました.