【Node.js】ライブラリで簡単に多重起動を防止する

こんにちは、フリーランスエンジニアの太田雅昭です。

多重起動防止

多重起動防止には、一般的には.lockファイルを使用するようです。ただ.lockの解放などを考えると、毎回実装するのはなかなか面倒そう。そう思いChatGPT様に教えていただきました。

proper-lockfile

proper-lockfileを用います。

import { lock } from 'proper-lockfile';

lock('main', { realpath: false }) // main.lockディレクトリが生成される
  .then(async (release) => {
    console.log('Start');
    await new Promise((resolve) => setTimeout(resolve, 3_000));
    console.log('Finished');
    return await release();
  })
  .catch((err) => {
    console.error(err.message);
  });

原則はrelease()を返すべきですが、返さなくても自動で終了時に解放されるようです。

Ubuntuでは不具合が?

Ubuntuで使用しているのですが、頻繁に以下のエラーとなります

Lock file is already being held

以下のissuesが建てられていました。

https://github.com/moxystudio/node-proper-lockfile/issues/92

どうもUbuntuだと厳しいようですね。