cronを活用したホームページ運用における自動化システムの実装

ホームページの運用では、定期的なメール送信・データ更新・会員管理など、手作業では負担の大きい作業が発生することがあります。これらを自動化することで、運用効率の向上や人的ミスの防止につながります。

ここでは、LOGZAWEB(ログザウェブ)が実際に行うcronを活用したホームページ運用における自動化システムの実装方法について解説します。

cron(クロン)とは

cron(クロン)とは、サーバー上でプログラムを定期的に自動実行するための仕組みです。

指定した時間や間隔に応じて処理を実行できるため、ホームページ運用の自動化に広く利用されています。

cron活用例
  • 予約がある顧客に対して、来店30分前に自動でリマインド通知を送りたい
  • お問い合わせ後に未対応の案件がある場合、管理者へ定期的に通知したい
  • イベント開催日やキャンペーン告知を指定した時間に配信したい
  • 会員様への請求書を毎月月末に自動送信したい
  • 支払期限を過ぎたユーザーの利用権限を自動停止したい

cronで実行するプログラムの作成

cronで自動実行するためには、まず実行対象となるプログラムを作成します。

LOGZAWEB(ログザウェブ)では、ホームページとの連携性やデータベース処理の柔軟性を考慮し、主にPHPを使用してcron処理を実装しております。

ここでは「予約がある顧客に対して、来店30分前に自動でリマインド通知を送る」処理を例に、cronで動作するプログラム構成の一例をご紹介します。


<?php
//来店30分前の予約ユーザーへリマインド通知を送信するcron処理例

require_once __DIR__ . '/db.php';


// =============================
// ログ設定
// =============================
$logFile = __DIR__ . '/cron_remind.log';

function writeLog($message)
{
    global $logFile;
    $time = date('Y-m-d H:i:s');
    file_put_contents($logFile, "[$time] $message\n", FILE_APPEND);
}

writeLog("cron start");


// =============================
// ① 現在時刻から30分前後の予約を取得(時間バッファあり)
// =============================
// cronは実行タイミングに誤差があるため、余裕を持たせて取得
$sql = "
SELECT
    r.id,
    r.member_id,
    r.reserve_datetime,
    u.name,
    t.token
FROM reservations r
LEFT JOIN users u ON u.id = r.member_id
LEFT JOIN fcm_tokens t ON t.userid = r.member_id
WHERE r.reserve_datetime BETWEEN NOW() + INTERVAL 20 MINUTE
                              AND NOW() + INTERVAL 40 MINUTE
AND r.status = 'reserved'
AND r.remind_sent = 0
";

$reservations = execPrep($sql)->fetchAll(PDO::FETCH_ASSOC);

writeLog("target count: " . count($reservations));


// =============================
// ② 通知送信処理(例)
// =============================
foreach ($reservations as $row) {

    $token = $row['token'];
    if (!$token) continue;

    $name = $row['name'];
    $time = date('H:i', strtotime($row['reserve_datetime']));

    $title = "本日のご予約のお知らせ";
    $body  = "{$name}様、{$time}からご予約がございます。お気をつけてお越しください。";

    sendPushNotification($token, $title, $body);

    // =============================
    // ③ 通知済みフラグ更新(重複防止)
    // =============================
    execPrep("
        UPDATE reservations
        SET remind_sent = 1
        WHERE id = ?
    ", [$row['id']]);

    writeLog("sent reservation_id=" . $row['id']);
}

writeLog("cron end");

echo "cron処理完了";


// =============================
// ④ 通知関数(簡易例)
// =============================
function sendPushNotification($token, $title, $body)
{
    // 実際はFirebase APIなどを使用
    echo "送信: {$title} - {$body}\n";
}
処理の流れ
  • ① cronによりプログラムを一定時間ごとに自動実行
  • ② 現在時刻から20分後〜40分後の予約データをデータベースから取得
  • ③ 通知対象ユーザーのトークン情報を取得
  • ④ リマインド通知を自動送信
  • ⑤ 通知済みフラグを更新して重複送信を防止
  • ⑥ 実行結果をログとして記録

cron(クロン)の設定方法

cronプログラムを作成したら、次はサーバー側で自動実行の設定を行います。

Xserverでは管理画面から簡単にcron設定を行うことができ、指定した時間間隔でプログラムを自動実行することが可能です。

設定手順
  • ① Xserverサーバーパネルへログイン
  • ② 「cron設定」をクリック
  • ③ 「cron追加」を選択
  • ④ 実行コマンドを入力
  • ⑤ 実行間隔(分・時間など)を設定
  • ⑥ 設定を保存

PHPプログラムをcronで実行する場合は、以下のようなコマンドを指定します。


/usr/bin/php /home/アカウント名/ドメイン/public_html/cron/remind.php

例えば「10分ごと」に実行する場合は、cron設定で以下のように指定します。


*/10 * * * *

設定が完了すると、指定した間隔でプログラムが自動実行されるようになります。 ログファイルを出力している場合は、正常に動作しているかをログで確認することも可能です。

まとめ

ホームページの運用では、予約管理・会員管理・通知送信・請求処理など、定期的に発生する作業が多く存在します。

これらを手作業で行う場合、作業負担の増加や人的ミスのリスクが発生しますが、cronを活用することで自動化し、効率的かつ安定した運用を実現することが可能になります。

LOGZAWEBでは、単にプログラムを作成するだけでなく、重複送信防止・ログ記録・エラー対策なども含めた実用的な自動化システムの設計・実装を行っております。

ホームページの運用効率化やシステム自動化をご検討の方は、お気軽にご相談ください。

関連ページのご案内

ホームページ制作のご依頼・ご相談

お電話でのお問い合わせ
平日 09:00-18:00
メールでのお問い合わせ