cronを活用したホームページ運用における自動化システムの実装
- LOGZAWEB
- ホームページ制作の技術的な取り組み
- cronを活用したホームページ運用における自動化システムの実装
ホームページの運用では、定期的なメール送信・データ更新・会員管理など、手作業では負担の大きい作業が発生することがあります。これらを自動化することで、運用効率の向上や人的ミスの防止につながります。
ここでは、LOGZAWEB(ログザウェブ)が実際に行う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では、単にプログラムを作成するだけでなく、重複送信防止・ログ記録・エラー対策なども含めた実用的な自動化システムの設計・実装を行っております。
ホームページの運用効率化やシステム自動化をご検討の方は、お気軽にご相談ください。