はじめに
タイマーリマインダーは、個人用 AI アシスタントの最も実用的な機能の一つです。チャットウィンドウで「明日の朝9時に会議があることを教えて」と気軽に言うだけで、時間になったら通知を受け取れる——それがまさに本チュートリアルで実現する Skill です。
本チュートリアルでは、自然言語による時間解析、定期リマインダー、永続化ストレージに対応した、完全な機能を持つタイマーリマインダー Skill の開発を案内します。
機能企画
リマインダー Skill に必要な機能は以下の通りです:
| 機能 | 説明 | 優先度 |
|---|---|---|
| リマインダー設定 | 自然言語で一回限りのリマインダーを設定 | 必須 |
| 定期リマインダー | 毎日、毎週、毎月繰り返すリマインダー | 必須 |
| リマインダー確認 | トリガー待ちのすべてのリマインダーを一覧表示 | 必須 |
| リマインダー削除 | 指定したリマインダーをキャンセル | 必須 |
| 永続化 | 再起動後もリマインダーが失われない | 必須 |
| マルチチャンネルプッシュ | リマインダー設定元のチャンネルに通知をプッシュ | 推奨 |
MCP ツールの設定
リマインダー機能にはファイルの読み書きとタイマースケジューリングの機能が必要です。~/.config/openclaw/openclaw.json5 で MCP ツールを設定します:
{
mcp: {
servers: {
"filesystem": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-filesystem",
"--allow-read", "--allow-write",
"~/.openclaw/data/reminders/"],
},
"scheduler": {
command: "npx",
args: ["-y", "@openclaw-mcp/scheduler"],
}
}
}
}
リマインダーデータディレクトリを作成します:
mkdir -p ~/.openclaw/data/reminders/
SKILL.md の作成
~/.openclaw/skills/ ディレクトリに reminder.SKILL.md を作成します:
---
name: reminder
version: 1.0.0
description: タイマーリマインダースキル。自然言語によるリマインダー設定、定期タスク、永続化ストレージに対応
triggers:
- リマインダー
- remind
- アラーム
- alarm
- タイマー
- やること
- 忘れないで
- その時になったら
mcp_tools:
- filesystem
- scheduler
---
# タイマーリマインダースキル
## Description
タイマーリマインダースキルです。ユーザーが自然言語でリマインダー事項を設定・管理できるようにします。
リマインダーの期限が来たら、ユーザーがいるチャンネルに自動的に通知を送信します。
## Core Behavior
### リマインダーの設定
ユーザーがリマインダーを設定したい場合:
1. **時間の解析**:ユーザーのメッセージから時間情報を抽出します。以下のフォーマットに対応:
- 絶対時間:「明日の朝9時」、「3月15日の午後3時」、「2026-03-20 14:00」
- 相対時間:「5分後」、「1時間後」、「3日後」
- 自然言語:「今日の夜」、「今週の金曜日」、「来週月曜の午前」
2. **内容の抽出**:リマインダーの内容、つまりユーザーが何について通知してほしいかを特定します。
3. **情報の確認**:リマインダーの時間と内容をユーザーに確認します。
4. **リマインダーの保存**:filesystem ツールを使用してリマインダーを
`~/.openclaw/data/reminders/reminders.json` に保存します。
5. **スケジュールの登録**:scheduler ツールを使用してタイマータスクを登録します。
### リマインダーの確認
ユーザーがリマインダー一覧を確認したい場合、reminders.json を読み取り、時間順に並べて表示します。
### リマインダーの削除
ユーザーがリマインダーをキャンセルしたい場合、番号または内容のマッチングでリマインダーを見つけて削除します。
### リマインダーのトリガー
リマインダーの時間が到来すると、scheduler が OpenClaw にコールバックし、対応するチャンネルにリマインダーメッセージを送信します。
## Data Schema
リマインダーデータは JSON フォーマットで保存されます:
```json
{
"reminders": [
{
"id": "rem_20260328_001",
"content": "午後の製品会議に参加",
"triggerTime": "2026-03-28T14:00:00+08:00",
"repeat": null,
"channelType": "telegram",
"channelId": "12345678",
"userId": "user_001",
"createdAt": "2026-03-28T09:00:00+08:00",
"status": "pending"
}
]
}
フィールドの説明
| フィールド | 型 | 説明 |
|---|---|---|
| id | string | 一意の識別子、フォーマット rem_YYYYMMDD_NNN |
| content | string | リマインダーの内容 |
| triggerTime | string | トリガー時間、ISO 8601 フォーマット |
| repeat | object/null | 繰り返しルール(下記参照) |
| channelType | string | 送信元チャンネルの種類 |
| channelId | string | 送信元チャンネル/ユーザー ID |
| userId | string | リマインダーを設定したユーザー |
| createdAt | string | 作成時間 |
| status | string | 状態:pending/triggered/cancelled |
繰り返しルール
{
"repeat": {
"type": "daily",
"interval": 1,
"endDate": "2026-12-31T23:59:59+08:00"
}
}
type の選択肢:
daily:毎日繰り返しweekly:毎週繰り返し(曜日指定可能)monthly:毎月繰り返し(日付指定可能)cron:カスタム cron 式
Output Format
リマインダー設定成功
✅ リマインダーを設定しました!
📋 内容:{リマインダー内容}
⏰ 時間:{YYYY年MM月DD日 HH:mm}
🔁 繰り返し:{繰り返しルール、なしの場合は「一回限り」}
🆔 番号:{ID}
時間になったらこちらでお知らせします。
リマインダー一覧
📝 あなたのリマインダー一覧:
1. ⏰ {時間1} - {内容1} [番号: {ID1}]
2. ⏰ {時間2} - {内容2} [番号: {ID2}]
3. 🔁 {時間3} - {内容3}(毎日繰り返し)[番号: {ID3}]
全 {N} 件のトリガー待ちリマインダーがあります。
「リマインダーをキャンセル {番号}」と入力すると指定したリマインダーを削除できます。
リマインダー通知
🔔 リマインダーの時間です!
📋 {リマインダー内容}
⏰ 現在時刻:{HH:mm}
---
これは {設定時間} に設定されたリマインダーです。
リマインダー削除成功
❌ リマインダーをキャンセルしました:{リマインダー内容}
Error Handling
- 時間を解析できない場合、より明確な表現でもう一度入力するようユーザーに依頼します
- 時間が過去の場合、設定した時間がすでに過ぎていることをユーザーに通知します
- reminders.json が存在しない場合、自動的に空のファイルを作成します
- scheduler が利用できない場合、リマインダー機能が一時的に利用できないことをユーザーに通知します
Example Interactions
ユーザー:明日の朝8時にコーヒーを買うことを教えて アシスタント:✅ リマインダーを設定しました! 📋 内容:コーヒーを買う ⏰ 時間:2026年03月29日 08:00 🔁 繰り返し:一回限り 🆔 番号:rem_20260328_001
ユーザー:毎週金曜の午後5時に週報を書くことを教えて アシスタント:✅ リマインダーを設定しました! 📋 内容:週報を書く ⏰ 時間:毎週金曜 17:00(次回:2026年03月28日) 🔁 繰り返し:毎週金曜 🆔 番号:rem_20260328_002
ユーザー:リマインダーの一覧を見せて アシスタント:📝 あなたのリマインダー一覧: 1. ⏰ 03/29 08:00 - コーヒーを買う [番号: rem_20260328_001] 2. 🔁 毎週金曜 17:00 - 週報を書く [番号: rem_20260328_002] 全 2 件のトリガー待ちリマインダーがあります。
ユーザー:コーヒーを買うリマインダーをキャンセルして アシスタント:❌ リマインダーをキャンセルしました:コーヒーを買う
## 永続化メカニズム
### ストレージ戦略
リマインダーデータは `~/.openclaw/data/reminders/reminders.json` に保存されます。操作(追加・削除・変更)のたびに即座にファイルに書き込みます。
### 再起動後の復元
OpenClaw の再起動後、reminder スキルは以下を行う必要があります:
1. reminders.json 内の status が `pending` のすべてのリマインダーを読み取る
2. scheduler に再登録する
3. 期限切れだがトリガーされていないリマインダーをクリーンアップする(`missed` としてマーク、次回のユーザーインタラクション時に通知)
## タイムゾーン処理
時間の解析と保存にはタイムゾーンを考慮する必要があります:
```markdown
## Timezone Rules
- デフォルトではユーザーのチャンネル設定のタイムゾーンを使用
- タイムゾーンが設定されていない場合、デフォルトで Asia/Shanghai (UTC+8) を使用
- すべての保存時間は ISO 8601 タイムゾーン付きフォーマットを使用
- 表示時間はユーザーのローカルタイムゾーンを使用
テストチェックリスト
開発完了後、以下のチェックリストに従ってテストします:
# 1. スキルをロードするために再起動
openclaw restart
# 2. スキルのロードを確認
openclaw skill list
次にチャットで順番にテストします:
- [ ] 1分後のリマインダーを設定し、時間通りにトリガーされるか検証
- [ ] 絶対時間のリマインダーを設定
- [ ] 定期リマインダーを設定
- [ ] リマインダー一覧を確認
- [ ] リマインダーを1つ削除
- [ ] OpenClaw を再起動後、リマインダーが復元されるか確認
まとめ
タイマーリマインダー Skill は総合的なプロジェクトであり、自然言語による時間解析、データの永続化、タイマースケジューリング、マルチチャンネルプッシュなど多くの技術ポイントが関わります。この Skill の開発手法を習得すれば、より複雑な自動化ワークフロースキルの開発が可能になります。