koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

Node.js の readdir が便利になっていた

TypeScriptやJavaScriptリポジトリでちょっとしたスクリプトを書くならまぁNode.jsで動かすのが素直だと思う。

package.jsonに開発用の依存関係を入れればよいわけだし。

先日は「リポジトリ内の画像ファイルをガーっと処理したい」と思ってディレクトリ走査してみたのだけれど、少ないコード量で書けてなかなか便利だった。

File system | Node.js v20.5.0 Documentation

import { readdir } from "node:fs/promises";

const sourceDir = "./";

// 指定したディレクトリ配下のエントリの情報が全部返る
// 画像を処理したいなら後は拡張子で filter などすればよい
const files = await readdir(sourceDir, {
  withFileTypes: true,
  recursive: true,
});

再帰的に取得するオプションはかなり最近の追加(v20.2/v18.17かな)だったようだ。

fs: make recursive readdir algorithms iterative by Ethan-Arrowood · Pull Request #47650 · nodejs/node · GitHub

それ以前はいちいちディレクトリをたどらなくてはならなかったらしい。面倒くさい。実にラッキー。


しかし、withFileTypes オプションの有無で返却値の型が変わるのはいかがなものか。恐ろしい世界だ。