はじめに
毎朝天気予報を見る人は多いですが、
- 今日はどれくらい日光を浴びるとよいのか
- 曇りの日はどれくらい不足しやすいのか
- 日焼け止めありだとどれくらい変わるのか
まで考えることはあまりありません。
そこで今回は n8n で、
- 天気取得
- ビタミンD生成を考慮した日光時間推定
- Discord通知
を自動化するワークフローを作ってみました。
完成すると毎朝こう届きます。
☀️ 天気予報リマインド
📍 地域: 東京
🌤 天気: 晴れ
🌡 気温: 20.5℃
☁️ 雲量: 47%
☔ 降水確率: 4%
🔆 UV指数: 7.6
🧬 推定条件
・年齢: 26歳
・肌タイプ: 3
・露出: 顔+腕
・季節係数: 1.1
🧴 ビタミンD目的の日光目安
・日焼け止めなし: 7分程度
・日焼け止めあり: 28分程度
💡 赤くなるほど浴びる必要はありません。肌トラブルや日焼けが心配な場合は短めにしてください。
作ったもの
全体構成
Schedule Trigger
↓
地域情報生成
↓
天気API取得
↓
地域情報とMerge
↓
ビタミンD計算
↓
Discord通知
使用技術
- n8n
- Open-Meteo
- Discord
実装した機能
1. 地域ごとの天気取得
登録地域
const regions = [
{
name:"東京",
latitude:35.6812,
longitude:139.7671
},
{
name:"横浜",
latitude:35.4437,
longitude:139.6380
}
]
Open-Meteo APIで取得する情報
- 気温
- 天気コード
- 雲量
- 降水確率
- UV指数
2. ビタミンD日光時間推定
単純に「UV指数が高いから5分」のようにはしていません。
その日の条件に合わせて、必要な日光時間をざっくり計算しています。
考慮しているのはこの5つ。
- 季節(冬は長め)
- 年齢(高齢ほど長め)
- 肌タイプ(濃い肌ほど長め)
- 肌の露出量(顔だけなら長め、腕も出せば短め)
- 雲量(曇りなら長め)
まず、その日のUVと雲量からベースとなる日光時間を計算。
必要日光時間 = 30 ÷ 実効UV
そのあと各条件で補正します。
ベース時間
× 季節補正
× 年齢補正
× 肌タイプ補正
× 露出補正
日焼け止めありの場合
日焼け止めありは生成効率が落ちる想定で、
通常推定時間 ×4
として別パターンも出しています。
例えば
日焼け止めなし 6分
日焼け止めあり 24分
のように通知されます。
厳密な医療計算ではなく、毎日の健康リマインダーとして使える実用的な目安に寄せています。
3. 地域情報と天気情報をMergeで結合
HTTP Requestノードで天気APIを呼ぶと、APIレスポンスで元の地域情報が失われる場合があります。
そのため Mergeノード を使って
- 登録地域データ
- 天気APIレスポンス
を再結合しています。
構成はこうです。
Registered Regions
├── Merge input1
└── Get Weather Forecast
└── Merge input2
MergeではmergeByPositionを使用しています。
地域ごとの
- 地域名
- 緯度経度
- 年齢
- 肌タイプ
と
- 気温
- UV指数
- 雲量
- 降水確率
を1つのデータにまとめて、後続の計算ノードに渡しています。
結合後のイメージ
{
"name":"東京",
"latitude":35.68,
"age":26,
"skinType":3,
"current":{
"temperature_2m":20.5,
"cloud_cover":47
},
"daily":{
"uv_index_max":[7.6]
}
}
この構成にすることで、地域ごとに正しい天気と日光推定結果を通知できます。
まとめ
毎日の天気から 「今日は何分くらい散歩すればよさそうか」 が分かるようになり、健康習慣の目安としてかなり便利になりました。
単なる天気通知ではなく、行動につながるリマインダーになったのが大きなメリットです。
また今後は、
推定された散歩時間に合わせて
10分コース / 20分コースのような
散歩ルートも提案する
ところまでできるとさらに面白いと感じました。
天気予報から「今日の行動提案」まで自動化できると、n8nの活用幅はかなり広がりそうです。
