1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Cowork でbot7本を並走させた話:設計と3つのハマり

1
Posted at

Claude Cowork を社内AXに使っている私の実践ログです。社内固有名・個人名は伏せています。

最初は1本だった。

毎朝Slackに翌日の予定を流すだけの、シンプルなやつ。「これ、毎日手でやるの無駄だな」と思って設定した。気づいたら3週間で7本になっていた。

今日は、その7本が何をやっていて、どこで詰まったかを書く。

現在走っているスケジュールタスク構成

まず全体像から。

タスク名 実行タイミング 役割
Slack calendar sync 毎朝8:00 Google Calendar → Slack通知
Slack daily digest 毎朝8:30 前日Slackサマリ生成・投稿
Trend research morning 毎朝9:00 Qiitaトレンド調査+記事ネタBrief生成
N gen task reminder 毎日9:30 タスク管理チャンネルのリマインド
Schedule push daily 毎日17:00 翌日スケジュール最終確認push
N gen channel watcher 毎日07:00 Slackチャンネルの増減を監視
qiita-daily-post 毎日21:00 Qiita記事生成・投稿

qiita-daily-postは、Trend researchのBriefを読み込んで、その日の活動ログと組み合わせて記事を組み立てる。7本の中で一番複雑なタスクだ。

なぜ7本に増えたか

正直、計画的ではなかった。

最初のSlack calendar syncを入れたとき、「あ、毎日やってる定型作業ってほかにも全部これで代替できるんじゃ?」という気持ちになって、一気に設定した。一気にやったのが失敗の始まりだったけど——それは後で書く。

私が重視したのは「毎日20分以上かかっている繰り返し作業」を洗い出すこと。

洗い出してみると:

  • 朝、Googleカレンダーを開いてSlackに貼る(5分)
  • 昨日のSlackを流し読みしてサマリをメンバーに送る(15分)
  • Qiitaトレンドをチェックして記事ネタを考える(20分)
  • タスク管理チャンネルを確認してリマインド(10分)
  • 夕方に翌日の確認push(5分)

合計で1日60〜70分。これを全部スケジュールタスクに移した。

7つのハマりポイント

①セッションIDが溢れる問題

list_sessions で「本日のセッション」を取得しようとすると、過去に実行したスケジュールタスクのセッションが大量に積み上がっていて、デフォルトのlimit:20では当日分が見つからないことがある。

最初のqiita-daily-postでこれに詰まった。「今日やったこと」を拾いにいったら、昨日・一昨日のSlack syncセッションばかりが並んでいて、当日分が見えない。limitを増やすと今度はレスポンスが重い。

私が落とし込んだ解決策は「セッション名でフィルタする」こと。自動タスク由来(Slack syncなど)はノイズとして除外する判断を最初から組み込むべきだった。

結局、スケジュールタスクの名前は最初からユニークかつ判別しやすくつけること。これ地味に重要。

②同じ出力先への書き込み競合

7本が全部 outputs/ に書き込む設計にしていたら、ファイル名の衝突が起きた。

Trend research morningがBriefファイルを書き込んでいる最中に、qiita-daily-postが同じファイルをReadしようとして、中途半端な状態を読んでしまった。

これ、めっちゃ詰まった。「なんでBriefが途中で切れてるんだろう」って30分くらい悩んだ。

解決は単純で、タスクごとにサブディレクトリを切る設計に変えた。outputs/qiita-post/outputs/trend-research/ みたいに分ける。気づくのに時間がかかった——シンプルなことなのに。

③「ユーザー不在」での判断設計

スケジュールタスクはユーザーが見ていない状態で動く。

通常のCoworkセッションは「迷ったら聞く」ができるけど、スケジュールタスクではClaudeが自律判断しなければいけない。具体的には「守秘判断」で、「これ、業界が特定されそうだな」という判断をClaudeに委ねなければいけない場面がある。

だからSKILL.mdに「判断に迷ったら draft 降格」というルールを明示的に書いている。単純に見えて、実際にはスケジュールタスクのリスク管理の核心だと思っている。

タスクに「曖昧なケースの裁量をどこまで与えるか」を設計段階で決めておかないと、あとで「なんで勝手にこうしたの?」になる。

④タスク間の依存関係の設計ミス

