2026.10.22

薬の飲み忘れをDiscordの通知で減らす!毎晩決まった時刻に届く自分専用の仕組みの作り方

水の入ったグラスと錠剤のシートの写真と、薬の飲み忘れをDiscordの通知で減らす記事見出し。一般的な薬の写真で、特定の薬を示すものではない
  • 寝る前の薬を、気づいたら飲まずに寝てしまっている
  • スマホのアラームは止めた瞬間に忘れて、結局飲んでいない
  • 毎日よく開くDiscordに、決まった時刻にお知らせが届けばいいのに

寝る前の薬の時間は、毎晩決まった時刻にDiscordへ通知を送る、自分専用の小さな仕組みで知らせてもらえます。

使うのは、Discordのウェブフックと、決まった時刻に動くプログラムだけです。Botのアカウントは要らず、この記事のファイルを写して動かせます。

通知が届くのは、ふだんから開いているDiscordのチャンネルです。アラームのように止めたら消える音ではなく、あとから見返せるメッセージとして残ります。

この記事では、ウェブフックの作り方、通知を送るスクリプト、時刻どおりに動かす設定、24時間動かす場所の選び方をまとめました。

設定が終われば、毎晩同じ時刻に、薬を飲む時間を知らせるメッセージが届くようになります。

管理人spaのアイコン
spaこの記事を書いた人

AIと一緒に、寝る前の薬の通知や食事の記録など、自分の生活のためのDiscord Botを作って動かしています。

決まった時刻にDiscordへ通知を送る仕組み

この仕組みは、3つの部品でできています。

部品役割
ウェブフック決まったチャンネルにメッセージを投稿するためのURL
送信スクリプトウェブフックURLへ、通知の文章を送る
時刻の管理毎晩決まった時刻に、送信スクリプトを動かす

ウェブフックは、Discordのサーバー設定から作れる投稿用のURLです。会話に返事をするBotとは違い、メッセージを送るだけなので、Botのアカウントやトークンは要りません。

spa

僕は毎晩22時30分に、寝る前の薬の時間を知らせるメッセージがDiscordに届くようにしています。

通知は飲み忘れを知らせる補助

この仕組みは、止まっても自分には知らせません。マシンの停止やウェブフックの削除、Discordの通知のオフで届かない日があるので、大事な薬はスマホのアラームなどと併用してください。

通知の文章には、薬の名前や病名を書かないでください。チャンネルを見られる人に伝わります。飲み忘れたときの対応は、医師か薬剤師に確かめておきます。

始める前に用意するもの

用意するのは、通知を受け取るDiscordのサーバーと、24時間動かしておけるLinuxのマシンです。

用意するもの内容
Discordのサーバー自分だけのサーバーでよい。サーバーの管理権限が要る
Linuxのマシン24時間つけておけるPCか、借りたVPS(インターネット上で借りるサーバー)
Dockerプログラムを決まった環境で動かすソフト。Linuxのマシンに入れる

自分のPCで動かすと、PCを閉じた夜は通知が届きません。寝る前の通知はPCを閉じている時間帯に重なりやすいので、24時間動いているマシンに置きます。

VPSにSSHでつなぐ

VPSを使うときは、自分のPCのターミナルから、SSHという仕組みでVPSにログインして操作します。ユーザー名とIPアドレスは、VPSの管理画面に出ています。

Terminal window
ssh [ユーザー名]@[VPSのIPアドレス]

Dockerを入れる

Ubuntuなら、Dockerの公式のUbuntuへのインストール手順どおりに入れます。入れ終わったら、次のコマンドでDocker Composeの版が表示されることを確かめます。

Terminal window
docker compose version

手順1:ウェブフックを作ってURLをコピーする

通知を受け取りたいDiscordのサーバーで、ウェブフックを作ります。

  1. 「サーバー設定」を開き、「連携サービス」を選ぶ
  2. 「ウェブフックを作成」を押す
  3. 通知を送るチャンネルを選び、見分けやすい名前に変える
  4. 「ウェブフックURLをコピー」を押す

