yaml-resource-bundle を Kotlin で書き直した

だいぶ前に個人開発したライブラリたちをずっと放置してしまっていたのですが、
また少しずつでもアップデートしていきたいと思い、
まずは軽めの yaml-resource-bundle から始めてみました。

折角の機会なので、僕の好きな Kotlin で全て書き直しました。

yaml-resource-bundle とは

Java ResourceBundle の拡張ライブラリです。
YAML フォーマットのリソースを ResourceBundle として扱えるようにします。

akkinoc/yaml-resource-bundle - GitHub

最初は Maven セントラルリポジトリへ公開する練習のために作った雑なライブラリでした。
Web 検索などすると意外にも使われていたので、メンテすることにしました。

Kotlin で書き直しましたが、 Java からも使えます。

使い方

依存関係を追加して、

<dependency>
  <groupId>dev.akkinoc.util</groupId>
  <artifactId>yaml-resource-bundle</artifactId>
  <version>2.0.1</version>
</dependency>

ResourceBundle.getBundle(...)YamlResourceBundle.Control を指定すれば OK です。

ResourceBundle bundle = ResourceBundle.getBundle("resource", YamlResourceBundle.Control.INSTANCE);
System.out.println(bundle.getString("key"));

頑張ったところ

  • マップ, リストでネストされた値をいい感じに展開
  • --- で区切られた複数の YAML ドキュメントに対応
  • &, * 記号による YAML アンカー, エイリアスに対応
  • YAML エイリアスで再帰的な無限ループ (ex: &A [ *A ]) が入力されたときのハングアップ回避
  • Kotlin らしくテストに kotest を導入
  • CI を CircleCI から GitHub Actions へ移行