CodeIgniter4でcronを使ってコマンドを自動実行する方法

🔧 はじめに

CodeIgniter4では、Laravelのような「Scheduler」は標準搭載されていませんが、独自のCLIコマンド(spark)をcron(クーロン)で定期実行することで、スケジュールタスクを実現できます。


🧩 手順1:CLIコマンドの作成

まず、CI4のコマンドを作成します。

php spark make:command SendReport

これで app/Commands/SendReport.php が作成されます。

内容を編集します:

<?php

namespace App\Commands;

use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;

class SendReport extends BaseCommand
{
    protected $group       = 'Custom';
    protected $name        = 'send:report';
    protected $description = '日次レポートを送信します';

    public function run(array $params)
    {
        CLI::write('レポート送信処理を実行中...', 'yellow');

        // 実際の処理
        // 例: メール送信やDB更新など
        // service('email')->send(...);

        CLI::write('完了しました!', 'green');
    }
}

🕒 手順2:ローカルで動作確認

php spark send:report

このコマンドが正しく動けばOKです。


⏰ 手順3:cron設定

次に、サーバーのcronを設定します。
Linuxサーバーで以下を実行:

crontab -e

以下を追加します(1時間ごとに実行する例):

0 * * * * cd /path/to/your/project && php spark send:report >> /path/to/your/project/writable/logs/cron.log 2>&1

cd でプロジェクトディレクトリに移動し、sparkコマンドを指定するのがポイントです。
出力ログを writable/logs/cron.log に保存しておくと、動作確認にも便利です。


💡 よくあるエラー対策

  • php: command not found → PHPのパスを指定(例:/usr/bin/php)
  • パーミッションエラー → writable ディレクトリの権限を確認
  • spark が動かない → 絶対パスで指定する

✅ まとめ

CodeIgniter4では、spark コマンド+cronを組み合わせることで、定期実行ジョブを簡単に構築できます。
レポート送信・定期バックアップ・キャッシュクリアなど、多くの用途に応用できます。