AIワークフロー

PowerShell + Claudeで日次タスクを自動レポート化

公開: 2026-05-19 · 著者: Sasaki Ryuji

20以上のWindowsタスクの結果を毎朝Claude要約で受け取る

PowerShell + Claudeで日次タスクを自動レポート化

Windowsタスクスケジューラに 20個以上のジョブを登録すると、毎朝の結果確認 (どれが成功した? どれが失敗した?) に意外と時間がかかります。私の運用では ai-pick 系で 10以上、ParallelIncome 系で 5、GramShift 関連で 3、バックアップ系で 2、合計約20タスクが毎日動いています。これを PowerShell で集計し、Claude API で自然言語要約に変換し、Discord に毎朝1通だけ通知する仕組みで、運用工数を「朝1分」に削減しました。実装の全構成を共有します。

全体構成

このシステムは3つのコンポーネントで構成されます。第一に PowerShell スクリプトで Get-ScheduledTaskInfo を実行して結果を JSON 化、第二に Node.js で Claude API を叩いて要約、第三に Discord webhook で通知。すべて Windowsタスクで毎朝 7:00 に自動実行されます。

PowerShell スクリプト (結果収集)

タスクスケジューラの全タスクを取得し、JSON ファイルに書き出す部分です。フィルタはタスク名のプレフィックスで絞り込みます。

# scripts/collect-tasks.ps1
$tasks = Get-ScheduledTask | Where-Object {
 $_.TaskName -match "^(AiPick|ParallelIncome|GramShift|Backup_Daily)"
}

$result = $tasks | ForEach-Object {
 $info = Get-ScheduledTaskInfo $_
 [PSCustomObject]@{
 TaskName = $_.TaskName
 State = $_.State.ToString()
 LastRun = $info.LastRunTime.ToString('yyyy-MM-dd HH:mm:ss')
 Result = $info.LastTaskResult
 NextRun = $info.NextRunTime.ToString('yyyy-MM-dd HH:mm:ss')
 }
}

$result | ConvertTo-Json -Depth 3 | Out-File 'task-results.json' -Encoding utf8
Write-Output "Collected $($result.Count) tasks"

このスクリプトを実行すると、task-results.json にすべての対象タスクの実行結果が JSON 配列で保存されます。LastTaskResult は整数で、0 が成功、それ以外がエラーコードです (例: 267011 = 未実行、9009 = コマンド不明、267014 = ユーザー終了)。

Claude API で要約生成 (Node.js)

収集したJSONを Claude Haiku に渡して、人間が読みやすい朝のサマリーに変換します。エラーコードの意味も Claude が文脈で説明してくれるので、初心者でも理解できる形式になります。

// scripts/summarize-tasks.mjs
import Anthropic from '@anthropic-ai/sdk';
import { readFile } from 'node:fs/promises';
import { notify } from './discord-notify.mjs';

const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
const tasks = JSON.parse(await readFile('task-results.json', 'utf8'));

const summary = await client.messages.create({
 model: 'claude-haiku-4-5',
 max_tokens: 1500,
 messages: [{
 role: 'user',
 content: `以下のWindowsタスク実行結果を日本語で要約してください。\n` +
 `形式: 「成功: X件、警告: Y件、失敗: Z件」+ 失敗・警告したタスクの詳細 (タスク名と理由)。\n` +
 `結果コードの意味も補足してください (0=成功、267011=未実行、9009=コマンド不明、267014=異常終了)。\n\n` +
 JSON.stringify(tasks, null, 2)
 }]
});

const text = summary.content[0].text;
await notify('info', '🌅 朝のタスクサマリー', { summary: text, total: tasks.length });
console.log('Sent summary:', text.length, 'chars');

この出力はだいたい以下のような形式になります。

🌅 朝のタスクサマリー (20件)

成功: 18件、警告: 1件、失敗: 1件

⚠️ 警告 (1件)
- ParallelIncome_W2_note: 結果267011 (未実行)、本日12:10の初回実行待ち

🚨 失敗 (1件)
- AiPick_Article_Evening: 結果3221226505 (プロセス強制終了)、
 前日18:00実行時にハング、本日18:30再実行で再確認が必要

Windowsタスクへの登録

毎朝 7:00 に自動実行するため、PowerShell + Node.js を順に実行する .bat ファイルを作り、Windowsタスクに登録します。

@echo off
rem scripts/daily-report.bat — CRLF改行で保存
cd /d %~dp0
powershell.exe -ExecutionPolicy Bypass -File collect-tasks.ps1 > logs/collect.log 2>&1
node scripts/summarize-tasks.mjs > logs/summarize.log 2>&1

このバッチをWindowsタスクで毎朝 7:00 に自動実行します。登録コマンドはこうです。

$action = New-ScheduledTaskAction \
 -Execute 'cmd.exe' \
 -Argument '/c C:\AI_WORK\daily-report\daily-report.bat' \
 -WorkingDirectory 'C:\AI_WORK\daily-report'

$trigger = New-ScheduledTaskTrigger -Daily -At 7:00
Register-ScheduledTask -TaskName 'Daily_Report' -Action $action -Trigger $trigger

コスト試算

このシステムの月次運用コストは、Claude Haiku 4.5 のAPI料金のみです。1回の要約は約 1,500-2,500 入力トークン + 500-800 出力トークン = 約 0.3-0.5円。毎日1回 × 30日 = 月 10-15円。Discord webhook も Windowsタスクも無料、合計月 15円程度です。

運用してみての所感

このシステムの最大の効果は「朝の確認時間が10分→1分に短縮」したことです。Discord に届く1通の要約を見るだけで、すべてのタスクの健康状態が把握できる。失敗があれば該当タスクの詳細を確認するだけ。朝のルーチンが格段に軽くなり、本業時間に余裕が生まれます。

Discord 通知基盤の作り方は Discord webhookでエラー通知基盤を作る最短コース、Windowsタスクのハマりどころは Windowsタスクスケジューラ + Node.js でnoteに自動投稿する手順 を参照してください。