ホーム チュートリアル カテゴリ Skills サイトについて
ZH EN JA KO
スキル・プラグイン

OpenClaw天気予報Skill開発実践ガイド

· 14 分で読了

はじめに

独自の OpenClaw Skill を開発することは、楽しくてやりがいのある作業です。本チュートリアルでは、天気予報 Skill の開発をゼロから完了するまで案内します。この実践プロジェクトを通じて、Skill 開発のコア概念と完全なワークフローを習得できます。

Skill の基本概念

OpenClaw の Skill は本質的に SKILL.md ファイルであり、自然言語を使用して AI アシスタントが特定のシナリオでどのように動作するかを定義します。Skill ファイルは ~/.openclaw/skills/ ディレクトリに格納されます。

Skill は主に以下の要素で構成されます:

要素 説明 必須
名前と説明 Skill の識別情報 はい
トリガー条件 どのような状況で Skill を起動するか はい
動作定義 起動後にどのように実行するか はい
出力フォーマット 応答のフォーマットとスタイル 推奨
MCP ツール 呼び出す必要がある外部ツール 必要に応じて

SKILL.md ファイル構造

標準的な SKILL.md ファイルの構造は以下の通りです:

---
name: skill-name
version: 1.0.0
description: Brief description of the skill
triggers:
  - keyword1
  - keyword2
mcp_tools:
  - tool_name
---

# Skill Title

## Description
Detailed description of what this skill does.

## Behavior
Instructions for how the AI should behave when this skill is activated.

## Output Format
How the response should be formatted.

ステップ1:天気Skillの企画

コーディングを始める前に、スキルの機能を企画しましょう:

  • 機能:指定された都市の天気情報の取得(現在の天気 + 予報)
  • トリガーワード:天気、weather、気温、温度、下雨
  • データソース:MCP ツール経由で OpenWeatherMap API を呼び出し
  • 出力:フォーマットされた天気情報カード

ステップ2:MCP天気ツールの準備

天気 API を使用する前に、OpenClaw の設定で MCP ツールをセットアップする必要があります。~/.config/openclaw/openclaw.json5 を編集します:

{
  mcp: {
    servers: {
      "weather-api": {
        // HTTP タイプの MCP サービスを使用
        command: "npx",
        args: ["-y", "@openclaw-mcp/http-fetch"],
        env: {
          // OpenWeatherMap API キー
          OPENWEATHER_API_KEY: "your-api-key-here"
        }
      }
    }
  }
}

OpenWeatherMap API キーをまだお持ちでない場合は、https://openweathermap.org/api で無料登録して取得してください。

ステップ3:SKILL.mdの作成

~/.openclaw/skills/ ディレクトリに weather.SKILL.md ファイルを作成します:

---
name: weather
version: 1.0.0
description: 查询全球城市天气信息,支持当前天气和未来预报
triggers:
  - 天気
  - weather
  - 気温
  - 温度
  - 下雨
  - 下雪
  - 予報
  - forecast
mcp_tools:
  - http_fetch
---

# 天気予報スキル

## Description

これは天気予報スキルです。ユーザーが天気に関する質問をした際に起動します。
世界中の任意の都市の現在の天気と将来の天気予報の取得をサポートします。

## Behavior

ユーザーが天気情報を尋ねた場合、以下の手順で実行します:

1. **都市名の抽出**:ユーザーのメッセージから対象都市を特定します。ユーザーが都市を
   指定していない場合は、どの都市の天気を知りたいか尋ねます。

2. **天気APIの呼び出し**:http_fetch ツールを使用して OpenWeatherMap API を呼び出します:
   - 現在の天気:`https://api.openweathermap.org/data/2.5/weather?q={city}&appid={OPENWEATHER_API_KEY}&units=metric&lang=zh_cn`
   - 将来の予報:`https://api.openweathermap.org/data/2.5/forecast?q={city}&appid={OPENWEATHER_API_KEY}&units=metric&lang=zh_cn&cnt=24`

3. **データ解析**:API から返された JSON から重要な情報を抽出します。

4. **出力のフォーマット**:下記の出力フォーマットテンプレートに従って結果を返します。

## Data Parsing

API レスポンスから以下のフィールドを抽出します:

- `main.temp` - 現在の温度(摂氏)
- `main.feels_like` - 体感温度
- `main.humidity` - 湿度パーセンテージ
- `weather[0].description` - 天気の説明
- `wind.speed` - 風速(m/s)
- `main.temp_min` - 最低温度
- `main.temp_max` - 最高温度
- `sys.sunrise` - 日の出時刻(Unixタイムスタンプ、現地時間に変換)
- `sys.sunset` - 日没時刻

## Output Format

以下のフォーマットでユーザーに返答します:

### 現在の天気

🌤️ {都市名} の天気

📍 現在の天気:{天気の説明} 🌡️ 気温:{現在の温度}°C(体感 {体感温度}°C) 📊 気温範囲:{最低気温}°C ~ {最高気温}°C 💧 湿度:{湿度}% 💨 風速:{風速} m/s 🌅 日の出:{日の出時刻} 🌇 日没:{日没時刻}


### 将来の予報

📅 {都市名} の天気予報

時間 天気 気温 湿度
{時間1} {天気1} {温度1}°C {湿度1}%
{時間2} {天気2} {温度2}°C {湿度2}%
...

## Additional Instructions

