はじめに
植物って気づいたら水やり忘れませんか?
- 忙しいとつい忘れる
- 種類ごとに頻度が違う
- いつ水やったか分からなくなる
そこで今回は、n8n + Discord + Data Tableを使って
「水やり管理を自動化するBOT」を作りました。
作ったもの
機能一覧
- 水やりが必要な植物を自動判定
- Discordに通知
- 番号で返信すると水やり完了として記録
- 次回の水やり日を自動更新
データ構造
n8nのData Tableで管理します。
| カラム | 型 | 内容 |
|---|---|---|
| id | string | 一意キー |
| plant_name | string | 植物名 |
| watering_interval_days | number | 水やり間隔(日) |
| last_watered_at | datetime | 最終水やり日 |
| reminder_enabled | boolean | リマインドON/OFF |
| next_due_at | datetime | 次回水やり予定日 |
今回はシンプルにこの設計だけで完結させています。
全体の流れ
ざっくり流れはこんな感じです:
- 水やり対象を取得
- Discordに一覧送信
- ユーザーの返信を待つ
- 対象植物を特定
- DBを更新
機能①:水やり対象の抽出
Data Tableから「今日水やりが必要な植物」を取得します。
条件
- reminder_enabled = true
- next_due_at <= 現在時刻
この条件で「今日水やりするべき植物」が抽出されます
機能②:Discordに一覧表示
取得した植物をこんな形式で送ります
🪴 今日の水やり対象です
1. モンステラ
2. ポトス
3. サンスベリア
水やりした植物の番号を返信してください
例: 1,3
全部やったら: all
見送るなら: skip
ポイント
- 番号付きにすることで入力を簡単に
- 「all / skip」も用意してUX改善
機能③:返信待ち(ここが重要)
Discordの
Send and Wait を使います
これで
- BOTがメッセージ送信
- ユーザーの返信を待つ
- そのまま次の処理に渡す
という流れが作れます
機能④:返信の解析
返信内容を解析して対象の植物を特定します。
対応パターン
- 1,3 → 指定した植物だけ
- all → 全部
- skip → スキップ
処理内容
- カンマ区切りを分解
- 数値のみ抽出
- 対応するrow_idに変換
機能⑤:水やり記録の更新
対象の植物だけ更新します。
更新内容
- last_watered_at → 今
- next_due_at → 今 + 間隔日数
自動で次回スケジュールが決まります
工夫ポイント
① 複数植物でも対応
返信をまとめて処理することで
1回のメッセージで複数更新可能
② ステートレス設計
会話履歴に依存しない
DBだけで状態管理
③ UX重視
番号入力
all / skip
まとめ
n8nを使えば
- DB管理
- 条件分岐
- 外部通知
- ユーザー入力
これらをノーコードに近い形で組み合わせられるので、
今回みたいな「日常のちょい面倒」を解決するのに最適です。
