この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
YAMLパーサ
YAML(ヤムル)とは、構造化されたデータやオブジェクトを文字列にシリアライズするためのデータ形式です。 半角スペースのインデントを用いて構造を表現し、配列/ハッシュ/スカラ(単体のデータ)を組み合わせて記述します。
今回紹介するjs-yamlは、YAMLをパースできるライブラリで、バージョン1.2に準拠しています。 このモジュールはコマンドとして使用することもできますし、 プログラム内でモジュールとして読み込んでAPIを使用することもできます。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.5
- Node.js : v0.10.8
- npm : 1.2.23
npmを使用して必要なモジュールをインストールしましょう。
% npm install -g js-yaml
なお、APIとして利用する場合は、グローバルオプションなしでインストールします。
js-yamlを使ってみる
ここにオンラインデモがあるので、結果はひと目でわかりますが、ローカルでも動作を確認してみましょう。 下記のようなYAMLを用意し、js-yamlコマンドを実行してみます。 ※デモの簡易版
# http://yaml.org/type/map.html -----------------------------------------------#
map:
# Unordered set of key: value pairs.
Block style: !!map
Clark : Evans
Ingy : döt Net
Oren : Ben-Kiki
Flow style: !!map { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }
seq:
# Ordered sequence of nodes
Block style: !!seq
- Mercury # Rotates - no light/dark sides.
- Venus # Deadliest. Aptly named.
- Earth # Mostly dirt.
- Mars # Seems empty.
- Jupiter # The king.
- Saturn # Pretty.
- Uranus # Where the sun hardly shines.
- Neptune # Boring. No rings.
- Pluto # You call this a planet?
Flow style: !!seq [ Mercury, Venus, Earth, Mars, # Rocks
Jupiter, Saturn, Uranus, Neptune, # Gas
Pluto ] # Overrated
# Scalar Types #################################################################
################################################################################
# http://yaml.org/type/bool.html ----------------------------------------------#
bool:
- true
- True
- TRUE
- false
- False
- FALSE
# http://yaml.org/type/float.html ---------------------------------------------#
float:
canonical: 6.8523015e+5
exponentioal: 685.230_15e+03
fixed: 685_230.15
sexagesimal: 190:20:30.15
negative infinity: -.inf
not a number: .NaN
# http://yaml.org/type/int.html -----------------------------------------------#
int:
canonical: 685230
decimal: +685_230
octal: 02472256
hexadecimal: 0x_0A_74_AE
binary: 0b1010_0111_0100_1010_1110
sexagesimal: 190:20:30
# http://yaml.org/type/str.html -----------------------------------------------#
string: abcd
# http://yaml.org/type/timestamp.html -----------------------------------------#
timestamp:
canonical: 2001-12-15T02:59:43.1Z
valid iso8601: 2001-12-14t21:59:43.10-05:00
space separated: 2001-12-14 21:59:43.10 -5
no time zone (Z): 2001-12-15 2:59:43.10
date (00:00:00Z): 2002-12-14
上記YAMLをsample.ymlという名前で保存し、js-yamlコマンドを実行してみましょう。 パースされて構造化されたデータがコンソールに表示されます。
% js-yaml sample.yml
{ map:
{ 'Block style':
{ Clark: 'Evans',
Ingy: 'döt Net',
Oren: 'Ben-Kiki' },
'Flow style':
{ Clark: 'Evans',
Ingy: 'döt Net',
Oren: 'Ben-Kiki' } },
seq:
{ 'Block style':
[ 'Mercury',
'Venus',
'Earth',
'Mars',
'Jupiter',
'Saturn',
'Uranus',
'Neptune',
'Pluto' ],
・
・
プログラム中にYAMLをパースしたい場合、js-yamlを通常インストールしてモジュールとして使用します。
% mkdir jsyaml && cd jsyaml
% npm install js-yaml
次のようなapp.jsファイルを記述し、プログラムからsample.ymlを読み込んでみましょう。
//app.js
require('js-yaml');
try {
var doc = require('/path/your/sample.yml');
console.log(doc);
} catch (e) {
console.log(e);
}
プログラムを実行すると、先ほどのコマンド結果と同じように、jsオブジェクトへパースされたYAMLデータが表示されます。
% node app.js
まとめ
最近は設定ファイルとして、JSONだけでなくYAMLをサポートするものも増えてきました。 YAMLを使用したい場合にはこのモジュールがあれば手軽に使用できそうですね。