コピーしたURLは、次の手順で使います。作り方は、Discordのウェブフックのご紹介にも書かれています。

ウェブフックURLは人に見せない

URLを知っている人はだれでも、そのチャンネルにメッセージを投稿できます。SNSやGitHubに貼ってしまったら、そのウェブフックを削除して作り直してください。

手順2:ウェブフックURLを設定ファイルに書く

ウェブフックURLは、スクリプトの中に直接書かず、別のファイルに分けて置きます。スクリプトを人に見せたり、GitHubに上げたりしても、URLが漏れません。

Linuxのマシンで、設定を置くフォルダを作り、ファイルを開きます。

Terminal window
mkdir -p ~/.config && nano ~/.config/medicine-reminder.curl

開いたファイルに次の1行を書きます。引用符の中身を、手順1でコピーしたウェブフックURLそのものに置き換えてください。

url = "ここにコピーしたウェブフックURLを貼る"

nanoは、CtrlとOを押してからEnterで保存し、CtrlとXで閉じます。保存したら、自分以外は読めないように権限を変えます。

Terminal window
chmod 600 ~/.config/medicine-reminder.curl

最後に、次のコマンドでファイルの場所を表示させます。表示された場所は、手順4で使うので控えておきます。

Terminal window
ls -l ~/.config/medicine-reminder.curl

行の先頭が-rw-------で始まっていれば、ファイルとして正しく作れています。

手順3:通知を送るスクリプトを作る

作業用のフォルダを作り、その中に通知を送るスクリプトを置きます。

Terminal window
mkdir -p ~/medicine-reminder && cd ~/medicine-reminder && nano send-reminder

次の内容を書いて保存します。descriptionの中の文章が、Discordに届くメッセージです。

#!/bin/sh
set -eu
CONFIG_FILE="${REMINDER_CONFIG_FILE:-/config/medicine-reminder.curl}"
exec /usr/bin/curl --config "$CONFIG_FILE" \
--silent --show-error --fail \
--connect-timeout 10 --max-time 30 \
--output /dev/null \
--header 'Content-Type: application/json' \
--data '{"embeds":[{"description":"夜10時半です。寝る前のお薬を飲む時間です。"}],"allowed_mentions":{"parse":[]}}'

allowed_mentionsの設定は、メッセージの文章に@everyoneなどが入っても、だれにもメンションを飛ばさないためのものです。

REMINDER_CONFIG_FILEの後ろの/config/medicine-reminder.curlは、compose.ymlを使わずにスクリプトを動かしたときの既定の場所です。

手順4:決まった時刻に動かす設定を作る

時刻どおりにスクリプトを動かすのは、Dockerの中で動くcronです。マシンの時刻の設定に左右されないよう、コンテナの中で日本時間に固定します。

同じフォルダにentrypoint.shを作ります。

#!/bin/sh
set -eu
if [ ! -f "$REMINDER_CONFIG_FILE" ] || [ ! -r "$REMINDER_CONFIG_FILE" ]; then
echo "設定ファイルが読めません: $REMINDER_CONFIG_FILE" >&2
exit 1
fi
printf '%s /usr/local/bin/send-reminder\n' "$CRON_SCHEDULE" > /etc/crontabs/root
echo "schedule='$CRON_SCHEDULE' TZ=$TZ"
exec crond -f -d 8 -L /dev/stdout

続けて、Dockerfileを作ります。

FROM alpine:3.22
ENV TZ=Asia/Tokyo
RUN apk add --no-cache curl ca-certificates tzdata \
&& cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
&& echo "Asia/Tokyo" > /etc/timezone
COPY send-reminder /usr/local/bin/send-reminder
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod 0755 /usr/local/bin/send-reminder /usr/local/bin/entrypoint.sh
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]

最後に、compose.ymlを作ります。volumesの左側の/home/ubuntu/.config/medicine-reminder.curlは、手順2のls -lで表示された場所に書き換えてください。

