3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

8つの外部ツールを束ねるClaude Code「AI秘書」の設計と実装 — MCP・CLI・サブエージェント並列実行の全体像

3
Last updated at Posted at 2026-03-27

はじめに

  • Claude Codeのスキル機能で、8つの外部ツールを統合した「AI秘書」を運用しています
  • 「今日やることある?」と聞くだけで、カレンダー・Slack・メール・Backlog・Discord・X・スプレッドシート・案件サイトを一括収集してブリーフィングを出力します
  • 4つのサブエージェントを並列実行して高速化。フォールバック設計で外部ツールが落ちても止まりません
  • この記事では設計判断と実装の全体像を共有します
  • 非エンジニアでも再現できます。スクリプトもスキル定義もClaude Codeが作ってくれるので、コーディングやコマンド操作のスキルは不要です。仕組みの理解だけあれば大丈夫です

この記事は「AI秘書スキル」シリーズの第2弾です。前回はコンセプトと基本設計を書きました。今回は本格運用して見えた「8ツール統合 × 並列実行」のアーキテクチャ編です。

きっかけ — 個別ツール確認は手動と変わらなかった

AIで情報収集できること自体は知っていましたし、実験的にやってみたこともありました。

「Slackの未読を確認して」「メールの要返信をリストアップして」——こんなふうに1つずつ指示を出して、結果を見て、次のツールへ。

やってみて気づきました。これ、目視確認とほぼ変わらない

ブラウザのタブを切り替えるか、Claude Codeに指示を出すかの違いだけで、作業の構造は同じでした。1つずつ確認して、頭の中で優先順位を組み立てて、TODO化する。その手間は減っていません。

転機は「1つ上の概念」で考えたことです。個別のツール確認ではなく、「秘書」というロールを丸ごとスキルに落とし込む。全コミュニケーションツールをつなげて、情報収集を一括処理、ブリーフィングとして一元管理する。

これがめちゃくちゃ実用的でした。

今では /secretary というコマンドだけでなく、「今日やることある?」「今やることある?」みたいな自然な問いかけでもスキルが発動します。Claude Codeのスキルはdescriptionに書いたキーワードで自動トリガーされるので、コマンドを覚える必要すらありません。

全体アーキテクチャ

連携ツールは8つ。接続方式は3パターンあります。

ツール 接続方式 何を取得するか
Google Calendar Anthropicマネージド MCP 今日・明日のスケジュール
Slack MCP 全チャンネル横断メンション + 重要チャンネル
Backlog MCP 未完了タスク・期限近いチケット
Discord MCP Claude公式サーバーのAI最新情報
メール 自作POP3スクリプト 要返信メール・採用候補者
X (Twitter) xurl CLI フォロワー推移・AIトレンド
Google Sheets gog CLI QA質問表・業務管理表の操作
外部Webサイト Playwright MCP サイト情報の取得・自動評価

4エージェント並列実行の設計

なぜ並列か

8つのツールを逐次取得すると遅い。待ち時間の間に他も取れるはずです。

Claude Codeのサブエージェント機能を使うと、4つのエージェントを同時に走らせてデータ収集を並列化できます。

SKILL.md(親)
  ├── sec-cal-backlog     ── Calendar + Backlog
  ├── sec-slack-qa        ── Slack + QA質問表
  ├── sec-mail-web        ── メール + Web情報収集
  └── sec-discord-x       ── Discord + X
       ↓ 全エージェント完了
  統合ブリーフィング出力

サブエージェント定義

各エージェントは ~/.claude/agents/secretary-*.md に定義します。例として secretary-calendar-backlog.md の構造:

---
name: secretary-calendar-backlog
description: "秘書ブリーフィング: Google Calendar + Backlog データ収集エージェント"
---

# Calendar + Backlog 収集エージェント

## 実行手順

### 1. Google Calendar
mcp__claude_ai_Google_Calendar__gcal_list_events(
  timeMin="YYYY-MM-DDT00:00:00",
  timeMax="YYYY-MM-DD+1T23:59:59",
  timeZone="Asia/Tokyo"
)

### 2. Backlog
mcp__backlog__backlog_get_issues(
  projectId=[655935, 665695],
  statusId=[1, 2, 3],
  sort="dueDate"
)

エージェント定義のポイントは、MCPのツール名やパラメータまで具体的に書くことです。

SKILL.mdからの呼び出し

SKILL.md内に「4つのAgentを1つのメッセージで同時に呼び出すこと」と明記しています。これがないとClaude Codeが逐次実行してしまう場合があります。

4つのエージェントを **必ず1つのメッセージ内で同時に** spawn すること(並列実行の鍵)。

