質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

意見交換

クローズ

4回答

657閲覧

【Laravel】 Webアプリでスケジュール実行するための仕組み

shubk

総合スコア12

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2023/05/09 09:51

0

0

テーマ、知りたいこと

Laravelで構築したWebアプリに、予約LINE通知機能を追加したいと考えています。
そのため、スケジュール実行を実現するための仕組みを検討しているのですが、
最適解がわからず悩んでおります。

現在私が検討している方法は以下2つです。
以下2つのどちらが良いか、または、他の方法や、他の方法のヒントになるような情報を頂けますと
助かります。

【前提】
予約LINE通知機能の概要は以下です。
・WebアプリからLINE通知したい内容と、通知日時を登録する。
・登録した日時になったら、LINE通知を行う。

【検討案⓵】
Webアプリで通知日時を登録する際に、CrontabコマンドでCronにスケジュール登録を行う。
(Cronから呼び出す処理は予め作成しておく)

【検討案⓶】
Webアプリで通知日時を登録する際に、「Kernel」クラスの「schedule」メソッドで定義を行う。
1分おきにCronが動作するように設定し、「schedule」メソッドで定義した処理を実行させる。

背景、状況

検討案⓶が良いかと考えているのですが、Cronを1分ごとに動作する場合、
リソース不足のリスクがあるのかと考えています。
デプロイするクラウドサーバーからの検討ももちろん必要と考えているのですが、
まずその前に、スケジュール実行のための仕組みを固める必要があると考えています。

何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答4

#1

AbeTakashi

総合スコア4853

投稿2023/05/09 13:34

編集2023/05/09 13:35

Laravelでスケジュール実行なら普通は検討案⓶かな?とは思いますが、

リソース不足のリスクがあるのかと考えています

が第三者からすると正直どういうリスクなのかが想像しにくく、
議論が難しい感じを受けています。

そもそもそのリソースってなんのリソースなんですかね?
CPU?、メモリ?、ディスク?、ネットワーク?
1分間に何千とか何万とか通知する想定なんでしょうか?
検討案⓵だとそのリソース不足が発生しないのでしょうか?

「リソース不足のリスク」について、もう少し詳しい情報があれば
違った意見が出てくるかもしれませんが、
これだけの情報だと検討案⓶がダメな理由がない気がします。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

shubk

総合スコア12

投稿2023/05/09 15:00

#1

ご意見ありがとうございます!

そもそもそのリソースってなんのリソースなんですかね?
CPU?、メモリ?、ディスク?、ネットワーク?
1分間に何千とか何万とか通知する想定なんでしょうか?
検討案⓵だとそのリソース不足が発生しないのでしょうか?

ご指摘の通り、リソースが曖昧でした。
リソースとはCPUとメモリを考えています。
cronを1分間に1回起動させること自体、クラウドサーバのCPUとメモリの負荷を高めてしまうのではないか、
と考えておりました。
ご指摘からcronに関して勉強不足であることを痛感しました。
まずcronの仕組みを勉強してきます。

ちなみに、1回の予約LINE通知処理にて、
1000件ほどLINE通知を実施する想定です。
(1回の通知処理で、LINEユーザ1000人に通知をする、という想定です。)
LINE通知はWebアプリ画面から登録された日時で実施するため、毎分必ず実施はありませんでした。
LINE通知機能は「Kernel」クラスの「schedule」メソッドで定義しようと考えており、
この「schedule」メソッドをcronから毎分実行しようと考えていました。

もしcronを使う以外にも、Webアプリのスケジュール実行をする方法があれば、
そのヒントだけでもいただけますと、とてもありがたいです。
また、今回のように私の説明で不十分な箇所もありましたら、そちらもご指摘いただけますと幸いです!

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

AbeTakashi

総合スコア4853

投稿2023/05/09 17:11

cronを1分間に1回起動させること自体、クラウドサーバのCPUとメモリの負荷を高めてしまうのではないか、
と考えておりました。

1分間でLINEのユーザ1000人に通知するとしても、並列で一気に1000人に超速でそれぞれ個別の内容のメッセージを送る必要がある、とかの厳しい要件がない限り、CPUやメモリの負荷を気にするレベルになるとは思えませんが、その辺はまずは簡単な通知プログラムを作ってテストしてみるしかないと思います。クラウドサーバーということですから、サーバのスペック自体を上げたりすることもできますよね? サーバのスペックやかけられる予算などの言及もありませんので、なかなか外部の人が具体的に「こうすればいい」とアドバイスするのは難しい感じではあります。

もしcronを使う以外にも、Webアプリのスケジュール実行をする方法があれば、
そのヒントだけでもいただけますと、とてもありがたいです。

検討案⓶が使えるのであれば、実装コストも含めて一番楽だと思いますので、
あまり深く考えずに、これで軽くテストしてみたらどうでしょう。
PHP使ってるのであれば、他の選択肢はあまりないと思います。
(Jenkinsをかますとかいくつかは思いますが、実装はそれなりに面倒なわりに大したメリットもなさそう)
Pythonとかも選択肢に入ってくるのであれば、また話が変わりそうではありますが。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

shubk

総合スコア12

投稿2023/05/12 11:26

3

ご回答ありがとうございます!
また返信が遅くなり失礼しました。

1分間でLINEのユーザ1000人に通知するとしても、並列で一気に1000人に超速でそれぞれ個別の内容のメッセージを送る必要がある、とかの厳しい要件がない限り、CPUやメモリの負荷を気にするレベルになるとは思えませんが、その辺はまずは簡単な通知プログラムを作ってテストしてみるしかないと思います。

情報のご提供ありがとうございます。ご提示いただきました通り、まずは小スケールでアプリを作成しテストしてみます!

サーバのスペックやかけられる予算などの言及もありませんので、なかなか外部の人が具体的に「こうすればいい」とアドバイスするのは難しい感じではあります。

たしかにご指摘の通りです。
まずはAWSやGCSでテストしてみて、予算の検討をしてみます!

検討案⓶が使えるのであれば、実装コストも含めて一番楽だと思いますので、
あまり深く考えずに、これで軽くテストしてみたらどうでしょう。
PHP使ってるのであれば、他の選択肢はあまりないと思います。
(Jenkinsをかますとかいくつかは思いますが、実装はそれなりに面倒なわりに大したメリットもなさそう)
Pythonとかも選択肢に入ってくるのであれば、また話が変わりそうではありますが。

ありがとうございます。まずはテストしてみます!
今回はLaravelフレームワークを予定しているため、PHPで検証を進めてみます!!

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問