【EC-CUBE4系】Cronで定期実行するCommand処理を実装する

EC-CUBE4でCron定期実行処理を実装する方法

EC-CUBE4では、Cronで定期実行するための処理も 簡単に実装することができます。 ベースのフレームワークであるSymfonyのCommandクラスを 拡張する形で実現します。

今回は例として、筆者が仕事で取り組んでいる海外用のサイトで使用する、 為替レートを取得するプログラムを紹介したいと思います。

app/Customize以下にCommandディレクトリを作り、 SymfonyのCommandクラスを継承したクラスを作成します。

<?php
namespace Customize\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;

class ExchangeUpdateCommand extends Command
{
    // コマンド名を設定
    protected static $defaultName = 'eccube:customize:exchange-update';

    public function __construct()
    {
        parent::__construct();
    }

    protected function configure()
    {
        $this
            ->setDescription('為替レート取得コマンド')
            ->setHelp('為替レートを取得します。');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $io = new SymfonyStyle($input, $output);

        // ここに実際の処理を書きます
        // 例えば外部APIから為替レートを取得してDBに格納する処理など

        $io->success('為替レートの取得が完了しました。');

        return 0;
    }
}

後はCronなどで、以下のコマンドを叩いてあげればOKです。

php bin/console eccube:customize:exchange-update

今回は極力シンプルな形のものを紹介しましたが、 src/Eccube/Command 以下にも色々と参考にできる処理がありますので、 見てみてください。