- Published on
Node.jsでファイルの変更を監視・待機する
- Authors
- Name
- Shou Arisaka nyapp.buzz/shou
- short bio
- Z世代の情報技術者。Next.jsで自作SNSを個人開発中。
node.jsの標準ライブラリ"fs.watch"でファイルに変更が加わることを監視し、アクションするようにする方法についてです。
以下は公式ドキュメント File system | Node.js v16.1.0 Documentation からのサンプルコードです。 少し変更を加えています。
const fs = require('fs');
fs.watch('./file.txt', (eventType, filename) => {
console.log(`event type is: ${eventType}`);
if (filename) {
console.log(`filename provided: ${filename}`);
} else {
console.log('filename not provided');
}
});
これでカレントディレクトリのファイル"./file.txt"の変更を監視、モニターし、変更があればログをする、という動作をするわけですが
今回はとりあえずファイルに動きがあったとき、にアクションをする、 ファイルに動きがあるまで待機、ファイルに動きが出たらスクリプトを続ける、という感じでサンプルを実装します。 以下、コード例です。 極力無駄なコードを省き、シンプルに最低限の動作をするように書きました。
(async function(){
await (new Promise((resolve) => {
fs.watch('./file', (e, f) => { resolve() })
})); // wait for file change
console.log("changed.");
})();
このfs.watchには、filereadsync、のような同期バージョンがないので、promiseを組み合わせて実装します。 "await"でpromiseを待機し、./fileファイルに変更があればresolve()を実行してpromiseを抜け、続けてのconsole.logを実行します。
今回はビルトインのnodejsライブラリで最低限のシンプルなファイル変更待機を実装しましたが、 こういったものを使用してコマンドラインツールにしたい、複雑なものを作りたい、という場合には、 まずこれ以外にも既に存在するライブラリやコマンドラインツール、 例えばbashの"inotifywait"やnodejsライブラリの"nodemon"など、を参照してみることをおすすめしています。
15歳でWordPressサイトを立ち上げ、ウェブ領域に足を踏み入れる。翌年にはRuby on Railsを用いたマイクロサービス開発に着手し、現在はデジタル庁を支えたNext.jsによるHP作成やSaaS開発のプロジェクトに携わりながら、React.js・Node.js・TypeScriptによるモダンなウェブアプリの個人開発を趣味でも行う。
フロントエンドからバックエンドまで一貫したアジャイルなフルスタック開発を得意とし、ウェブマーケティングや広告デザインも必要に応じて担当、広告運用・SEO対策・データ分析まで行う低コストかつ高品質な顧客体験の提供が好評。
国内外から200万人を超える人々に支えられ、9周年を迎えるITブログ「yuipro」の開発者、デザイナーでありライター。現在ベータ段階の自作SNS「nyapp.buzz」を日本一の国産SNSとするべく奮闘中。