自然言語の指示書だからこそ、こういう「実行制御」もそのまま書けます。

各データソースの接続パターン

8つのツールを繋いでみて分かったのは、接続手段が想像以上に豊富だということです。MCP、CLI、自作スクリプト、Playwright — どれもClaude Codeから呼べます。

つまり、仕組みさえ分かっていれば、コーディングもコマンド操作もできなくても、Claude Codeと一緒にやりたいことを実現できます。自分もスクリプトは全部Claude Codeに書いてもらいました。

パターン1: MCP接続(設定だけで繋がる)

Google Calendar、Slack、Backlog、Discordの4つはMCPサーバー経由です。Claude Codeの設定に追加するだけで、スキルから mcp__slack__slack_get_channel_history(...) のように呼べます。

Slackは search APIの to:me フィルタを使うと、全チャンネル横断で自分宛メンションを一括取得できます。チャンネルを個別に指定する必要がありません。重要チャンネルだけは read_channel でBot通知含めて全体の流れも見ています。対象チャンネルやBacklogのプロジェクトは、スキル内の references/ フォルダに設定ファイルとして切り出しています。

Google Calendarは最初OSSのMCPサーバーを使っていましたがOAuth設定が面倒で、quotaエラーも出ました。Anthropicマネージド MCPに移行したら認証不要で安定しました。MCPはマネージド版があるならそちらを使うのが正解でした。

パターン2: CLI接続(スキルからBash経由で呼ぶ)

X(xurl)、Google Sheets(gog)はCLIツールです。スキル内でBashコマンドとして呼びます。

# Xフォロワー数取得
xurl whoami

# QA質問表取得
gog sheets get SHEET_ID "シート名!A1:F82" --json --account your-email@example.com

MCPが用意されていないツールでも、CLIがあればスキルに組み込めます。「MCPがないから諦める」ではなく「CLIで繋ぐ」という選択肢です。

パターン3: Webスクレイピング(Playwright MCP)

案件紹介サービスの案件詳細はメール本文だけでは情報が足りません。案件URLをPlaywright MCPで開いて、予算・スケジュール・発注企業情報まで取得してから評価します。

# SKILL.mdの記述
メール本文から案件詳細URLを抽出し、
**必ず** Playwright MCP でページを開いて全詳細を取得してから判定する。
メール件名だけでの判定は不可。

パターン4: 自作Pythonスクリプト

MCPでもCLIでも対応できない細かいロジックは自作スクリプトで対応します。

自分の会社はさくらインターネットのメールサーバーを使っています。GmailならMCPで繋がりますが、外部メールサーバーはそうはいきません。そこでメールアドレスとパスワードを .env に書いて、POP3でメールを取得するPythonスクリプト check-mail.py を作りました。除外リスト(メルマガ・案件配信等)でフィルタリングしてJSON出力します。

# 送信元の除外リスト(一部)
EXCLUDED_SENDERS = [
    "no-reply", "noreply", "newsletter",
    "ready crew", "bizreach", "majisemi",
    # ...
]

このリスト、SKILL.mdに「不要メールが含まれていたら除外リストに自動追加せよ」と書いてあります。使うたびにClaude Codeがスクリプトを更新してくれるので、ノイズが減っていきます。

フォールバック設計 — 止まらない仕組み

外部ツールは落ちるし、認証も切れる。これが前提です。

秘書スキルでは、主要な接続に多段フォールバックを設計しました。

ツール 第1手段 第2手段 第3手段
メール POP3スクリプト
X フォロワー xurl CLI Claude in Chrome 前回値を表示
QA質問表 gog CLI 「未確認」と表示
外部Webサイト Playwright MCP Claude in Chrome メール本文のみで判定(精度低下を明記)

SKILL.mdに書いた例:

### Xフォロワー推移
**プライマリ: xurl CLI**
xurl whoami でフォロワー数を取得

**フォールバック: Claude in Chrome**(xurl未認証時)
Chrome拡張で自分のXプロフィールページを開いてフォロワー数を取得

**注意**: どちらも使えない場合は前回値を表示:
python3 scripts/x-follower-track.py show

フォールバックが3段あるツールもあります。「取得できなかった」で止まるのではなく、精度は落ちてもいいからブリーフィング全体は必ず出力します。このあたりの設計がスキルの信頼性を大きく左右します。

「確認」を超えた自動判定

秘書スキルは情報収集だけでなく、判定ロジックもスキル内に持っています。

案件の自動評価(A/B/C/S判定)

案件紹介サービスから毎日メールが届くのですが、自社の受注基準に照らして自動で判定しています。メール本文からURLを抽出し、Playwright MCPでサイトを開いて詳細情報を取得してから評価します。判定基準はサンプルですが、例えば以下のように事前に基準を設定しておけば判定までしてくれます。

