@ryoppippi

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

19 Jun 2024 ・ 5 min read


はじめに

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

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

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

https://github.com/ryoppippi/limo

「Limo」って​何?

こんな​特徴が​あります!

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

Note

「Limo」と​いう​名前は、は、​フランス語の​「Lire​(読む)」と​「Memo​(メモ)」を​組み合わせた​ものです! おしゃれでしょう?

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';

// バリデータ関数
type 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構文と​組み合わせる​ことで、​ファイルの​読み​書きを​簡単に​行うことができます。 ぜひ​お試しください!

comment on bluesky / twitter
CC BY-NC-SA 4.0 2022-PRESENT © ryoppippi