Laravelでランキング集計を定期的に実行する方法

Laravelでランキング集計を定期的に実行する方法

プロミディア合同会社の斉藤です。

Webサイトによくあるランキング機能ですが、あれはランキング画面を開いた時に計算しているのではありません。

Webサーバ側で決めた一定の周期でランキング計算をし、その結果をランキングテーブルに格納し、ランキング画面ではそのデータを表示させています。

今回はLaravelでランキング集計処理を定期的に実行する方法について解説していきます。

集計処理の全体像

集計処理の実装は大きく分けて3つの工程を行います。

・定期的に実行させる設定の追加

・Laravelプロジェクト内でのスケジュール定義

・ランキング集計処理の実装

 

定期的に実行させる設定の追加

定期的に処理を実行させるにはWebサーバ側にもクーロンの設定が必要となります。

クーロン設定を開く

Cronエントリを追加する

参考:Laravel 5.5 タスクスケジュール

 

Laravelプロジェクト内でのスケジュール定義

Kernelクラスのscheduleメソッド内に定期実行したい処理を記述します。

今回は自分で作成したランキング集計用クラス(DaySummary)のrunSummaryメソッドを呼び出すように書きました。

App/Console/Kernel.php

daily()を指定すると「毎日深夜12時」に実行します。

毎日の実行時間を指定したい場合は「->dailyAt(’13:00′);」のようにして、任意の時刻に設定することもできます。

また、時刻指定の他に

毎分→「->everyMinute();

30分毎→「->everyThirtyMinutes();

といった指定方法も用意されています。

 

ランキング集計処理の実装

集計処理自体はそれ用のクラスに記述します。

集計処理ではいつ呼ばれたかは意識せず、呼ばれたら常に集計の仕様に沿って処理を行わせます。

※現状は呼ばれたら1行登録するだけの実装です。まだ集計処理のロジックにはしていません。

app/Bat以下にDaySummaryクラスを作成しました。

 

まとめ

Laravelでは定期実行の仕組みも用意されています。

最初にCrontabに1行設定してしまえば、あとはWebアプリ側で柔軟な設定が可能ですので、今回のやり方を参考にしてみてください。

この記事を書いた人

斉藤 貞義

プロミディア合同会社代表。
会社員として約13年間、ソフトウェア開発の経験を積み2015年にPE-BANKに所属して独立。
システムの受託開発をメインとしながら、プログラミングスクール講師、Udemy講師、アフィリエイトサイト(30代のプログラミングスクール選び)の運営も行っている。