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

FlaskからSlackへエラー通知を送ろう!初心者でもできる自動ログ送信の基本構成

FlaskでSlack通知へエラーログを送信する基本構成
FlaskでSlack通知へエラーログを送信する基本構成

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

生徒

「Flaskで作ったアプリを公開したのですが、エラーが起きたことに気づくのが遅れて、ユーザーさんに迷惑をかけてしまいました。何かいい方法はありませんか?」

先生

「それは大変でしたね。そんな時は、仕事用チャットツールの『Slack(スラック)』に、エラーの内容を自動で飛ばす仕組みを作ると便利ですよ。」

生徒

「自動でSlackにメッセージが来るんですか!それならすぐに気づけますね。プログラミング初心者でも設定できますか?」

先生

「もちろんです!『Webフック』という仕組みを使えば、意外と簡単に連携できるんです。基本の構成から丁寧に解説しますね。」

1. Slack通知とエラーログ連携のメリット

1. Slack通知とエラーログ連携のメリット
1. Slack通知とエラーログ連携のメリット

プログラミング未経験の方がアプリを運用し始めると、最初にぶつかる壁が「不具合の放置」です。自分のパソコンで動かしている時とは違い、インターネット上に公開されたアプリは、いつ誰がどこでエラーを起こすか分かりません。通常、エラーが起きるとサーバーの中にある「ログファイル」という日記帳のようなものに記録されますが、これを毎日手動でチェックするのはとても大変です。

そこで役立つのが、Slack通知です。Slackは多くの企業で使われている連絡ツールですが、これにFlaskを連携させることで、アプリが「助けて!エラーが出たよ!」とリアルタイムであなたにチャットを送ってくれるようになります。これを可観測性(オブザーバビリティ)の向上と言い、トラブルに強いアプリを作るための第一歩となります。

2. Incoming Webhook(インカミングウェブフック)とは?

2. Incoming Webhook(インカミングウェブフック)とは?
2. Incoming Webhook(インカミングウェブフック)とは?

Slackに外部からメッセージを送るために最もよく使われるのが、Incoming Webhook(インカミングウェブフック)という仕組みです。難しい名前に聞こえますが、例えるなら「Slackという家にある専用のポスト」のようなものです。

このポストには特定の「住所(URL)」が割り当てられます。Flask(あなたのアプリ)側から、その住所に向けて手紙(エラー内容)を投函するだけで、Slackのチャンネルにメッセージが表示されるようになります。設定にはSlack側の管理画面を操作して、この「専用の住所」を発行する作業が必要になります。これを一度設定してしまえば、あとはPythonのコードから呼び出すだけです。

3. FlaskからSlackへ通知を送るための準備

3. FlaskからSlackへ通知を送るための準備
3. FlaskからSlackへ通知を送るための準備

まず、Pythonでインターネットを通じてデータを送るための道具が必要です。今回は、初心者にとって最も使いやすい「requests(リクエスト)」というライブラリを使います。これは、Pythonに「外部のウェブサイトやサービスにお願い事をする機能」を追加する道具箱のようなものです。

パソコンの黒い画面(ターミナルやコマンドプロンプト)を開いて、以下の命令を打ち込んでインストールしましょう。パソコンをあまり触ったことがない方でも、この一行をコピーして貼り付けるだけで準備が整います。


pip install requests

4. 【実践】Slackへメッセージを送る最小限のコード

4. 【実践】Slackへメッセージを送る最小限のコード
4. 【実践】Slackへメッセージを送る最小限のコード

まずは、エラーではなく「普通のメッセージ」をSlackに送る練習をしてみましょう。以下のコードは、指定したURL(あなたのSlackポストの住所)に「こんにちは!」と送るシンプルなプログラムです。


import requests
import json

def send_slack_message(message):
    # Slackで発行したWebhook URLをここに貼り付けます
    webhook_url = "https://hooks.slack.com/services/XXXX/YYYY/ZZZZ"
    
    # 送る内容を整理します
    payload = {"text": message}
    
    # Slackのポストへ投函!
    requests.post(webhook_url, data=json.dumps(payload), headers={'Content-Type': 'application/json'})

# 実行してみよう
send_slack_message("Flaskアプリからのテスト送信です!")

5. Flaskのエラーハンドラと連携させる

5. Flaskのエラーハンドラと連携させる
5. Flaskのエラーハンドラと連携させる

いよいよ本番です。アプリの中でエラー(500エラーなど)が発生した時に、自動で今の send_slack_message 関数を呼び出すように設定します。これには、Flaskの errorhandler(エラーハンドラ) という機能を使います。

エラーハンドラは、アプリが困った時に「この処理をやってね」とあらかじめ決めておくルールブックのようなものです。ここでは「重大なエラーが起きたらSlackに詳細を報告する」というルールを作ります。


from flask import Flask
import requests
import json

app = Flask(__name__)

def notify_slack(error_text):
    url = "https://hooks.slack.com/services/YOUR_WEBHOOK_URL"
    data = {"text": f"【重大エラー発生】\n{error_text}"}
    requests.post(url, data=json.dumps(data))

# サーバー内部エラー(500)が起きた時に動く設定
@app.errorhandler(500)
def internal_server_error(e):
    # エラーの内容をSlackに送る
    notify_slack(str(e))
    return "サーバーで問題が発生しました。管理者に通知済みです。", 500

