0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

設定ファイルの為の最強のフォーマット考えて実装した。

0
Posted at

設定ファイルの為の最強のフォーマット考えて実装した。

設定ファイルの形式で JSON とか YAML とか TOML とかあるじゃないですか?
ただ、自分的にどれも「ここが使いづらい」っていう部分があって、決定打に欠けると思ってました。

YAML とか TOML は壊れやすいというか、感覚的に理解できない部分があって、いつも「あー、これだと思ってる階層にならないのか」って感じていて、
JSON は「標準だとコメントもないし、末尾の余計なカンマさえ許してくれない」という辺りに大きな不満があったりしたのです。

YAML とか TOML はそもそも思想が自分に合ってない、
JSON は汎用の情報交換フォーマットだから、気軽に仕様変更できない仕組み、と。

「俺はな、汎用の情報交換フォーマットじゃなくて、設定ファイルのフォーマットが欲しいんだ!!」

作りました。設定ファイル用フォーマット Setay (セッテイ) 爆誕です!!

記述サンプル

example1.setay
# コメント (ハッシュ + 空白)
{
	name = "John S.";
	age = 47;
	is-student = false;
	hobbies = [ "アニメ", "ゲーム", "Rock'n' roll" ];
	address =
	{
		city = "渋谷区";
		country = "Japan";
	};
}

こんな風に書けます。更に、「設定ファイル用って振り切ったんだから」というわけで変数展開つけました。

example2.setay
{
	# シンプルな環境変数参照
	redis-host = ${REDIS_HOST};

	# フォールバック値付き (変数が未定義の場合に使用)
	db-port = ${MYSQL_PORT ?: 13306};

	# 文字列補間 (ダブルクォート文字列内で変数を展開)
	greeting = "Hello, ${USER_NAME ?: 'World'}!!";

	# フォールバックチェーン — 順番に変数を試し、最後にリテラル
	password = ${PASS_PRIMARY ?: PASS_SECONDARY ?: "default-secret"};
	
	# 文字列補間形式を使えば、変数の展開結果を文字列にできます。
	password = "${PASS_PRIMARY ?: PASS_SECONDARY ?: "default-secret"}";
}

Go 言語用のライブラリ公開中

まだ Go 言語用しかないのですが、「パーサージェネレーターで生成したパーサーを使った、ちゃんとした読み込み処理」をするライブラリ公開中です。

みんなで使って、いつか外国の人達に "Setay file! (セッテイファイル!)" て言わせるという裏の目標達成の後押しをお願いします!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?