スケジュールタスク
Elftia のスケジュールタスクシステム(Cron)を使うと、繰り返し行う作業をスケジュールに従って自動実行できます。デスクトップ通知によるリマインダーと AI Agent タスク実行という 2 種類のアクションタイプに対応しており、実行結果を Channel メッセージングプラットフォームへプッシュすることもできます。
ユースケース
- 毎朝 9 時に AI で最新の技術ニュースを要約する
- 30 分ごとに API のステータスを確認して通知する
- 指定した時刻にワンタイムリマインダーを送信する
- AI Agent に定期的にデータ分析を実行させ、その結果を Discord や Telegram にプッシュする
- 毎週月曜日の朝に、その週の作業計画を自動生成する
スケジュールタスクの作成
手順
- Cron 管理ページを開く(サイドバーまたはナビゲーションメニューから)
- タスクを作成ボタンをクリックする
- タスク情報を入力する。
- タスク名 — タスクの内容がわかる名前を付ける
- 説明(任意)— タスクの目的を詳しく説明する
- スケジュールタイプ — 実行頻度を選択する(下記のスケジュールタイプを参照)
- アクションタイプ — 通知または Agent 実行を選択する
- メッセージ内容 — 通知テキストまたは Agent プロンプト
- (任意)Channel プッシュを設定する
- (任意)Agent タスクで使用する LLM プロバイダーとモデルを選択する
- 保存をクリックする
スケジュールタイプ
Elftia は、シンプルなものから複雑なタイミング要件まで対応できる 3 種類のスケジュール方式をサポートしています。
Cron 式
標準的な 5 フィールドの cron 式を使って、実行時刻を精密に制御します。
フォーマット: 分 時 日 月 曜日
| フィールド | 範囲 | 特殊文字 |
|---|---|---|
| 分 | 0-59 | * , - / |
| 時 | 0-23 | * , - / |
| 日 | 1-31 | * , - / |
| 月 | 1-12 | * , - / |
| 曜日 | 0-7(0 と 7 はどちらも日曜日) | * , - / |
よく使う例:
| 式 | 意味 |
|---|---|
0 9 * * * | 毎日午前 9:00 |
30 8 * * 1-5 | 平日の午前 8:30 |
0 */2 * * * | 2 時間ごとの正時 |
0 9 1 * * | 毎月 1 日の午前 9:00 |
0 9 * * 1 | 毎週月曜日の午前 9:00 |
*/15 * * * * | 15 分ごと |
0 9,18 * * * | 毎日午前 9:00 と午後 6:00 |
特殊文字リファレンス:
| 文字 | 説明 | 例 |
|---|---|---|
* | すべての値に一致 | * * * * * 毎分 |
, | 複数の値を列挙 | 0,30 * * * * 毎時 0 分と 30 分 |
- | 範囲 | 0 9-17 * * * 午前 9 時から午後 5 時まで毎正時 |
/ | ステップ | */10 * * * * 10 分ごと |
:::tip ビジュアルアシスト タスク作成時、インターフェースにはビジュアルなスケジュールモードセレクターが用意されており、毎日、平日、毎週、毎月、毎時などのプリセットを選択できます。cron 式を手書きする必要はありません。プリセットを選択すると、対応する cron 式が自動生成されます。 :::
インターバル実行(every)
固定間隔でタスクを繰り返します。
フォーマット: number + unit
| 単位 | 記号 | 例 |
|---|---|---|
| 秒 | s | 30s — 30 秒ごと |
| 分 | m | 5m — 5 分ごと |
| 時間 | h | 1h — 1 時間ごと |
| 日 | d | 3d — 3 日ごと |
動作メモ:
- インターバルは前回の実行が完了した時刻から計算されます
- アプリの再起動後、システムは最後に記録された実行時刻から計時を再開し、即時にはトリガーしません
ワンタイム実行(at)
指定した正確な時刻にタスクを 1 回だけ実行し、実行後は自動的に無効化されます。
フォーマット: ISO 8601 日時文字列
例: 2026-04-15T09:00:00
動作メモ:
- 指定時刻に到達した後、次のチェックサイクルでタスクが発火します(チェック間隔は 30 秒)
- 実行が完了すると、タスクは自動的に無効状態へ切り替わります
- 期限切れのワンタイムタスクはトリガーされません
アクションタイプ
通知(notify)
デスクトップのシステム通知を送信します。
- タスクが発火すると、タスク名とメッセージ内容を表示するデスクトップ通知がポップアップします
- システムがアプリからの通知送信を許可している必要があります
- Elftia の通知設定で有効または無効にできます
Agent 実行(agent)
AI Agent をトリガーして、指定したプロンプトタスクを実行します。
- タスクが発火すると、システムはメッセージ内容をプロンプトとして AI Agent に送信します
- Agent はプロンプト内の指示を実行し、レスポンスを生成します
- レスポンスは実行履歴に記録されます(先頭から最大 2,000 文字まで保存)
- タスクに Channel が設定されていない場合、実行結果はデスクトップ通知で表示されます(
notifyOnCompleteで制御)
LLM プロバイダーの設定
Agent タスクでは、使用する LLM プロバイダーとモデルを指定できます。
| 設定 | 説明 |
|---|---|
| プロバイダー(providerId) | タスクを実行する LLM プロバイダーを選択 |
| モデル(model) | 使用する具体的な AI モデルを選択 |
指定しない場合は、現在のデフォルトプロバイダーとモデルが使用されます。
Channel プッシュ
スケジュールタスクは、実行結果を外部メッセージングプラットフォーム(Discord、Telegram など)へプッシュできます。
設定手順
- タスクの作成または編集時に Channel プッシュを有効にする
- 対象の Channel を選択する(事前に Channel 管理で設定されている必要があります)
- 対象の Chat ID を入力する(Channel 内のグループ ID またはチャンネル ID)
- Agent の実行完了後、結果が指定した Channel に自動送信されます
動作メモ
- Channel が設定された Agent タスクでは、プロンプトに Channel 情報が含まれます
- Agent には、
channel_sendMCP ツールを使って対象 Channel へ結果を送信するよう指示されます - Channel が設定されていない Agent タスクはローカルでのみ実行され、結果はデスクトップ通知で表示されます
実行履歴
各タスクの実行履歴は自動的に記録されます。タスクごとに、直近のレコードが最大 200 件保持されます。
履歴レコードのフィールド
| フィールド | 説明 |
|---|---|
| タイムスタンプ | 実行が開始された時刻 |
| ステータス | ok(成功)または error(失敗) |
| 実行時間 | 実行にかかった時間(ミリ秒) |
| エラーメッセージ | 失敗した場合のエラー説明 |
| Agent レスポンス | Agent タスクの返信内容(最大 2,000 文字) |
履歴の確認
- Cron 管理ページでタスクをクリックする
- タスク詳細パネルを展開する
- 実行履歴タブを確認する
タスク管理
一時停止 / 再開
- タスクのトグルスイッチをクリックして、タスクを一時停止または再開します
- 一時停止中のタスクは、再度有効化されるまでトリガーされません
今すぐ実行
- タスクの今すぐ実行ボタンをクリックして、手動で 1 回実行します
- タスクの通常スケジュールには影響しません
- タスクがすでに実行中の場合、再度クリックしても並行実行は作成されません
編集
- タスクをクリックして編集モードに入ります
- 名前、説明、スケジュールタイプ、アクションタイプ、Channel 設定を変更できます
- 変更を保存すると、次回の実行時刻が自動的に再計算されます
削除
- タスクを削除すると、その実行履歴レコードも削除されます
- 削除は取り消せません
ステータスイベントのブロードキャスト
スケジュールタスクは、実行中にステータスイベントをフロントエンドへブロードキャストします。
| ステータス | 説明 |
|---|---|
running | タスク開始 |
success | タスクが正常に完了 |
error | タスク失敗 |
インターフェースはタスクのステータスインジケーターをリアルタイムで更新するため、バックグラウンドタスクの状態を一目で確認できます。
システム動作
| 動作 | 説明 |
|---|---|
| ポーリング間隔 | 5 秒ごとにタスク設定を再読み込み |
| チェック間隔 | 30 秒ごとにスケジュール時刻を確認 |
| Cron 重複排除 | 同じ cron タスクは同一分内に 1 回だけ発火 |
| 並行実行制御 | 同じタスクは並行実行されない |
| データ保存 | タスク設定は jobs.json に保存され、履歴レコードは runs/ ディレクトリに保存されます |
FAQ
| 問題 | 解決策 |
|---|---|
| タスクが時刻どおりに実行されない | タスクが有効になっていることと、スケジュール式が正しいことを確認してください |
| Cron 式が無効 | インターフェースのビジュアルスケジュールモードを使用するか、上記の式の例を参照してください |
| Agent タスクの実行に失敗する | LLM プロバイダーが正しく設定されており、API Key が有効であることを確認してください |
| Channel プッシュメッセージを受信できない | Channel が正しく設定されており、Chat ID が有効であることを確認してください |
| ワンタイムタスクがトリガーされない | 指定した時刻がまだ過ぎていないことを確認してください。時刻は ISO 形式である必要があります |
| 履歴レコードが切り詰められる | システムは自動的に直近 200 件のレコードを保持し、古いレコードを削除します |
| インターバルタスクがアプリ再起動直後にトリガーされる | 通常の状況では即時にはトリガーされません。システムは最後の実行時刻から計時を再開します |