## 優先案件(A判定)
1. 要件が決まっている・固まっている
2. AIを使った業務効率化で実現可能
3. 新規構築でクラウド(Vercel/Supabase等)で完結

## 避ける案件(C判定)
- フルスクラッチの業務系開発
- 既存システムのリプレイス
- SaaS/パッケージ導入支援
- オンプレ環境でのAI開発

これが自然言語で書かれたルールだからこそ、境界ケースでClaude Codeが「B(要確認)」という柔軟な判定を出せます。if-elseでは表現しにくい「微妙な案件」の判断をLLMに任せています。

採用メールの書類選考

採用メールアカウントに届く候補者紹介を、必須基準(M1〜M4)と優先評価(P1〜P6)で半自動スクリーニングします。

👥 採用メール
  候補者A(32歳) — フロントエンド / React 5年
    必須: M1○ M2○ M3○ M4○ → 合格推奨(B: 見極め)
    優先: P1× P2○ P3○ P4○ P5× P6×
    懸念: AI開発経験なし → 面接で確認

最終判断は自分がします。でも「履歴書を読んで、基準に照らして、判定理由を整理する」という作業がブリーフィングに含まれているのは大きいです。

ブリーフィングの実際の出力

ブリーフィング結果は ~/Work/secretary/daily/YYYY-MM-DD.md に日次タスクとして保存されます。前日の未完了タスクは翌日に自動繰り越し。スキル定義(~/.claude/skills/secretary/)と運用データ(~/Work/secretary/)は完全に分離しています。

ある日のブリーフィング(一部抜粋):

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 デイリーブリーフィング(2026-03-27)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📅 スケジュール
  12:00 - 定例会(Zoom)
  14:00 - 成果発表会
  20:00 - DX推進

💬 Slack(要対応)
  #経営チャンネル: オフィス移転申込済・審査中
  #経営チャンネル: 勤怠システムリリース目標6月

📧 メール(要対応)
  電子契約サービス: 請求書処理(期限3/30)

📋 Backlog
  PROJECT-55: 社内DX・AI推進(期限: 04/03)

📝 QA質問表(未回答2件)
  A機能の仕様についての質問
  B機能の期待値の確認

🏢 受託案件(2件)
  [B] コールセンターAI活用 → 定例会で相談
  [C] 商品マスター管理(見送り: AI要素なし)

📊 X Growth
  フォロワー: 51人(前日比 ±0)

🔥 今日の優先順位
  1. 定例会(12:00、案件相談あり)
  2. 請求書の処理(期限3/30)
  3. 成果発表会(14:00)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

8つのツールから情報を集めて、優先順位まで付けて、これが /secretary の一言で出てきます。

設計で大事だったこと

振り返ると、3つの設計判断が効いています。

1. 抽象度を上げる
個別ツールの操作指示ではなく「秘書というロール」でスキルを設計しました。「Slackを見て」ではなく「今日のブリーフィングを作って」。この抽象度の違いが実用性を決定的に変えました。

2. MCP + CLI + スクリプトのレイヤー構成
接続パターンの章で紹介した3層構成です。MCPで繋がらないものはCLIかスクリプトで補完する。この割り切りが大事でした。

3. フォールバックを必ず用意する
外部ツールは落ちる前提で設計します。1つが落ちても全体のブリーフィングは出力されます。「完璧な情報」より「止まらない仕組み」の方が運用では圧倒的に重要です。

課題と今後

トークン消費: 4エージェント並列で毎朝実行するとそれなりにトークンを使います。キャッシュ戦略の強化と、変化がないソースのスキップが次の改善ポイントです。

Cron自動実行: 現在は手動で /secretary を打っています。毎朝8時に自動実行して、結果をSlack DMに投稿する仕組みを作る予定です。

求人市場の定点観測: スクレイピングが許可されている求人サイトを巡回して、AIエンジニアの給与相場や求人数の推移を自動調査するスキルも実装済みです。採用判断や自社の報酬設計に使えるデータを秘書ブリーフィングに組み込んでいます。

まとめ

スキルは「1つの作業を自動化するもの」ではなく、**「ロールごと自動化するもの」**として設計すると、実用性が一段上がります。

そして情報を取ってきて終わりではありません。判断基準を渡して情報にフィルターをかけたり、特定のタスクに対して実行用のスキルを別途作っておいてタスク化から実行までを自動化したり、拡張の余地はまだまだあります。引き続きこの秘書スキルを育てていきます。

この記事の設計パターンが、みなさんのスキル構築のヒントになれば嬉しいです。

関連記事

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?