mcpField
S
schedule-task

schedule-task

github.com/winsorllcクラウド・DevOps076 回インストール35 週間前に更新
リポジトリ

schedule-task について

定期的な cron タスクや、遅延後または指定時刻に実行する単発タスクを作成・管理するスキルです。タスクはバックグラウンドで動作し、出力はログに記録されるため、メッセージ送信や対話型の処理ではなく自動化に向いています。

主な機能

  1. 01定期 cron タスクの作成
  2. 02単発タスクのスケジュール
  3. 03タスク状態の確認と管理
  4. 04タスクの一時停止・再開・取消
  5. 05出力のログ記録とエラー処理

活用シーン

  1. 01定期的なファイル整理
  2. 02データ処理の定期実行
  3. 03バックアップの自動化
  4. 04メンテナンスコマンドの予約

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/winsorllc/upgraded-carnival --skill schedule-task

インストール後、Claude Code で/schedule-taskを入力して読み込まれたか確認します。

詳細

スケジュールタスクスキル

cron 式を使用して、シェルのみで実行するタスクを作成・管理します。タスクはバックグラウンドで実行され、出力はログにのみ記録されます。

使用するタイミング

✅ このスキルを使用する場合:

  • 定期的なクリーンアップジョブ
  • 定期的なデータ処理
  • 自動バックアップ
  • スケジュールされたメンテナンス

❌ このスキルを使用しない場合:

  • チャンネルへのメッセージ送信 → cron agent を使用してください
  • ユーザーとのやり取りが必要なタスク
  • 複雑なワークフロー(SOP runner を使用してください)

⚠️ 警告

シェルタスクの出力はログに記録されるのみで、チャンネルには配信されません。スケジュールされたメッセージには、job_type='agent' と配信設定を指定して cron_add を使用してください。

使用方法

繰り返しタスクの作成
const { schedule } = require('/job/.pi/skills/schedule-task/scheduler.js');

const task = await schedule('create', {
  expression: '0 2 * * *', // Daily at 2 AM
  command: 'node cleanup.js --older-than 7d',
  name: 'Daily cleanup',
  approved: true // Required for medium/high risk
});

console.log(task.id); // sched_abc123
1 回限りのタスクの作成
// Run in 30 minutes
const once = await schedule('once', {
  delay: '30m',
  command: 'echo "Delayed task"'
});

// Run at specific time
const scheduled = await schedule('once', {
  runAt: '2026-02-26T09:00:00Z',
  command: 'node report.js'
});
タスクの一覧表示
const tasks = await schedule('list');
console.log(tasks);
// [
//   { id: "sched_abc", expression: "0 2 * * *", command: "...", enabled: true },
//   ...
// ]
タスクの詳細を取得
const task = await schedule('get', { id: 'sched_abc123' });
console.log(task);
// {
//   id: "sched_abc123",
//   expression: "0 2 * * *",
//   command: "node cleanup.js",
//   enabled: true,
//   lastRun: "2026-02-25T02:00:00Z",
//   nextRun: "2026-02-26T02:00:00Z",
//   status: "scheduled"
// }
タスクのキャンセル/削除
await schedule('cancel', { id: 'sched_abc123' });
// or
await schedule('remove', { id: 'sched_abc123' });
タスクの一時停止/再開
await schedule('pause', { id: 'sched_abc123' });
await schedule('resume', { id: 'sched_abc123' });

Cron 式

*    *    *    *    *
┬    ┬    ┬    ┬    ┬
│    │    │    │    │
│    │    │    │    └─ Day of week (0-7, 0=Sunday)
│    │    │    └────── Month (1-12)
│    │    └─────────── Day of month (1-31)
│    └──────────────── Hour (0-23)
└───────────────────── Minute (0-59)
例
// Every 5 minutes
'*/5 * * * *'

// Every hour at 30 minutes past
'30 * * * *'

// Every day at 2:30 AM
'30 2 * * *'

// Every Monday at 9 AM
'0 9 * * 1'

// First day of month
'0 0 1 * *'

// Weekdays at noon
'0 12 * * 1-5'

// Complex: Every 15 min, 9 AM - 5 PM, weekdays
'*/15 9-17 * * 1-5'

遅延の形式

// Minutes
'30m'  // 30 minutes

// Hours
'2h'   // 2 hours
'24h'  // 24 hours

// Days
'1d'   // 1 day
'7d'   // 7 days

// Combined
'1h30m'  // 1 hour 30 minutes
'2d12h'  // 2 days 12 hours

API

schedule(action, options = {})

アクション: create、add、once、list、get、cancel、remove、pause、resume

オプション:

  • create/add の場合:expression、command、name、approved
  • once の場合:delay または runAt、command
  • get/cancel/remove/pause/resume の場合:id

戻り値:

// create/add/once
{ id: "sched_abc123", status: "scheduled" }

// list
[{ id, expression, command, enabled, lastRun, nextRun }]

// get
{ id, expression, command, enabled, lastRun, nextRun, status }

タスクの出力

すべてのタスク出力はログに記録されます。

/job/logs/schedule/sched_abc123.log

[2026-02-25T02:00:00Z] Starting task: Daily cleanup
[2026-02-25T02:00:05Z] Cleaning 142 files...
[2026-02-25T02:00:10Z] Task completed (exit code: 0)

エラー処理

try {
  await schedule('create', {
    expression: 'invalid',
    command: 'echo test'
  });
} catch (error) {
  if (error.code === 'INVALID_CRON') {
    console.error('Invalid cron expression');
  } else if (error.code === 'APPROVAL_REQUIRED') {
    console.error('Command requires approval');
  } else if (error.code === 'DUPLICATE') {
    console.error('Task already exists');
  }
}

Bash CLI

# Create task
node /job/.pi/skills/schedule-task/scheduler.js \
  --action create \
  --expression "0 2 * * *" \
  --command "node cleanup.js" \
  --name "Daily cleanup"

# List tasks
node /job/.pi/skills/schedule-task/scheduler.js --action list

# Cancel task
node /job/.pi/skills/schedule-task/scheduler.js \
  --action cancel \
  --id sched_abc123

セキュリティ

  • 自律性レベルのチェック
  • 中~高リスクの場合のコマンド承認
  • スケジュール設定のレート制限
  • シェルインジェクションの防止
  • サンドボックスでの実行(任意)

ベストプラクティス

  1. スケジュールを設定する前に、コマンドを手動でテストします
  2. スクリプトで具体的なエラー処理を行います
  3. デバッグ用にファイルへログを記録します
  4. タスクの失敗を監視する仕組みを設定します
  5. 名前や説明にタスクの目的を記載します
  6. 一時的に無効にする場合は、削除ではなく一時停止を使用します

コメント