「GitHubにプッシュしたら自動でDiscordに通知したい…」 「ブログが更新されたらサーバーのみんなに知らせたい!」 「在庫監視の結果を自動でDiscordに流したい」
そんな願いを叶えてくれるのがDiscord Webhook(ウェブフック)です!
プログラミング初心者でも大丈夫。 コピペでできる簡単な方法から、本格的な自動化まで、段階的に解説していきます。
この記事を読み終わる頃には、あなたのDiscordサーバーが情報収集の最強ハブになっているはずです!
Webhookって何?仕組みを5秒で理解

Webhookは「自動お知らせマシン」
Webhook(ウェブフック)を一言で説明すると、「外部サービスからDiscordに自動でメッセージを送る仕組み」です。
例えるなら、郵便ポストみたいなもの。
- 誰でも手紙(データ)を入れられる
- 自動的に家の中(Discord)に届く
- 24時間365日働いてくれる
普通のBotとの違い
特徴 | Webhook | Bot |
---|---|---|
設定の簡単さ | 超簡単(5分で完了) | やや複雑 |
できること | メッセージ送信のみ | 何でもできる |
常時稼働 | サーバー不要 | サーバー必要 |
双方向通信 | できない(送信のみ) | できる |
料金 | 完全無料 | サーバー代がかかる場合も |
簡単な通知なら、Webhookで十分なんです!
【基本編】5分でできる!Webhook URLの作成方法
ステップ1:Webhookを作りたいチャンネルを選ぶ
まず、通知を送りたいチャンネルを決めます。
- Discordを開く
- サーバーの中から、通知用のチャンネルを選択 (例:#お知らせ、#通知、#webhook-test など)
ポイント: 最初はテスト用のチャンネルを作ることをおすすめします!
ステップ2:チャンネル設定からWebhookを作成
- チャンネル名の横の歯車アイコンをクリック (チャンネルを右クリックでもOK)
- **左メニューから「連携サービス」**を選択
- 「ウェブフック」をクリック
- 「新しいウェブフック」ボタンをクリック
ステップ3:Webhookの基本設定
作成画面が開いたら、以下を設定:
設定項目:
- 名前
- 通知の送信者として表示される名前
- 例:GitHub通知、ブログ更新、在庫監視Bot
- 日本語でもOK!
- アバター(アイコン)
- Webhookのプロフィール画像
- 何の通知か分かりやすい画像がおすすめ
- 設定しなくてもOK
- チャンネル
- 投稿先のチャンネル
- 後から変更可能
ステップ4:Webhook URLをコピー
設定が終わったら、一番重要な作業です。
- 「ウェブフックURLをコピー」ボタンをクリック
- URLがクリップボードにコピーされる
- このURLは絶対に他人に教えない!(超重要)
URLの形式:
https://discord.com/api/webhooks/123456789/abcdefghijklmnop...
セキュリティ注意: このURLを知っている人は誰でもメッセージを送れます。 GitHubなど公開される場所には絶対に書かないで!
【実践編】実際にメッセージを送ってみよう
方法1:ブラウザで簡単テスト(Postman/Talend API Tester)
プログラミング不要で、ブラウザだけでテストできます!
Talend API Testerを使う方法:
- Chrome拡張機能「Talend API Tester」をインストール
- 以下を設定:
- Method:
POST
- URL: あなたのWebhook URL
- Headers:
Content-Type: application/json
- Body:
{ "content": "はじめてのWebhookテスト!" }
- Method:
- 「Send」ボタンをクリック
成功すると、Discordにメッセージが表示されます!
方法2:cURLコマンドでサクッと送信(Mac/Linux)
ターミナルが使える方向け:
curl -X POST -H "Content-Type: application/json" \
-d '{"content": "cURLからのテストメッセージです!"}' \
YOUR_WEBHOOK_URL
YOUR_WEBHOOK_URL
を実際のURLに置き換えて実行!
方法3:Pythonで本格的に送信
Pythonなら、もっと高度なメッセージが送れます。
基本的な送信:
import requests
import json
# WebhookのURL(自分のものに置き換えてください)
webhook_url = "YOUR_WEBHOOK_URL"
# 送信するメッセージ
data = {
"content": "PythonからDiscordへ送信!",
"username": "Python Bot"
}
# POSTリクエストで送信
result = requests.post(webhook_url, json=data)
# 送信結果を確認
if result.status_code == 204:
print("送信成功!")
else:
print(f"エラー: {result.status_code}")
リッチな埋め込みメッセージ(Embed):
import requests
from datetime import datetime
webhook_url = "YOUR_WEBHOOK_URL"
# 埋め込みメッセージの作成
embed = {
"title": "重要なお知らせ",
"description": "これは埋め込みメッセージのテストです",
"color": 5814783, # 色(10進数)
"fields": [
{
"name": "フィールド1",
"value": "ここに内容",
"inline": True
},
{
"name": "フィールド2",
"value": "別の内容",
"inline": True
}
],
"footer": {
"text": "送信時刻"
},
"timestamp": datetime.now().isoformat()
}
data = {
"username": "通知Bot",
"embeds": [embed]
}
result = requests.post(webhook_url, json=data)
【応用編】実用的な自動化アイデア10選
1. GitHub連携:プッシュ通知を自動化
GitHubの設定画面から直接Webhookを設定できます。
設定方法:
- GitHubリポジトリの「Settings」
- 「Webhooks」→「Add webhook」
- Payload URLに
Discord WebhookのURL/github
を入力 (URLの最後に/github
を追加することが重要!) - Content typeは
application/json
- イベントを選択(Push、Pull Request など)
2. Google Apps Script:スプレッドシート更新通知
function sendDiscordNotification() {
const webhookUrl = "YOUR_WEBHOOK_URL";
const message = {
"content": "スプレッドシートが更新されました!",
"embeds": [{
"title": "売上レポート",
"description": "本日の売上が確定しました",
"color": 3066993,
"fields": [
{
"name": "売上金額",
"value": "¥123,456",
"inline": true
},
{
"name": "前日比",
"value": "+15%",
"inline": true
}
]
}]
};
const options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(message)
};
UrlFetchApp.fetch(webhookUrl, options);
}
3. 在庫監視Bot(Python)
import requests
import time
from bs4 import BeautifulSoup
def check_stock(url):
# Webサイトをチェックする処理
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 在庫状況を確認(サイトによって変更必要)
stock_status = soup.find('div', class_='stock-status')
if stock_status and '在庫あり' in stock_status.text:
return True
return False
def notify_discord(webhook_url, product_name, product_url):
data = {
"content": "@everyone 在庫復活!",
"embeds": [{
"title": f"【在庫あり】{product_name}",
"url": product_url,
"color": 65280, # 緑色
"fields": [
{
"name": "状態",
"value": "✅ 購入可能",
"inline": True
}
]
}]
}
requests.post(webhook_url, json=data)
# メインループ
while True:
if check_stock("商品URL"):
notify_discord("WEBHOOK_URL", "PS5", "商品URL")
break
time.sleep(300) # 5分待機
4. サーバー監視(ヘルスチェック)
import requests
import time
def check_server(url):
try:
response = requests.get(url, timeout=5)
return response.status_code == 200
except:
return False
def send_alert(webhook_url, server_name, status):
color = 65280 if status else 16711680 # 緑 or 赤
data = {
"embeds": [{
"title": f"サーバー状態: {server_name}",
"color": color,
"fields": [
{
"name": "ステータス",
"value": "✅ 正常" if status else "❌ ダウン",
"inline": True
}
]
}]
}
requests.post(webhook_url, json=data)
5. RSS/ブログ更新通知
人気ブログの更新を見逃さない!
import feedparser
import requests
import time
import pickle
def check_rss_feed(feed_url, webhook_url):
# 既読記事のIDを保存
try:
with open('read_articles.pkl', 'rb') as f:
read_articles = pickle.load(f)
except:
read_articles = set()
# RSSフィードを取得
feed = feedparser.parse(feed_url)
for entry in feed.entries[:5]: # 最新5件をチェック
if entry.id not in read_articles:
# 新しい記事を発見!
data = {
"embeds": [{
"title": entry.title,
"url": entry.link,
"description": entry.summary[:200] + "...",
"color": 3447003,
"author": {
"name": feed.feed.title
}
}]
}
requests.post(webhook_url, json=data)
read_articles.add(entry.id)
# 既読記事を保存
with open('read_articles.pkl', 'wb') as f:
pickle.dump(read_articles, f)
Webhookメッセージをリッチにする装飾テクニック
Embedsで見栄えを良くする
普通のテキストより、埋め込みメッセージの方が目立ちます!
Embedの構成要素:
{
"embeds": [{
"title": "タイトル",
"description": "説明文",
"url": "https://example.com",
"color": 5814783,
"thumbnail": {
"url": "サムネイル画像URL"
},
"image": {
"url": "メイン画像URL"
},
"author": {
"name": "著者名",
"icon_url": "著者アイコンURL"
},
"fields": [
{
"name": "項目1",
"value": "値1",
"inline": true
}
],
"footer": {
"text": "フッターテキスト",
"icon_url": "フッターアイコン"
},
"timestamp": "2024-01-01T00:00:00.000Z"
}]
}
色の指定方法
色は10進数で指定します。
よく使う色:
- 赤: 16711680
- 緑: 65280
- 青: 255
- 黄色: 16776960
- 紫: 10181046
16進数から変換:
# 16進数 → 10進数
color_hex = "#FF5733"
color_decimal = int(color_hex[1:], 16)
print(color_decimal) # 16734003
絵文字とメンションの活用
絵文字の使い方:
{
"content": "🎉 新着情報 🎉"
}
メンションの種類:
@everyone
– 全員に通知@here
– オンラインの人に通知<@ユーザーID>
– 特定ユーザーに通知<@&ロールID>
– 特定ロールに通知
セキュリティ対策:Webhookを安全に使うために
絶対にやってはいけないこと
1. URLの公開
- GitHubのpublicリポジトリに書かない
- ブログや記事に載せない
- スクリーンショットに映さない
2. クライアントサイドでの使用
- HTMLのJavaScriptに直接書かない
- Reactなどのフロントエンドに埋め込まない
環境変数で管理する方法
Python(.envファイル):
.env
ファイル:
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
Pythonコード:
import os
from dotenv import load_dotenv
load_dotenv()
webhook_url = os.getenv('DISCORD_WEBHOOK_URL')
Node.js:
require('dotenv').config();
const webhookUrl = process.env.DISCORD_WEBHOOK_URL;
レート制限に注意
Discordには送信制限があります:
- 1秒間に5リクエストまで
- それ以上は一時的にブロック
対策コード:
import time
import requests
def send_with_rate_limit(webhook_url, messages):
for message in messages:
requests.post(webhook_url, json=message)
time.sleep(0.2) # 200ms待機
トラブルシューティング:うまくいかない時は
よくあるエラーと解決方法
エラー1:401 Unauthorized
- 原因:URLが間違っている
- 解決:URLを再度コピペ
エラー2:400 Bad Request
- 原因:JSONの形式が間違っている
- 解決:JSONの構文をチェック
エラー3:429 Too Many Requests
- 原因:送信しすぎ
- 解決:送信間隔を空ける
エラー4:メッセージが表示されない
- 原因:contentもembedsも空
- 解決:どちらか必須
デバッグのコツ
- まず簡単なメッセージでテスト
{"content": "test"}
- レスポンスを確認
response = requests.post(webhook_url, json=data) print(f"Status: {response.status_code}") print(f"Response: {response.text}")
- JSONバリデーターでチェック オンラインのJSON検証ツールを使用
IFTTTやZapierで簡単連携
プログラミング不要の連携方法
IFTTT(イフト)での設定:
- IFTTTアカウントを作成(無料)
- 「Create」から新しいアプレット作成
- 「If This」で連携したいサービスを選択
- Twitter、Instagram、Gmail など
- 「Then That」でWebhooksを選択
- URLにDiscord Webhook URLを入力
- Bodyに以下を入力:
{"content": "{{Text}}"}
Zapier(ザピアー)での設定:
より高度な連携が可能(一部有料)
- Googleスプレッドシート
- Slack
- Trello
- その他1000以上のサービス
Webhook管理のベストプラクティス
複数のWebhookを使い分ける
用途別にWebhookを作成すると管理が楽に:
github-webhook
– GitHub通知用monitoring-webhook
– サーバー監視用blog-webhook
– ブログ更新用
ログの記録
送信履歴を残しておくと、トラブル時に役立ちます:
import logging
import requests
from datetime import datetime
logging.basicConfig(filename='webhook.log', level=logging.INFO)
def send_with_logging(webhook_url, data):
try:
response = requests.post(webhook_url, json=data)
logging.info(f"{datetime.now()} - Success: {data['content'][:50]}")
return True
except Exception as e:
logging.error(f"{datetime.now()} - Error: {str(e)}")
return False
まとめ:Webhookマスターへの道
お疲れさまでした! ここまで読んでくれたあなたは、もうWebhookマスターです。
今日学んだこと:
- Webhookの基本概念を理解した
- Webhook URLの作成方法をマスターした
- 様々な送信方法を習得した
- 実用的な自動化アイデアを知った
- セキュリティ対策の重要性を学んだ
Webhookは単純な仕組みですが、アイデア次第で無限の可能性があります。
次のステップ:
- まず簡単なテスト送信から始める
- 自分に必要な通知を1つ実装してみる
- 徐々に複雑な自動化に挑戦
- 最終的には独自のBot開発へ
重要な注意:
Webhook URLは「家の鍵」と同じ。 絶対に他人に教えないでください!
これで、あなたのDiscordサーバーは情報収集の司令塔に変身します。 自動化の素晴らしさを体験して、作業効率を劇的に向上させましょう!
もし友達がWebhookに興味を持ったら、この記事をシェアしてあげてください。 一緒に自動化の世界を楽しみましょう!
コメント