js-yaml パッケージのインストール
js-yaml パッケージは、npm を使ってインストールすることができます。
$ npm install js-yaml
$ npm install js-yaml --save # package.json に依存情報を追記する場合
js-yaml で Yaml ファイルを読み込む
例えば、ここでは下記のような Yaml ファイルを読み込んでみます(出典はこちら)。
☝️ .yaml or .yml
YAML ファイルの拡張子は、
.yaml が使われていたり .yml が使われていたりしますが、YAML 公式サイトでは .yaml を使うことを推奨しているようです。---
receipt: Oz-Ware Purchase Invoice
date: 2012-08-06
customer:
first_name: Dorothy
family_name: Gale
items:
- part_no: A4786
descrip: Water Bucket (Filled)
price: 1.47
quantity: 4
- part_no: E1628
descrip: High Heeled "Ruby" Slippers
size: 8
price: 133.7
quantity: 1js-yaml モジュールの safeLoad 関数を使用すると、パラメータで渡した Yaml テキストを JavaScript のオブジェクトに変換することができます。
safeLoad 関数には、ファイル名を渡すのではなく、Yaml 形式のテキストを渡す必要があることに注意してください。
下記のサンプルでは、Yaml ファイルの内容を fs.readFileSync() で取得し、その結果を js-yaml の safeLoad 関数でパースしています。
import fs from 'node:fs';
import path from 'node:path';
import yaml from 'js-yaml';
/**
* 指定されたパスの Yaml ファイルを読み込みます。
*/
function loadYamlFile(filename) {
const yamlText = fs.readFileSync(filename, 'utf8');
return yaml.load(yamlText);
}
// Entry point
try {
// Node.js 20.11.0+ では import.meta.dirname が使える
// それ以前のバージョンでは path.dirname(fileURLToPath(import.meta.url)) を使用
const data = loadYamlFile(path.join(import.meta.dirname, 'data.yaml'));
console.log(data);
console.log(data.items[1].price);
} catch (err) {
console.error(err.message);
}実行結果
$ node main.js
{ receipt: 'Oz-Ware Purchase Invoice',
date: 2012-08-06T00:00:00.000Z,
customer: { first_name: 'Dorothy', family_name: 'Gale' },
items:
[ { part_no: 'A4786',
descrip: 'Water Bucket (Filled)',
price: 1.47,
quantity: 4 },
{ part_no: 'E1628',
descrip: 'High Heeled "Ruby" Slippers',
size: 8,
price: 133.7,
quantity: 1 } ] }
133.7
Yaml ファイルの内容が、正しく JavaScript のオブジェクトに変換されていることがわかります。
js-yaml で Yaml ファイルを書き出す
js-yaml モジュールの、dump 関数を利用すると、任意の JavaScript オブジェクトを Yaml 形式のテキストに変換することができます。
変換したテキストをそのままテキストファイルとして出力すれば、Yaml ファイルができあがります。
下記の例では、books オブジェクトの内容を Yaml 形式のテキストに変換し、books.yaml ファイルに保存しています。
import fs from 'node:fs';
import yaml from 'js-yaml';
const books = [
{ name: 'タイトル1', authors: ['著者A', '著者B'] },
{ name: 'タイトル2', authros: ['著者C', '著者D'] }
];
const yamlText = yaml.dump(books);
fs.writeFile('books.yaml', yamlText, 'utf8', (err) => {
if (err) {
console.error(err.message);
process.exit(1);
}
console.log('Yaml ファイルを保存しました');
});
// 同期書き込みなら
// const yamlText = yaml.dump(books);
// try {
// fs.writeFileSync('books.yaml', yamlText, 'utf8');
// } catch (err) {
// console.error(err.message);
// process.exit(1);
// }
books.yaml (作成された Yaml ファイル)
- name: タイトル1
authors:
- 著者A
- 著者B
- name: タイトル2
authros:
- 著者C
- 著者D