【Node.js】cronと組み合わせて定期処理を自動化する|node-cronによるスケジューラ構築

【Node.js】cronと組み合わせて定期処理を自動化する|node-cronによるスケジューラ構築 Node.js

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による効率的なバッチ処理を実現しましょう。