Node.jsを使ったWebアプリやバッチ処理において、「毎日深夜にログを集計する」「1時間ごとにAPIからデータを取得する」といった定期的な処理を自動化したい場面は多くあります。これを実現するには、cron(クーロン)形式のスケジュール指定が便利です。
本記事では、Node.js環境で定期処理を実行するためのライブラリ「node-cron」の使い方と、実践的なスケジューラの構築方法を解説します。
node-cronとは?
node-cron
は、cron形式のスケジュールに従ってNode.js内で定期的な処理を実行できる軽量ライブラリです。Linuxのcronと異なり、Node.jsアプリケーションの中で動作するため、アプリと連携した柔軟なジョブ設計が可能です。
インストールは以下のコマンドで行います:
npm install node-cron
基本的な使い方
毎分1回コンソールに出力する基本例は以下の通りです:
const cron = require('node-cron');
cron.schedule('* * * * *', () => {
console.log('毎分実行される処理');
});
cronの書式は以下の5つのフィールドで構成されます:
* * * * *
分 時間 日 月 曜日
たとえば「毎日午前2時に実行」したい場合は 0 2 * * *
を使います。
実践例:毎時APIからデータを取得して保存
以下は、1時間ごとに外部APIを呼び出して結果をファイルに保存するサンプルコードです。
const cron = require('node-cron');
const axios = require('axios');
const fs = require('fs');
cron.schedule('0 * * * *', async () => {
console.log('APIデータ取得処理を実行:', new Date().toISOString());
try {
const response = await axios.get('https://api.example.com/data');
const data = response.data;
fs.writeFileSync('data.json', JSON.stringify(data, null, 2));
console.log('データ保存完了');
} catch (error) {
console.error('エラー発生:', error.message);
}
});
複数ジョブを定義する場合
node-cronは複数のスケジュールを同時に管理できます。用途別にタスクを分割することで保守性が高まります。
cron.schedule('*/10 * * * *', () => {
console.log('10分ごとの監視タスク');
});
cron.schedule('0 0 * * 0', () => {
console.log('毎週日曜深夜0時に実行されるバックアップ処理');
});
注意点と運用時のコツ
- node-cronはNode.jsプロセスが常駐している必要があります。
Herokuやサーバレス環境では利用できません。 - 処理の実行ログは残すようにしましょう。
標準出力だけでなく、fs.appendFile
などでログファイルに記録する方法が有効です。 - 予期せぬ例外に備えて try-catch を必ず使用し、処理失敗時のリカバリも考慮しましょう。
まとめ
node-cron を使うことで、Node.js単体でスケジューラを組み込んだ自動処理を実装することができます。システム管理用の小規模ジョブや、定期的なAPI連携・データ更新など、さまざまな用途に応用可能です。
Linuxのcronを設定する必要がなく、アプリケーションのコード内ですべて完結できる点も大きな利点です。ぜひ導入して、Node.jsによる効率的なバッチ処理を実現しましょう。