weather-skill について
Nominatimで場所をジオコーディングし、Open-Meteoから現在の天気、予報、過去の天気を取得するスキルです。エージェントによる場所と期間の特定を支援し、旅行の場合は服装の案内も加えます。
主な機能
- 01Nominatimによる場所のジオコーディング
- 02Open-Meteoからの天気取得
- 03現在・毎時・毎日のデータ
- 04過去の天気の検索
- 05旅行時の服装案内
活用シーン
- 01現在の天気と翌日の見通しの確認
- 02旅行に向けた毎時または複数日の予報比較
- 03場所を指定した直近の過去天気の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mateeb11/ weather-forecast --skill weather-skillインストール後、Claude Code で/weather-skillを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdreferences/clothing_guide.mdscripts/fetch_weather.pygeocode.py詳細
天気スキル
2つの無料 API を使用して、あらゆる場所の現在の天気と予報を提供します。
- Nominatim(OpenStreetMap):場所のジオコーディング →
scripts/geocode.py - Open-Meteo:気象データ →
scripts/fetch_weather.py
ワークフロー
- ユーザーのリクエストを理解します。 場所、時間範囲、旅行を計画しているかどうかを抽出します。以下の例を参照してください。
- 場所をジオコーディングします。
scripts/geocode.py "<location>"を実行します。display_name、lat、lon、ambiguousフラグを含む JSON が返されます。曖昧な場合は、ユーザーに確認を求めます。 - 天気を取得します。 緯度・経度と適切なフラグを指定して
scripts/fetch_weather.pyを実行します。スクリプトの使用方法は以下を参照してください。 - ユーザーに回答します。 明確に要約して伝えます。出力例は以下を参照してください。
- 旅行の意図が検出された場合は、
references/clothing_guide.mdも読み、関連する服装のアドバイスを含めます。
スクリプト
ジオコーディング:scripts/geocode.py
場所の文字列を座標に変換します。
python scripts/geocode.py "Tokyo"
python scripts/geocode.py "King Abdullah Financial District, Riyadh"
python scripts/geocode.py "Times Square, New York"
以下の JSON を返します。
{
"display_name": "Tokyo, Japan",
"lat": 35.6764,
"lon": 139.6500,
"importance": 0.82,
"ambiguous": false
}
ambiguous が true の場合、alternatives リストが含まれます。どの場所を指しているのか、ユーザーに確認してください。
天気:scripts/fetch_weather.py
指定された座標の気象データを取得します。
# Current conditions only
python scripts/fetch_weather.py --lat 35.6764 --lon 139.65 --resolution current
# Hourly forecast (good for today, tomorrow, next 12 hours, specific day)
python scripts/fetch_weather.py --lat 35.6764 --lon 139.65 --resolution hourly
# Daily forecast (good for multi-day ranges, next week, etc.)
python scripts/fetch_weather.py --lat 35.6764 --lon 139.65 --resolution daily
# Custom timezone (default is "auto" which uses the location's timezone)
python scripts/fetch_weather.py --lat 35.6764 --lon 139.65 --resolution hourly --timezone Asia/Tokyo
# Include historical data when user asks about past weather
python scripts/fetch_weather.py --lat 35.6764 --lon 139.65 --resolution daily --past-days 7
解像度に応じて、meta、current、hourly、および/または daily セクションを含む JSON を返します。
JSON レスポンスの例(--resolution current):
{
"meta": {
"lat": 35.6764,
"lon": 139.65,
"timezone": "Asia/Tokyo",
"resolution": "current",
"forecast_days": 16,
"past_days": 0
},
"current": {
"time": "2026-02-25T14:00",
"temperature_c": 12.3,
"apparent_temperature_c": 10.8,
"weather_code": 1,
"weather_description": "Mainly clear",
"wind_speed_kmh": 14.2,
"humidity_pct": 48,
"precipitation_mm": 0.0
},
"hourly": null,
"daily": null
}
スクリプトは常に forecast_days=16(予報期間の上限)をリクエストします。
過去の天気をリクエストする場合にのみ、--past-days を使用してください(0..92)。
ユーザーリクエストの解釈方法
エージェントは、ユーザーの自然言語から次の3点を判断します。
1. 場所
クエリから地名を抽出します。例:
- 「今のジェッダの天気」→
"Jeddah" - 「今週末のロンドンの予報」→
"London" - 「来週、東京に行きます」→
"Tokyo" - 「金曜日、アルウラはどれくらい風が強いですか?」→
"AlUla"
場所が指定されていない場合は、ユーザーに尋ねてください。
2. 時間範囲、解像度、過去の天気
| ユーザーの表現 | 解像度 | past_days | 備考 |
|---|---|---|---|
| 「今」/「現在」/時間の指定なし | current(今後24時間の時間別予報も含める) | 0 | 予報リクエストでは常に16日分を使用します。 |
| 「今日」/「今夜」/「明日」/「明日の朝」 | hourly | 0 | 特定の時間帯に答えるには、時間別データを使用します。 |
| 「今週末」/「金曜日」/「今後12時間の時間別予報」 | hourly | 0 | 回答では、返された時系列データを絞り込みます。 |
| 「今後3日間」 | hourly | 0 | 時間別データを要約します。 |
| 「今後7日間」/「来週」/「3月の第1週」 | daily | 0 | 日別データから該当する日を要約します。 |
| 「3月」/「4月に」/「05/01 から 06/30」 | daily | 0 | 予報期間を超える場合は、制限を明確に伝えます。 |
| 「過去の天気」/「過去3日間」/「昨日」 | daily(短い期間の場合は hourly) | リクエストに応じて設定 | 数字を指定せずに「過去」と言われた場合は、7 を既定値として使用します。 |
ユーザーはさまざまな形式(MM/DD、DD/MM、「May 1st」、「1 March」など)で日付を指定することがあります。文脈に基づいて解釈し、返された時系列データを適宜絞り込んでください。別の年が明示または示唆されていない限り、現在の年を使用します。
3日を超える範囲には daily、より短い範囲には hourly、現在の天気を尋ねるクエリには current を使用します(ただし、状況を補足するために時間別データも含めます)。
既定値(時間の指定なし):現在の状況と、今後24時間の時間別予報。
注意: 予報期間は16日間で固定です。過去の天気をリクエストする場合は、past_days(0..92)を使用してください。
3. 旅行の意図
ユーザーがどこかへ行く予定かどうかを検出します。次のようなキーワードを探します。 荷造りする、着る、旅行する、訪問する、行く、向かう、旅行、休暇、休日、外出、フライト、持っていくべきか
旅行の意図が検出された場合は、服装に関するアドバイスも含めます(以下を参照)。
出力例
例1:現在のシンプルな天気
ユーザー:「ジェッダの今の天気は?」
回答:
サウジアラビア、ジェッダの天気
現在は快晴で、気温は28°C(体感温度は30°C)です。北からの風は弱く、風速は12 km/h、湿度は45%です。降水の予報はありません。
今後数時間:
- 午後3時:29°C、快晴、降水確率0%
- 午後4時:28°C、晴れ時々曇り、降水確率0%
- 午後5時:26°C、快晴、降水確率0% (以下同様...)
例2:週末の予報
ユーザー:「今週末のロンドンの天気予報」
回答:
英国、ロンドンの週末の天気予報
3月1日(土): 最高気温11°C、最低気温5°Cです。まとまった雨が予想されます(確率70%、約4mm)。風速は最大25 km/hです。
3月2日(日): 最高気温13°C、最低気温6°Cです。晴れ時々曇りで、降水確率は20%です。風は弱まり、風速は15 km/hです。
全体として、土曜日は雨ですが、日曜日には天気が回復し、雨が少なくなる見込みです。土曜日は傘をお持ちください。
例3:服装アドバイスを含む旅行計画
ユーザー:「来週、東京に行きます。何を持っていけばいいですか?」
回答:
日本、東京 — 来週の天気予報(3月3日~9日)
曜日 最高気温 最低気温 天気 降水確率 風速 月 12°C 4°C 晴れ時々曇り 10% 15 km/h 火 10°C 3°C 小雨 65% 20 km/h ... ... ... ... ... ... 服装のアドバイス: 寒い日が続き、週の半ばには雨が予想されます(最低気温は3°C前後)。以下をお持ちください。
- 暖かい重ね着:フリースまたはウールのセーター+防寒ジャケット
- 火曜日・水曜日用の防水ジャケットと傘
- つま先が覆われた防水靴
- 朝晩用のマフラーと薄手の手袋
参照:clothing_guide.md — セクション:寒い日、雨の日
例4:特定の気象条件についての質問
ユーザー:「金曜日のアルウラはどれくらい風が強くなりますか?」
回答:
サウジアラビア、アルウラの風予報 — 2月28日(金)
風速は午後の早い時間帯に最大35 km/hに達し、夕方には15 km/h前後まで落ち着く見込みです。朝の風は比較的弱く、約10 km/hです。
⚠️ 正午ごろはやや風が強くなる見込みです。飛ばされやすい物を固定し、屋外で過ごす場合はウインドブレーカーの着用をご検討ください。
警告
以下のような特筆すべき気象条件がある場合は、警告を含めてください。
- 猛暑: 気温 ≥ 40°C
- 極寒: 気温 ≤ -10°C
- 強風: ≥ 50 km/h
- 大雨: 降水量 ≥ 20mm
服装の案内
旅行の意図が検出された場合は、references/clothing_guide.mdを読み込み、回答に関連するアドバイスを含めてください。
エラー処理
- 場所が見つからない: 市や国を追加するなど、より具体的に指定するようユーザーに尋ねてください。
- 場所が曖昧: 候補を提示し、どれを指しているか尋ねてください。
- API エラー/ネットワークがブロックされている: スクリプトはトレースバックの代わりに、次のJSONエラーエンベロープを返します。
{ "error": { "code": "NETWORK_UNAVAILABLE", "message": "Unable to reach remote weather service.", "details": "URLError: ...", "retryable": true, "hint": "Enable outbound network access or rerun with elevated permissions." } } - エラーコード:
INVALID_INPUT:ユーザー入力が不正です(past_daysが無効、場所が指定されていない、結果がない)。NETWORK_UNAVAILABLE:上流の天気APIへのDNS解決/接続/タイムアウトの問題です。UPSTREAM_API_ERROR:上流のHTTP/API応答に関する問題です。
- 終了コード:
0:成功。1:使用方法または入力検証の失敗。2:ネットワーク/上流APIの失敗。
- 運用上の案内: サンドボックス内でネットワークがブロックされている場合は、権限の引き上げを依頼するか、外部インターネットにアクセスできる環境からスクリプトを実行してください。
- 予報期間を超える場合: 16日間の制限を伝え、取得可能な情報を返してください。
- 時刻が指定されていない場合: 現在から今後24時間を既定とします。