- 都市名が曖昧な場合(例:「長安」は西安を指す可能性がある)、候補リストを表示してユーザーに選択してもらいます
- API がエラーを返したり都市が存在しない場合は、ユーザーに丁寧に伝え、都市名の確認を提案します
- 温度は摂氏、風速は m/s を使用します
- 天気状況に応じた簡単な生活アドバイスを提供します(傘の携帯、日焼け止め、防寒など)
- 時間表示は 24 時間制を使用します

ステップ4:Skillのテスト

方法1:ローカルテスト

OpenClaw を再起動してテストします:

# 新しいスキルをロードするために再起動
openclaw restart

# スキルがロードされていることを確認
openclaw skill list

次に、接続されている任意のチャットチャンネルでメッセージを送信してテストします:

北京の今日の天気はどうですか?

方法2:デバッグモードの使用

OpenClaw はスキル開発を支援するデバッグモードを提供しています:

# 詳細ログを有効化
openclaw logs --level debug

デバッグログにはスキルのトリガーと実行プロセスが表示されます:

[DEBUG] Message received: "北京今天天气怎么样?"
[DEBUG] Skill matching: checking triggers...
[DEBUG] Skill 'weather' matched by trigger: "天気"
[DEBUG] Activating skill: weather
[DEBUG] MCP tool call: http_fetch -> openweathermap API
[DEBUG] API response: 200 OK
[DEBUG] Skill 'weather' execution complete

方法3:Gateway経由で直接テスト

チャットチャンネルを経由せず、Gateway API を直接呼び出します:

curl -X POST http://localhost:18789/api/chat \
  -H "Content-Type: application/json" \
  -d '{
    "message": "上海は明日雨が降りますか?",
    "context": []
  }'

ステップ5:出力の最適化

生活アドバイスロジックの追加

SKILL.md の Behavior セクションに天気アドバイスルールを追加します:

## Weather Advice Rules

天気データに基づいて対応するアドバイスを提供します:

- 気温 > 35°C:暑さ対策と水分補給を呼びかけます
- 気温 < 0°C:防寒対策と路面凍結への注意を促します
- 湿度 > 80%:蒸し暑く感じる可能性があります
- 天気の説明に「雨」を含む:傘の携帯を推奨します
- 天気の説明に「雪」を含む:外出時の安全に注意を促します
- 風速 > 10 m/s:防風対策への注意を促します
- UV指数 > 6:日焼け止めの使用を推奨します

あいまい検索のサポート

トリガー条件により多くの自然言語パターンを追加します:

triggers:
  - 天気
  - 傘を持っていくべきか
  - 何を着ればいいか
  - 雨が降るか
  - 寒いか
  - 暑いか

ステップ6:多言語サポートの追加

ユーザーの言語に応じて出力を自動的に切り替えるようにします:

SKILL.md に以下を追加します:

## Multilingual Support

- ユーザーのメッセージの言語を検出します
- ユーザーが中国語で質問した場合、中国語で回答します
- ユーザーが英語で質問した場合、英語で回答します
- API 呼び出し時に対応する `lang` パラメータを使用します:
  - 中国語:`lang=zh_cn`
  - 英語:`lang=en`
  - 日本語:`lang=ja`

完成後のファイル一覧

開発完了後、プロジェクト構成は以下のようになります:

~/.openclaw/skills/
└── weather.SKILL.md       # スキル定義ファイル

~/.config/openclaw/
└── openclaw.json5          # MCP 天気ツール設定を含む

ClawHub への公開

このスキルに満足した場合は、ClawHub スキルマーケットプレイスに公開できます:

# 公開用ディレクトリを作成
mkdir ~/weather-skill && cd ~/weather-skill

# スキルファイルをコピー
cp ~/.openclaw/skills/weather.SKILL.md ./SKILL.md

# メタデータを作成
cat > clawhub.json << 'EOF'
{
  "name": "weather-forecast-cn",
  "version": "1.0.0",
  "description": "中英文天気予報スキル、世界中の都市に対応",
  "author": "your-username",
  "license": "MIT",
  "keywords": ["weather", "forecast", "天気"],
  "category": "情報検索"
}
EOF

# 検証と公開
npx clawhub@latest validate
npx clawhub@latest publish

よくある質問

API呼び出しが失敗する

API キーが正しく設定されているか確認してください:

# API キーのテスト
curl "https://api.openweathermap.org/data/2.5/weather?q=Beijing&appid=YOUR_KEY"

スキルがトリガーされない

  1. トリガーワードリストにユーザーメッセージのキーワードが含まれているか確認してください
  2. 他のスキルのトリガーワードと競合していないか確認してください
  3. デバッグログでマッチングの詳細を確認してください

出力フォーマットが理想的でない

SKILL.md の出力フォーマットは AI への指示であり、テンプレートではないため、AI は意味を理解しますが完全にはそのまま従わない場合があります。フォーマットの説明をより具体的にするか、出力例を追加してください。

まとめ

本チュートリアルを通じて、完全な天気予報 Skill の開発を完了しました。重要なポイントには、SKILL.md の構造化された記述、MCP ツールの設定と呼び出し、トリガー条件の設計、出力フォーマットの最適化が含まれます。これらの知識は、他のあらゆるタイプの Skill 開発にも応用できます。

OpenClawは無料のオープンソースAIアシスタント。WhatsApp、Telegram、Discordなど多数のプラットフォームに対応