「Trend researchのBriefをqiita-daily-postが読む」という依存関係を作ったのに、Trend researchが9:00実行、qiita-daily-postが21:00実行で時間差がある。Briefが前日のままになるケースが発生した。

1日以内のファイルかどうかを確認するロジックをqiita-daily-postに組み込んで解決したが、タスク間の依存関係は事前にフローチャートで整理すべきだった。いや、ほんとに。

⑤ToolSearchのオーバーヘッドが7本分積む

各タスクが独立してToolSearchでツールロードをやる。Slackのメッセージ送信ツールなど同じものを複数タスクが個別にロードしていて、ちょっともったいない。現状は許容しているが、将来的に共通ツールの事前ロードを仕組み化したいと思っている。

⑥セッション読み取りが自己参照になる

qiita-daily-postが「今日の活動を読む」ためにlist_sessionsを叩くと、自分自身のセッション(まさに今動いているこのセッション)も候補に入ってくる。

最初これに気づかず、「自分のセッションをReadしようとして、実行中でタイムアウト待ちが発生する」という状態になった。自分のセッションIDを除外する処理を入れることで解決。ただ、こういう構造に気づいたとき、「Claudeをツールとして使って動かしている仕組みの面白さ」みたいなものを感じる。

⑦一度に全部設定しすぎた

これが一番の反省。正直しんどかった。

最初の1本を検証せずに7本を一気に設定したので、問題が複数箇所に同時に現れてデバッグが大変だった。スケジュールタスクは「動いているかどうか」の確認が通常の開発より難しいので、段階的な導入が特に重要だと学んだ。1本ずつ動作確認→次に進む、というシンプルな原則を守ればよかった。

コピペで使えるSKILL.md リスク管理セクション

# ⚠️ ユーザー不在時の判断規則

## 判断の優先順位
1. このタスクファイルに明示された規則に従う
2. 規則に記載のないケースは「安全側」を選ぶ
3. 複数の行動が考えられる場合、最もリスクの低いものを選ぶ

## 強制 draft 降格条件(どれか1つでも該当したら publish → draft に変更)
- 守秘対象の固有名詞がマスキングしきれない場合
- 想定字数が最低字数を大幅に下回る場合
- 外部APIが500/429を返し、リトライ上限に達した場合

## write 系操作の制限
- MCP tool で「送信」「投稿」「削除」を伴う操作はタスクファイルで明示的に許可された場合のみ
- 迷ったら report のみ出力して終了する

私の判断:スケジュールタスクは「委任の設計書」

一言でまとめると、スケジュールタスクのSKILL.mdは「Claudeへの委任状」だと思っている。

普通のコードと違うのは、ユーザー不在での自律判断を前提に書かなきゃいけないこと。「こういう場合はこうしろ」「迷ったらこっちを選べ」という判断木を文章で書く設計が求められる。

私はこれが結構好きで、「何をClaudeに判断させて、何は人間が決めるか」を明確にする作業として位置づけている。委任範囲が曖昧だとタスクが暴走するか、逆に何もしなくなる。コードで言えばインターフェース設計に近い感覚。

賛否あると思うが、私は「Claudeに判断を委ねる範囲を広くしていく方向」で運用している。理由は、毎回人間が確認しなければいけないタスクは「自動化」とは呼べないから。ただ、その分SKILL.mdの設計にかけるコストは惜しまない。

まとめ

  • 毎日の繰り返し作業を洗い出してスケジュールタスク化は確実に効く(1日60分以上の削減実績あり)
  • セッション名・出力先ディレクトリ・タスク間依存関係は設計段階で整理する
  • 「ユーザー不在での判断規則」をSKILL.mdに明示することがリスク管理の核心
  • 1本ずつ検証しながら増やす——一気に7本は無謀だった
  • ハマりポイントの大半は「複数タスクが同一環境で動く前提」での設計の甘さ

みなさんはClaudeのスケジュールタスク、どんな用途で使っていますか? 「この定型作業を自動化した」「こうするともっとよい」という事例・意見があればぜひコメントで教えてください。


Claude Cowork を社内AXの相棒として毎日使っているエンジニアの実践ログです。

私が日中見ている事業は「N限(Ngen)インターン」── 新卒の実務試験型(ワークサンプル型)インターンを企業に提供しています。AI時代の新卒採用に関心がある方は、下記からどうぞ。

シリーズ: Claude Cowork で社内AXを回す

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?