logo hsb.horse
← スニペット一覧に戻る

Snippets

Node.jsでファイル判定

Node.jsでパスがファイルかどうかをPromiseで判定する関数。エラー時はfalseを返す。

公開日: 更新日:

Node.jsでパスがファイルかどうかをPromiseで判定する。 エラー時はfalseを返すため、存在チェックも兼ねる。

fs.stat() を毎回 try-catch で囲むのが面倒な時に、これくらいの小さな helper があると楽。設定ファイルの存在確認、任意入力されたパスの検証、一時ファイルの後処理前チェックのような場面でそのまま使える。

import fs from "node:fs/promises";
function isFile(path: string): Promise<boolean> {
return fs
.stat(path)
.then((stats) => stats.isFile())
.catch(() => false);
}

使いどころ

「存在していて、しかもディレクトリではなく通常ファイルであってほしい」という条件を一行で扱いたい時に向く。呼び出し側で毎回 trycatch を書かずに済むので、分岐が読みやすい。

この形にしている理由

fs.stat() の結果から stats.isFile() だけを返し、例外はまとめて false に落としている。missing path と not a file の両方を「使えない」として扱うなら、このくらい単純な API の方が扱いやすい。

注意点

この helper は、どんなエラーだったかを呼び出し側へ返さない。つまり、ファイルが無い場合と権限エラーを区別しない。そこを分けたいなら catchcode を見る形にした方がよい。シンボリックリンクをたどらずに判定したいなら stat() ではなく lstat() を使う。

実務メモ

このスニペットは、nodejs、typescript、file-system の周辺で同じ操作や判定を毎回書きたくない時に向く。小さな補助として切り出しておくと、呼び出し側では意図だけを追いやすい。

逆に、分岐や前提条件が増えて責務が膨らむなら、1本のスニペットに詰め込まない方がよい。手順と helper を分けるか、役割ごとに切り出す方が保守しやすい。