services:
medicine-reminder:
build: .
container_name: medicine-reminder
restart: unless-stopped
environment:
TZ: Asia/Tokyo
CRON_SCHEDULE: "30 22 * * *"
REMINDER_CONFIG_FILE: /config/medicine-reminder.curl
volumes:
- /home/ubuntu/.config/medicine-reminder.curl:/config/medicine-reminder.curl:ro

CRON_SCHEDULEの30 22 * * *は、毎日22時30分という意味です。左から分、時、日、月、曜日の順で、21時にしたいなら0 21 * * *にします。

手順5:起動してテストの通知を送る

compose.ymlのあるフォルダで、コンテナを作って起動します。

Terminal window
docker compose up -d --build

起動したら、時刻を待たずにテストの通知を1回送ります。

Terminal window
docker compose exec medicine-reminder send-reminder

Discordのチャンネルにメッセージが届けば成功です。あとは、毎晩決まった時刻に同じメッセージが届きます。

時刻や文章をあとから変えたときは、もう一度docker compose up -d --buildを実行して反映させます。

補足

テストの通知も本番と同じチャンネルに届きます。家族と共有しているチャンネルなら、先にひと言伝えておきます。

通知が来ないときの確認

テストは届くのに決まった時刻に届かないときは、時刻の設定を疑います。テストも届かないときは、ウェブフックURLか設定ファイルの読み込みを疑います。

症状確かめること
コンテナがすぐ止まるdocker compose logsに、設定ファイルが読めないと出ていないか
テストも届かないテストのコマンドを実行したときに出るエラーの文面と、設定ファイルのURL
テストは届くが、時刻に届かないdocker compose logsのschedule=の値とTZ=Asia/Tokyoの表示
以前は届いたのに急に届かないウェブフックが削除されていないか

docker compose logsの最初には、schedule='30 22 * * *' TZ=Asia/Tokyoのように、設定した時刻とタイムゾーンが出ます。ここが思った値になっていれば、時刻の設定は合っています。

24時間動かす場所を選ぶ

この仕組みは、動かしているマシンが止まると通知も止まります。毎晩届けたいなら、電源を切らないマシンに置く必要があります。

置き場所向いている人気をつけること
自宅のPC24時間つけておけるPCがある停電や再起動のあとに動いているかの確認が要る
VPS自宅のPCを閉じて寝たい毎月の料金がかかる

24時間つけているLinuxのPCが家にあるなら、VPSを借りなくてもこの記事の手順で動かせます。

VPSを借りるときの条件は、Ubuntuを選べてroot権限があることです。通知のためだけに借りるより、ほかのBotも同じVPSに載せる予定があるときのほうが、料金に見合いやすくなります。

よくある質問

Q朝と夜の2回、通知を送れますか?
A

送れます。「CRON_SCHEDULE」を「0 8,22 * * *」のようにすると、8時と22時に同じ文章が届きます。文章を時刻に合わせて変えたいときは、文章に時刻を書かずに使います。

Q飲んだかどうかを記録できますか?
A

この記事の仕組みは通知を送るだけで、飲んだかどうかは記録しません。記録まで残したいときは、ボタンや返信を受け取れるBotを作る必要があります。

まとめ:毎晩の通知はウェブフックと時刻の設定で作れる

寝る前の薬の通知は、次の順で作れます。

  • Discordでウェブフックを作り、URLを設定ファイルに分けて置く
  • 通知を送るスクリプトと、時刻どおりに動かすcronをDockerで動かす
  • テストの通知が届くことを確かめてから、毎晩の時刻を待つ
  • 自分のPCを閉じても届くように、24時間動くマシンに置く

一度動けば、毎晩同じ時刻にメッセージが届きます。止まったことに気づけるよう、ときどきチャンネルを見返してください。

食事の記録もDiscordで続けたいなら、食事の写真を送るだけでAIが記録するBotが同じサーバーで使えます。