node.jsのいろいろなモジュール44 – YAMLパースライブラリ
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を使用したい場合にはこのモジュールがあれば手軽に使用できそうですね。