この記事でわかること
先日、妻とのコミュニケーション用に家庭用のDiscordサーバーを立てました。最初は単なるチャット代わりだったのですが、使っているうちに「これ、Botを入れたらもっと便利になるのでは?」という好奇心が抑えられなくなり、週末を使って開発してみました。
この記事では、次のことを共有します。
- なぜ家庭用にDiscordサーバーを選んだのか
- Discord Botの基本的な作り方
- 生成AIを組み込んで日常を便利にした実例
- 個人開発として運用するうえで気をつけたこと
エンジニアの方はもちろん、これからBot開発に挑戦してみたい方の参考になれば嬉しいです。
なぜ家庭用にDiscordなのか
夫婦間の連絡は一般的なメッセージアプリでも十分です。ですが、私は次の理由からDiscordを選びました。
- チャンネルを話題ごとに分けられる(買い物、家事、雑談など)
- Bot連携のAPIやライブラリが充実している
- Webhookやスラッシュコマンドなど拡張の余地が大きい
実際にチャンネルを分けてみると、「買い物リスト」「今日の献立」「TODO」などが混ざらず、後から見返しやすくなりました。家庭内の情報も、整理されていると探すストレスが減るものです。
Discord Botの基本構成
Botの開発はDiscord Developer Portalでアプリケーションを登録するところから始まります。大まかな流れは次のとおりです。
- Developer Portalでアプリケーションを作成する
- Botを追加してトークンを取得する
- 必要な権限(Intents)を有効化する
- サーバーにBotを招待する
- コードを書いて起動する
今回はPythonの discord.py を使いました。まずは動作確認用の最小構成です。
import discord
from discord.ext import commands
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix="!", intents=intents)
@bot.event
async def on_ready():
print(f"ログイン成功: {bot.user}")
@bot.command()
async def ping(ctx):
await ctx.send("pong")
bot.run("YOUR_BOT_TOKEN")
!ping と送って pong が返ってくれば成功です。ここまで来ると、あとはやりたいことを実装するだけになります。
生成AIを組み込む
最近は生成AIのAPIが手軽に使えるようになったので、せっかくならBotに組み込んでみました。我が家で特に役立っているのが「献立提案」です。
冷蔵庫にある食材を伝えると、それを使ったレシピ案を返してくれます。妻が「今日なにつくろう」と悩む時間が減り、地味に効果を発揮しています。
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
@bot.command()
async def menu(ctx, *, ingredients: str):
prompt = f"次の食材で作れる家庭向けの夕食を3つ提案して: {ingredients}"
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
)
await ctx.send(response.choices[0].message.content)
!menu 鶏肉 じゃがいも 玉ねぎ のように送ると、献立案が返ってきます。ポイントは、プロンプトに「家庭向け」といった前提を含めておくことです。用途に合わせて条件を固定しておくと、期待した回答が返りやすくなります。
実際に作った便利機能
献立提案のほかにも、いくつか機能を追加しました。
| 機能 | コマンド例 | 内容 |
|---|---|---|
| 買い物リスト | !add 牛乳 | 買うものを追記して一覧管理 |
| 献立提案 | !menu 食材 | 生成AIがレシピ案を返す |
| ゴミ出しリマインド | 自動送信 | 曜日ごとに朝通知 |
| 天気通知 | 自動送信 | 毎朝その日の天気を投稿 |
リマインド系は discord.ext.tasks を使うと定期実行が簡単に書けます。
from discord.ext import tasks
import datetime
@tasks.loop(time=datetime.time(hour=7, minute=0))
async def morning_notice():
channel = bot.get_channel(CHANNEL_ID)
await channel.send("おはよう。今日は燃えるゴミの日です")
毎朝の小さな通知ですが、「言った言わない」がなくなるだけで家庭内の空気が少し穏やかになった気がします。
運用で気をつけたこと
個人開発とはいえ家族が使うものなので、いくつか注意しました。
- トークンやAPIキーは環境変数で管理し、コードに直書きしない
- 生成AIの回答はあくまで参考であることを共有しておく
- コストが気になるAPIは軽量なモデルを選ぶ
- 常時起動が必要なので安価なVPSやRaspberry Piで動かす
特にAPIキーの扱いは基本ですが重要です。うっかり公開リポジトリに上げてしまわないよう、.gitignore の設定も忘れずに行いました。
まとめ
家庭用DiscordサーバーにサクッとBotを入れるつもりが、生成AIまで組み込んでしまい、すっかり楽しい週末プロジェクトになりました。振り返ると、次の点が良かったと感じています。
- 話題ごとのチャンネルで家庭内の情報が整理された
- Botで定型作業を自動化でき、地味なストレスが減った
- 生成AIで「考える手間」を少し肩代わりできた
技術は仕事だけでなく、身近な暮らしも豊かにしてくれます。小さなBotでも、家族に喜んでもらえると開発のモチベーションが上がるものです。興味を持った方は、まず !ping を返すだけのBotから始めてみてください。動いた瞬間の楽しさは、きっと次の一歩につながります。