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

Flask×Celeryでメール送信を非同期化する手順をやさしく解説|初心者向けタスク管理入門

Flask×Celeryでメール送信を非同期化する手順を解説
Flask×Celeryでメール送信を非同期化する手順を解説

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

生徒

「Flaskでお問い合わせメールを送ると、画面が固まることがあるんですが、どうすればいいですか?」

先生

「それはメール送信に時間がかかっているからです。Celeryを使って、メール送信を非同期処理にすると解決できます。」

生徒

「非同期処理って難しそうです……。パソコンもあまり触ったことがなくて。」

先生

「大丈夫です。今回はFlaskとCeleryを使って、メール送信を裏で動かす仕組みを、たとえ話を交えながら説明します。」

1. Flaskでメール送信が遅くなる理由

1. Flaskでメール送信が遅くなる理由
1. Flaskでメール送信が遅くなる理由

Flask(フラスク)は、Pythonで作られたシンプルなWebアプリの仕組みです。 お問い合わせフォームや会員登録などで、メール送信を行う場面はとても多いです。

しかし、メール送信は「外部のメールサーバー」と通信するため、どうしても時間がかかります。 これは、手紙を郵便局に持っていって、配達されるまで少し待つのと似ています。

Flaskでそのままメール送信をすると、送信が終わるまで画面が待ち状態になります。 その結果、「画面が固まった」「送信ボタンを何度も押してしまう」という問題が起こります。

2. 非同期処理とCeleryの基本的な考え方

2. 非同期処理とCeleryの基本的な考え方
2. 非同期処理とCeleryの基本的な考え方

非同期処理とは、「時間のかかる作業を裏で進める仕組み」です。 レストランで注文だけ先に受けて、料理は厨房で作るイメージです。

Celery(セロリ)は、その裏作業を担当する専用スタッフのような存在です。 Flaskが「メール送信お願い!」と依頼すると、Celeryが代わりに処理します。

これにより、Flaskはすぐに画面を返せるため、ユーザーは待たされません。 Flask 非同期処理、Flask Celery、タスク管理というキーワードでよく検索される理由です。

3. Flaskでメール送信する最小サンプル

3. Flaskでメール送信する最小サンプル
3. Flaskでメール送信する最小サンプル

まずは、非同期化する前の「普通のメール送信」を見てみましょう。 ここでは「送信しました」と表示するだけの簡単な例です。


from flask import Flask

app = Flask(__name__)

@app.route("/send")
def send_mail():
    print("メールを送信しました")
    return "送信完了"

if __name__ == "__main__":
    app.run()

実際のメール送信処理は省略していますが、 ここに時間のかかる処理が入ると、画面表示が遅くなります。

4. Celeryでメール送信タスクを作る

4. Celeryでメール送信タスクを作る
4. Celeryでメール送信タスクを作る

次に、Celeryを使って「メール送信専用の仕事」を作ります。 この仕事をタスクと呼びます。


from celery import Celery
import time

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

@celery.task
def send_mail_task(address):
    time.sleep(3)
    print(f"{address} にメールを送信しました")

ここでは3秒待ってから、メールを送ったことにしています。 Redis(レディス)は、FlaskとCeleryの間で連絡を取るための伝言板です。

5. FlaskからCeleryのメールタスクを呼び出す

5. FlaskからCeleryのメールタスクを呼び出す
5. FlaskからCeleryのメールタスクを呼び出す

Flask側では、メール送信を「自分でやらずに」Celeryに任せます。 このときに使うのがdelay()です。


from flask import Flask
from tasks import send_mail_task

app = Flask(__name__)

@app.route("/send_async")
def send_async():
    send_mail_task.delay("test@example.com")
    return "メール送信を受け付けました"

これで、画面はすぐに表示され、メール送信は裏で進みます。 宅配便の「受付完了」と同じイメージです。

6. 非同期メール送信の動作イメージ

6. 非同期メール送信の動作イメージ
6. 非同期メール送信の動作イメージ

ここで、処理の流れを整理してみましょう。

  • ① ユーザーが送信ボタンを押す
  • ② FlaskがCeleryにメール送信を依頼
  • ③ Flaskはすぐに画面を返す
  • ④ Celeryが裏でメール送信を実行

この仕組みによって、Flask メール送信 非同期、Celery メール送信という検索ニーズを満たせます。

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

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

よくある勘違いは、「なぜ画面にメール送信結果が出ないのか」という点です。 非同期処理では、結果をすぐに返さないのが普通です。

メールは「あとで送られるもの」と考えましょう。 今は「依頼できたかどうか」だけが大切です。

FlaskとCeleryを使うときは、 すぐ終わる処理時間がかかる処理を分けて考えることが重要です。

8. Flask×Celeryでメール非同期化するメリット

8. Flask×Celeryでメール非同期化するメリット
8. Flask×Celeryでメール非同期化するメリット

メール送信を非同期化すると、次のような良い点があります。

  • 画面が固まらない
  • ユーザーの操作感が良くなる
  • サーバーの負担を減らせる

Flask 非同期処理、Celery タスク管理、メール送信 非同期という組み合わせは、 実務でもよく使われる基本パターンです。

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

カテゴリの一覧へ
新着記事
New1
Flask
Flaskアプリのセキュリティテストを効率的に行う方法まとめ
New2
Flask
認証と認可の違いを整理しよう!Flaskで押さえるべき基礎概念
New3
Flask
Flaskで非同期フォーム送信(Ajax POST)を実装する方法を解説!初心者でもわかるステップ解説
New4
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.4
Java&Spring記事人気No4
Python
Pythonでリストの要素を検索・取得する方法!index()やin演算子の活用法
No.5
Java&Spring記事人気No5
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.6
Java&Spring記事人気No6
Python
Pythonプログラムの書き方を基礎から学ぼう!初心者が覚えるべき文法とは?
No.7
Java&Spring記事人気No7
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.8
Java&Spring記事人気No8
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう