カテゴリ: Flask 更新日: 2026/01/07

Flask×Celeryで定期実行処理(スケジューラー)を導入する方法を完全解説|初心者向け非同期タスク管理

Flask×Celeryで定期実行処理(スケジューラー)を導入する方法
Flask×Celeryで定期実行処理(スケジューラー)を導入する方法

先生と生徒の会話形式で理解しよう

生徒

「Flaskで、毎日決まった時間に自動で処理を動かすことってできますか?」

先生

「できますよ。FlaskとCeleryを組み合わせると、定期実行処理、つまりスケジューラーを作れます。」

生徒

「スケジューラーって、目覚まし時計みたいなものですか?」

先生

「まさにその通りです。時間になったら自動で処理を動かす仕組みを、これから順番に説明します。」

1. Flaskで定期実行処理が必要になる場面

1. Flaskで定期実行処理が必要になる場面
1. Flaskで定期実行処理が必要になる場面

Flask(フラスク)は、Pythonで作られた軽量なWebアプリケーションの仕組みです。 普段は、ボタンを押したときなど「人の操作」をきっかけに動きます。

しかし、実際のWebサービスでは、人が操作しなくても動いてほしい処理があります。 たとえば、毎朝のデータ整理、定期的なメール通知、古い情報の削除などです。

これらは「決まった時間に毎回やる作業」です。 人が毎回実行するのは大変なので、コンピューターに任せます。 この仕組みが定期実行処理です。

2. 非同期処理とスケジューラーの基本

2. 非同期処理とスケジューラーの基本
2. 非同期処理とスケジューラーの基本

非同期処理とは、時間のかかる作業を裏で進める方法です。 Flaskが画面表示を担当し、重い処理は別の担当が行います。

スケジューラーは、「何時に、何をするか」を決める時計係です。 学校のチャイムのように、時間になると決まった行動を促します。

FlaskとCeleryを組み合わせると、 「時間になったら、裏でタスクを実行する」という流れが作れます。 これがFlask 定期実行、Celery スケジューラーと呼ばれる仕組みです。

3. CeleryとCelery Beatの役割

3. CeleryとCelery Beatの役割
3. CeleryとCelery Beatの役割

Celery(セロリ)は、非同期タスクを実行する専門スタッフです。 一方、Celery Beatは、時間を管理するスケジュール帳のような存在です。

Celery Beatが「今です」と合図を出し、 Celeryが実際の作業を行います。

Flaskは最初に設定するだけで、 定期実行そのものには関わりません。 この分業が、安定したタスク管理につながります。

4. 定期実行するタスクを作る

4. 定期実行するタスクを作る
4. 定期実行するタスクを作る

まずは、定期的に実行したい処理をタスクとして定義します。 ここでは「決まった時間にメッセージを表示する」簡単な例です。


from celery import Celery

celery = Celery(
    "tasks",
    broker="redis://localhost:6379/0"
)

@celery.task
def daily_task():
    print("定期実行タスクが動きました")

このコードは、「やることメモ」を1つ作っただけです。 まだ自動では動きません。

5. Celery Beatでスケジュールを設定する

5. Celery Beatでスケジュールを設定する
5. Celery Beatでスケジュールを設定する

次に、Celery Beatを使って「いつ実行するか」を決めます。 ここでは、1分ごとに実行する設定にします。


from celery.schedules import crontab

celery.conf.beat_schedule = {
    "run-every-minute": {
        "task": "tasks.daily_task",
        "schedule": crontab(minute="*"),
    },
}

crontabは、時間割を作るための書き方です。 難しく見えますが、「毎分」「毎日」などを指定できる表現方法だと思ってください。

6. Flaskと定期実行処理の関係

6. Flaskと定期実行処理の関係
6. Flaskと定期実行処理の関係

Flaskは、定期実行の「管理係」ではありません。 あくまで、Web画面を表示する役割です。

そのため、定期実行処理はFlaskの外側で動きます。 Flaskが止まっていても、CeleryとCelery Beatが動いていれば、 タスクは予定通り実行されます。

これが、Flask 非同期処理、タスク管理、スケジューラー構成の基本です。

7. 定期実行処理の動作イメージ

7. 定期実行処理の動作イメージ
7. 定期実行処理の動作イメージ

ここで、全体の流れを整理しましょう。

  • ① Celery Beatが時間をチェック
  • ② 時間になるとタスク実行を指示
  • ③ Celeryがタスクを実行
  • ④ Flaskは画面表示に専念

この仕組みは、目覚まし時計と作業係が分かれている状態です。

8. 初心者がつまずきやすいポイント

8. 初心者がつまずきやすいポイント
8. 初心者がつまずきやすいポイント

初心者がよく混乱するのは、「Flaskを起動したのに動かない」という点です。 定期実行処理は、Flaskとは別にCeleryとCelery Beatを起動する必要があります。

また、結果がすぐ画面に出ないのも普通です。 定期実行は「見えないところで動く」のが特徴です。

Flask×Celeryで定期実行を使うときは、 「画面用」と「裏作業用」を分けて考えることが大切です。

本文テキスト文字数:約2815文字(全角の平仮名・カタカナ・漢字のみ、コード除外)

カテゴリの一覧へ
新着記事
New1
Python
Pythonの文字列型(str)を完全解説!連結・分割・検索の方法を紹介
New2
Python
Pythonで日付文字列から曜日を取得する方法を完全ガイド!初心者でもわかる日時処理入門
New3
Flask
FlaskアプリのSSL設定方法をやさしく解説!初心者でもわかるHTTPS対応の手順
New4
Python
Pythonでリストを辞書に変換する方法を完全ガイド!初心者でもわかるdict()とzip()の使い方
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.3
Java&Spring記事人気No3
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.4
Java&Spring記事人気No4
Python
Pythonでリストをコピーする方法!copy()・スライス・list()の使い方を比較
No.5
Java&Spring記事人気No5
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.6
Java&Spring記事人気No6
Python
Pythonでリストを文字列に変換する方法を完全ガイド!初心者でもわかるjoinの使い方
No.7
Java&Spring記事人気No7
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.8
Java&Spring記事人気No8
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説