📝

Limo:using構文を用いたファイル読み書きライブラリ

2024/06/19に公開

はじめに

こんにちは!
今回は、自作のライブラリ「Limo」を紹介します!
このライブラリは、テキスト、JSON、JSONC、TOML、YAMLなどのファイル形式を手軽に読み書きできる小さなツールです。
ファイルの読み書きをusing構文を使って簡単に行えるのが特徴です。

以下はREADMEを翻訳したものをベースにしています。

https://jsr.io/@ryoppippi/limo

https://github.com/ryoppippi/limo

「Limo」って何?

こんな特徴があります!

  • 簡単なファイル読み書き:わずかなコードでファイルの読み書きを実現
  • 変更の自動書き込みusing 構文を用いてブロックスコープを抜けると、自動的にファイルに変更を書き込む
  • 多様なファイル形式のサポート:JSON、JSONC、TOML、YAMLなど、さまざまなファイル形式に対応
  • データ検証:カスタムバリデータ関数を用いてデータの妥当性をチェック可能

using構文とは?

using構文は、TypeScript 5.2で導入された新しい構文です。

関数の戻り値であるObjectに [Symbol.dispose] というシンボルを持たせることで、スコープを抜ける際に自動的にdisposeメソッドが呼び出されるようになります。

詳しくは以下の記事を参照してください。
https://zenn.dev/ventus/articles/ts5_2-using-preview

Limoでは、この仕組みを利用して、スコープを抜けると同時にファイルに変更を書き込むようにしています。

インストール方法

「Limo」をプロジェクトに導入するには、以下のコマンドを使用してください。

deno add @ryoppippi/limo
npx jsr add @ryoppippi/limo
bunx jsr add @ryoppippi/limo
pnpm dlx jsr add @ryoppippi/limo
yarn dlx jsr add @ryoppippi/limo

基本的な使い方

「Limo」を使ってJSONファイルを読み書きする簡単な例を紹介します。

例:JSONファイルの読み書き

import { Json } from "@ryoppippi/limo";

// JSONファイルの読み書き
{
  using json = new Json("config.json");
  json.data = { hello: "world" };
}

// ブロックスコープを抜けると、自動的にファイルに変更が書き込まれます

「Limo」は、usingステートメントを利用して、ブロックスコープ終了時に自動で変更をファイルに書き込む仕組みを採用しています。

例:バリデーション付きの読み書き

データが期待する形式かどうかを確認するために、カスタムバリデータ関数を提供することも可能です。

import { Json } from "@ryoppippi/limo";

// バリデータ関数
interface Data {
  name: string;
  age: number;
}

function validator(_data: unknown): _data is Data {
  const data = _data as Data;
  return typeof data === "object" && data != null &&
    typeof data.name === "string" && typeof data.age === "number";
}

// バリデーション付きのJSONファイルの読み書き
{
  using json = new Json("config.json", { validator });
  json.data = { name: "John", age: 30 };
}

例:テキストファイルの読み書き

「Limo」は、テキストファイルの読み書きにも対応しています。「Text」クラスを使って、簡単にテキストファイルを操作できます。

import { Text } from "@ryoppippi/limo";

// テキストファイルの読み書き
{
  using text = new Text("example.txt");
  text.data = "Hello, world!";
}

// ブロックスコープを抜けると、自動的にファイルに変更が書き込まれます

テキストファイルの内容を読み込んだり、変更を保存したりするのが非常に簡単です。特に、ログや設定ファイルなどの管理に便利です。

例:他のファイル形式のサポート

「Limo」は、JSONC、TOML、YAMLなど他のファイル形式もサポートしています。それぞれの形式に対応するクラス(Jsonc, Toml, Yaml)を同様の方法で使用できます。

import { Toml } from "@ryoppippi/limo";

// TOMLファイルの読み書き
{
  using toml = new Toml("config.toml");
  toml.data = { key: "value" };
}

おわりに

「Limo」はファイル操作を簡単にするための軽量なツールです。
using構文と組み合わせることで、ファイルの読み書きを簡単に行うことができます。
ぜひお試しください!

Discussion