@app.route('/cause-error')
def cause_error():
    # 意図的にエラーを発生させてみます
    return 1 / 0

6. ログの重要度(レベル)で通知を分ける考え方

6. ログの重要度(レベル)で通知を分ける考え方
6. ログの重要度(レベル)で通知を分ける考え方

全てのログをSlackに送ってしまうと、チャットが通知の嵐になってしまい、本当に大事な情報を見逃してしまいます。そこで、「ログレベル」という重要度のランクを活用します。

通常、アプリの日記(ログファイル)には「INFO(お知らせ)」も書き込みますが、Slackへの通知は「ERROR(問題あり)」「CRITICAL(致命的)」なものだけに限定するのが運用のコツです。このように情報の取捨選択を行うことで、あなたは本当に必要な時だけ対応すれば良くなり、仕事の効率が上がります。これを「通知の最適化」と呼びます。

7. 通知内容をより分かりやすくカスタマイズする

7. 通知内容をより分かりやすくカスタマイズする
7. 通知内容をより分かりやすくカスタマイズする

Slackに届くメッセージが「エラーです」だけだと、何が起きたか調査するのに時間がかかります。もう少し詳しく、「どのページでエラーが起きたか」や「いつ起きたか」といった情報を付け加えると、初心者でもエラーの場所が見つけやすくなります。

Flaskの request オブジェクトを使うと、今アクセスされているURLなどの情報を取得できます。これらをメッセージに盛り込んでみましょう。


from flask import Flask, request
import requests

app = Flask(__name__)

@app.errorhandler(Exception)
def handle_exception(e):
    # アクセスされたURLとエラーの内容を合体させる
    error_msg = f"場所: {request.url}\n内容: {str(e)}"
    
    # Slack送信(関数は前述のものを使用)
    # notify_slack(error_msg)
    
    app.logger.error(error_msg)
    return "不具合が発生しました。", 500

8. セキュリティに注意!Webhook URLの扱い

8. セキュリティに注意!Webhook URLの扱い
8. セキュリティに注意!Webhook URLの扱い

ここでとても大切な注意点があります。SlackのWebhook URLは絶対に他人に教えてはいけません。このURLを知っている人なら誰でも、あなたのSlackチャンネルに自由にメッセージを送れてしまうからです。

プログラムをGitHub(ギットハブ)などのネット上に公開する場合は、URLを直接コードに書かずに「環境変数(かんきょうへんすう)」という別の場所に隠しておくのがプロのやり方です。パソコン初心者の方はまず、「このURLは銀行の暗証番号と同じくらい大事なものだ」という意識を持って、取り扱いには十分に気をつけましょう。

9. 通知が届かない時のチェックリスト

9. 通知が届かない時のチェックリスト
9. 通知が届かない時のチェックリスト

もしコードを書いてもSlackに通知が来ない時は、以下のポイントを確認してみてください。

  • インターネットに繋がっているか: アプリが外の世界と通信できる状態か確認しましょう。
  • URLが間違っていないか: コピーしたWebhook URLに余計なスペースが入っていないか見てください。
  • requestsライブラリが入っているか: 手順3のインストールが成功しているか確認しましょう。
これらはプログラミングでよくある「うっかりミス」です。一つずつ確認すれば必ず解決できます。焦らずに対処するのが上達の秘訣です。

10. 継続的な運用のために

10. 継続的な運用のために
10. 継続的な運用のために

Slack通知ができるようになると、アプリを公開する怖さが少し和らぎます。何かあればアプリが教えてくれるという安心感があるからです。これをきっかけに、ログ管理やエラー監視の奥深さを知っていただければ嬉しいです。

最初は「通知が来た!」と喜ぶところからスタートし、徐々に「どうすればもっと原因が分かりやすいメッセージになるかな?」と考えて改善していくことで、あなたのプログラミングスキルはどんどん向上していきます。まずはこの基本構成を自分のアプリに組み込んで、その便利さを体感してみてください!

カテゴリの一覧へ
新着記事
New1
Flask
Flaskのログレベル(DEBUG/INFO/WARNING/ERROR)を使い分ける方法を完全ガイド!
New2
Python
Pythonのfrozensetとは?ミュータブルなsetとの違いをわかりやすく解説
New3
Python
Pythonでセットを活用してデータをフィルタリングする方法!初心者でもわかるセットの基本と使い方
New4
Python
Pythonの辞書操作まとめ!初心者が知っておくべき便利ワザ集
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
No.2
Java&Spring記事人気No2
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.3
Java&Spring記事人気No3
Flask
FlaskアプリのSECRET_KEYの設定方法を完全ガイド!初心者でもわかるセキュリティ対策
No.4
Java&Spring記事人気No4
Flask
Flaskで非同期処理を成功させるベストプラクティス集|初心者でも失敗しない考え方
No.5
Java&Spring記事人気No5
Django
Djangoモデル入門|初心者が最初に知るべきORMの基本操作
No.6
Java&Spring記事人気No6
Python
Pythonのリストを分割する方法を完全ガイド!初心者でもわかるスライス・split・itertoolsの使い方
No.7
Java&Spring記事人気No7
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.8
Java&Spring記事人気No8
Flask
Flaskのログをファイルに保存する方法!初心者でもわかる設定手順を徹底解説