はじめに
Bun で始めたプロジェクトで、これまではテキストファイルの読み書きに fs (File system) を使っていたのですが、せっかくなので Bun が用意している方法でファイルの読み書きをやってみます。
方法
Bun.file(path)
でファイルを読み込み、 file.text()
でファイルをテキストとして読み出します。
Bun.write(path, text)
でファイルに文字列を書き込みます。
環境
Bun v1.1.3
ファイル構成 (抜粋)
|--ango_sakura.txt
|--index.ts
|--node_modules
|--package.json
|--tsconfig.json
ango_sakura.txt
彼は女の顔の上の花びらをとってやろうとしました。彼の手が女の顔にとどこうとした時に、何か変ったことが起ったように思われました。すると、彼の手の下には降りつもった花びらばかりで、女の姿は掻き消えてただ幾つかの花びらになっていました。そして、その花びらを掻き分けようとした彼の手も彼の身体も延した時にはもはや消えていました。あとに花びらと、冷めたい虚空がはりつめているばかりでした。
コード例
例0: fs
でテキストファイルを読み書きする
index.ts
import fs from 'fs';
// ファイル読み込み
const text = fs.readFileSync('ango_sakura.txt', 'utf8');
// はじめの1文を出力
console.log(text.substring(0, text.indexOf('。') + 1));
// 句点(。)のあとに改行を挿入
const split_text = text.replace(/。([^\n])/g, `。\n$1`)
// ファイル書き込み
fs.writeFileSync('ango_sakura_inserted_line_feeds.txt', split_text);
実行結果
彼は女の顔の上の花びらをとってやろうとしました。
ango_sakura_inserted_line_feeds.txt
彼は女の顔の上の花びらをとってやろうとしました。
彼の手が女の顔にとどこうとした時に、何か変ったことが起ったように思われました。
すると、彼の手の下には降りつもった花びらばかりで、女の姿は掻き消えてただ幾つかの花びらになっていました。
そして、その花びらを掻き分けようとした彼の手も彼の身体も延した時にはもはや消えていました。
あとに花びらと、冷めたい虚空がはりつめているばかりでした。
例1: Bun.file()
, file.text()
でテキストファイルを読み込む
index.ts
// Bun.file(path) でファイル読み込み
const file = Bun.file('ango_sakura.txt');
// text() メソッドでファイルをStringにする
const text = await file.text();
console.log(text.substring(0, text.indexOf('。') + 1));
実行結果
彼は女の顔の上の花びらをとってやろうとしました。
例2: Bun.write()
でテキストをファイルに書き込む
index.ts
const file = Bun.file('ango_sakura.txt');
const text = await file.text();
console.log(text.substring(0, text.indexOf('。') + 1));
const split_text = text.replace(/。([^\n])/g, `。\n$1`)
// Bun.write(path, text) でテキストをファイルに書き込む
Bun.write('ango_sakura_inserted_line_feeds.txt', split_text);
ango_sakura_inserted_line_feeds.txt
彼は女の顔の上の花びらをとってやろうとしました。
彼の手が女の顔にとどこうとした時に、何か変ったことが起ったように思われました。
すると、彼の手の下には降りつもった花びらばかりで、女の姿は掻き消えてただ幾つかの花びらになっていました。
そして、その花びらを掻き分けようとした彼の手も彼の身体も延した時にはもはや消えていました。
あとに花びらと、冷めたい虚空がはりつめているばかりでした。
雑感
特段使い勝手がいい!などということはありませんが、デフォルトで使えるし使いたければ使ってもいいのかなという感じです。
Bun にはファイル読み書きだけでなく、アプリケーションを構築する上でよく使う様々なユーティリティが用意されているので、積極的に使っていきたいと思いました。
今回はストリームでの読み書きはやっていませんが、今やっているプロジェクトでTSVファイルをストリームで読み込んでJSONにする、ということをやっているので、次はBunのストリームも触ってみたいです。