node.jsで ' toml ' ファイルをパース ( 解析 ) する ライブラリ「toml-node」の紹介です。
toml は コンフィグ (設定) ファイル用に設計された、 YAML にも似た文法を持つ汎用のマークアップ言語で、 Go言語で開発されたスタティクサイトジェネレーター ' hugo 'や、Rustのパッケージマネージャー ' Cargo ' などでも 使用されています。
# tomlのサンプル
title = "TOML Example"
[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # datetype
[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
[servers]
# コメント
[servers.alpha]
ip = "10.0.0.1"
[servers.beta]
ip = "10.0.0.2"
[clients]
data = [ ["gamma", "delta"], [1, 2] ]
# array
hosts = [ "alpha", "omega" ]
また、YAMLとは違い、タブスペースや改行の縛りが強くないので、慣れればスラスラと記述することができるのも特徴です。
toml-nodeのインストール
node.js で toml をパースするライブラリの1つに ' toml-node
' があります。導入には プロジェクトルート上から ' npm
' 又は ' yarn
' を使っておこないます。
# npm
npm install toml --save
# yarn
yarn add toml
toml-nodeの使い方
toml-node の使い方はとても簡単で、ライブラリを読み込んで、' parse
' メソッドを使って tomlファイルを読み込むだけです。
下のスニペットは一般的なデータベースコネクションを tomlファイルに記述しました。
# 元になるファイル
# 一般的なdbコネクションの例 * db.toml
[db1]
client = "mysql"
[db1.connection] # 同じ空間内にオブジェクトを記述する場合
host = "127.0.0.1"
user = "dbuser"
password = "secret"
database = "mydb1"
port = 3306
[db2]
client = "mysql"
[db2.connection] # タブスペースは強制ではありません
host = "127.0.0.1"
user = "dbuser2"
password = "secret"
database = "mydb2"
port = 3306
上のtomlファイルを toml-node を使って解析したコードが下記になります。
tomlもjavascriptのオブジェクトと概念は同じなので、ブラケットやコンマいらずの jsonフォーマットと考えれば理解しやすいと思われます。
const toml = require("toml"); // ライブラリの読み込み
const { promisify } = require("util");
const fs = require("fs");
const readFileAsync = promisify(fs.readFile);
// tomlファイルの読み込み
readFileAsync("./db.toml")
.then(obj => {
// tomlファイルを解析
const data = toml.parse(obj);
console.log(data);
/*
{ db1:
{ client: 'mysql',
connection:
{ host: '127.0.0.1',
user: 'dbuser',
password: 'secret',
database: 'mydb1' } },
db2:
{ client: 'mysql',
connection:
{ host: '127.0.0.1',
user: 'dbuser2',
password: 'secret',
database: 'mydb2' } } }
*/
// 値の取り出し
console.log(data.db1.connection.database); // mydb1
});
Summary
以上が node.jsで tomlを解析する toml-node の紹介でした。
値が変わらない静的な設定ファイルを作成したい時にはかなり便利に使えそうです。また、tomlは 汎用的なマークアップ言語なので、他の言語のプロジェクトでそのまま利用も可能です。
GitHub : BinaryMuse/toml-node