Claude.aiのバーチャル秘書とSlackを連携して毎朝ブリーフィングを完全自動化する方法

前回はClaude.aiでバーチャル秘書を構築してみました。実際に使っていくうちに次のように思うことでしょう。

毎朝、本日のスケジュール、TODO、天気・ニュース、をまとめたブリーフィングを確認したいけど、毎回Claude.aiにアクセスするのは面倒…

バーチャル秘書が自動的に毎朝指定した時間にSlackに送ってくれたら便利です。

その場合、手順は前回と比べて面倒になりますが、Slack ワークフロービルダーClaude APIの組み合わせで解決できます。

本記事では、毎朝7時にSlackの指定チャンネルへ自動でブリーフィングを送信する仕組みを、ゼロから構築する手順を解説します。Google Cloud Functionsの無料枠を活用するため、ランニングコストはほぼ0円で運用可能です。


記事の内容

仕組みの全体像

コンポーネント役割費用
Slack ワークフロービルダー毎朝7時にWebhookを叩くスケジューラー無料(Slackプランによる)
Google Cloud FunctionsClaude APIを呼び出す中継サーバー無料(月200万req以内)
Claude API天気・ニュースを調べてブリーフィングを生成従量課金(1回約0.5〜2円)
Slack Incoming Webhook#donnaチャンネルへメッセージを投稿無料

なぜ Cloud Functions が必要なのか?
Slackのワークフロービルダーは外部URLへHTTPリクエストを送ることはできますが、API認証キーを安全に保管したり、複数のAPI呼び出しをまとめたりする機能がありません。そのため、これらの処理を担うサーバーレス関数(Cloud Functions)を中継として置く構成にしています。


STEP 1:Slack App を作成し Webhook URL を取得する

まず、ClaudeからSlackにメッセージを送るための「出口」を作ります。Slack の Incoming Webhook 機能を使います。

① Slack App を新規作成する

  1. api.slack.com/apps にアクセスし、「Create New App」をクリック
  2. From scratch」を選択
  3. App Name に Donna Briefing と入力し、送信先ワークスペースを選択して「Create App

② Incoming Webhooks を有効化する

  1. App 管理画面の左メニューから「Incoming Webhooks」を開く
  2. 「Activate Incoming Webhooks」のトグルを ON にする
  3. Add New Webhook to Workspace」をクリック
  4. チャンネル選択画面で #donna を選択し「許可する
  5. 生成された Webhook URL をコピーして保管する

Webhook URL の取り扱い注意
Webhook URLはそのままSlackに投稿できる秘密のURLです。GitHubなどのパブリックなリポジトリに公開しないよう注意してください。


STEP 2:Claude API キーを取得する

次に、ブリーフィングを生成する「頭脳」となる Claude API のキーを取得します。

API キーの発行手順

  1. console.anthropic.com にアクセスしてログイン(アカウントがなければ新規登録)
  2. 左メニューの「API Keys」を開く
  3. Create Key」をクリックし、名前(例:donna-briefing)を入力
  4. 表示されたキー(sk-ant-...)をコピーして安全な場所に保存する

APIの料金について
Claude APIは従量課金制です。ブリーフィング1回あたりの使用トークンは概ね500〜1,500トークン程度なので、1回あたり約0.5〜2円の計算になります。毎日送信しても月額60円程度です。


STEP 3:Google Cloud Functions でバックエンドを作る

Slackのスケジューラーから呼び出されると、Claude APIを叩いてブリーフィングを生成し、Slackに送信する「中継サーバー」をGoogle Cloud Functionsで作ります。

① Google Cloud Console の設定

console.cloud.google.com/functions にアクセスし、「関数を作成」をクリック。以下の通り設定します。

  • 関数名:donnaBriefing
  • リージョン:asia-northeast1(東京・レイテンシ最小)
  • トリガー:HTTP
  • 認証:未認証の呼び出しを許可
  • ランタイム:Node.js 20

② 環境変数を設定する

「変数、ネットワーク、詳細設定」タブを開き、以下の環境変数を追加します。

CLAUDE_API_KEY     = sk-ant-xxxxxxxxxxxxxxxx
SLACK_WEBHOOK_URL  = https://hooks.slack.com/services/T.../B.../xxx

③ index.js — メインコードを貼り付ける

javascript

// Donna Morning Briefing — Cloud Function
const fetch = require('node-fetch');

exports.donnaBriefing = async (req, res) => {
  const CLAUDE_KEY = process.env.CLAUDE_API_KEY;
  const WEBHOOK    = process.env.SLACK_WEBHOOK_URL;

  // 日本時間の今日の日付を取得
  const jst = new Intl.DateTimeFormat('ja-JP', {
    timeZone: 'Asia/Tokyo',
    year: 'numeric', month: 'long',
    day: 'numeric', weekday: 'long'
  }).format(new Date());

  // Claude API を呼び出してブリーフィングを生成
  const claudeRes = await fetch(
    'https://api.anthropic.com/v1/messages',
    {
      method: 'POST',
      headers: {
        'x-api-key': CLAUDE_KEY,
        'anthropic-version': '2023-06-01',
        'content-type': 'application/json'
      },
      body: JSON.stringify({
        model: 'claude-sonnet-4-20250514',
        max_tokens: 1500,
        system: `あなたは私の秘書です。
毎朝、#xxxxxxチャンネルに送るブリーフィングを
Slack mrkdwn形式で生成してください。
天気(#市町村名を記入)・ニュース3件・注意事項を含めること。
絵文字を使い明るいトーンで書いてください。`,
        messages: [{
          role: 'user',
          content: `今日は${jst}です。
web_searchで最新の天気とニュースを調べて
ブリーフィングを生成してください。`
        }],
        tools: [{
          type: 'web_search_20250305',
          name: 'web_search'
        }]
      })
    }
  );

  const data = await claudeRes.json();

  // テキストブロックのみ抽出(tool_useブロックを除外)
  const message = data.content
    .filter(b => b.type === 'text')
    .map(b => b.text)
    .join('\n');

  // Slack Incoming Webhook に POST
  await fetch(WEBHOOK, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ text: message })
  });

  res.status(200).send('OK');
};

#xxxxxxn部分にはSlackのチャンネル名を記入、秘書名、天気の地域名は書き換えてください。

④ package.json

json

{
  "name": "donna-briefing",
  "version": "1.0.0",
  "main": "index.js",
  "dependencies": {
    "node-fetch": "^2.7.0"
  }
}

入力後、「デプロイ」をクリック。デプロイ完了後に表示される関数のURLをコピーしておきます。次のステップで使います。

Google Cloud Functions の無料枠
月間200万リクエストまで無料。毎朝1回の実行では月約30回なので、無料枠の範囲内におさまることでしょう。


STEP 4:Slack ワークフロービルダーで自動送信を設定する

① ワークフローを新規作成する

  1. Slackのサイドバーで「ワークフロー」をクリック
  2. 新規ワークフロー」→「スクラッチから作成」を選択
  3. ワークフロー名に 秘書毎朝ブリーフィング と入力

② トリガーを「スケジュール」に設定する

  1. トリガー選択画面で「スケジュール」を選択
  2. 繰り返し:「毎日
  3. 時刻:7:00 AM(タイムゾーン:Asia/Tokyo)

③ ステップ「Webhook を送信」を追加する

  1. ステップを追加」→「Webhook を送信」を選択
  2. URL:STEP 3 でコピーした Cloud Functions の URL を貼り付け
  3. メソッド:POST / Content-Type:application/json
  4. Request body:{} (空のJSON)
  5. 保存」→「公開する」をクリック

設定完了!
これで毎朝7時になると、Slack → Cloud Functions → Claude API → #donna という流れが自動で実行されます。

STEP 5:動作確認とカスタマイズ

① Google Cloud Console を開く

console.cloud.google.com/functions にアクセスし、作成した関数 donnaBriefing をクリックします。

② 「テスト」タブを開く

関数の詳細ページ上部のタブから「テスト」を選択します。

③ テストを実行する

「トリガー イベントを設定」欄はそのまま空({})でOKです。画面下部の「関数をテスト」ボタンをクリックするだけです。

④ 結果を確認する

指定したSlackのチャンネルを開いてブリーフィングが届いていることを確認してください

画面右側の「出力」欄に OK と表示されれば成功です

カスタマイズのアイデア

システムプロンプト(system の文字列)を変更するだけで、内容を自由にカスタマイズできます。

  • 📅 Google Calendar 連携:Calendar APIを追加して「今日の予定」を含める
  • 📰 業界ニュースの絞り込み:「IT・AI関連ニュースを優先してください」と追加
  • 🌤️ 複数地点の天気:「渋谷と仙台の天気を含めてください」と指定
  • 💹 為替・株価:「USD/JPY レートと日経平均も含めてください」と追加

まとめ

作業所要時間
STEP 1:Slack App & Webhook 設定約5分
STEP 2:Claude APIキー取得約3分
STEP 3:Cloud Functions デプロイ約15分
STEP 4:Slack ワークフロー設定約5分
合計約30分

一度設定してしまえば、あとは毎朝7時に自動でブリーフィングが届きます。システムプロンプトを調整するだけで内容を自由にカスタマイズできるので、ぜひ自分のワークフローに合わせてアレンジしてみてください。

  • URLをコピーしました!

この記事を書いた人

情報環境コミュニケーションズ 代表
企業、団体のITコンサル、サポート、システム構築/管理、大学の招聘研究員として大規模調査の設計、集計の効率化、解析などを行っています。
最近ではAI開発環境の構築のサポートも行うようになってきました。
<著書>2008年〜2015年、テクニカルライターとして、週間アスキー、Ubuntuマガジン、Linux 100%, Mac 100%, Mr.PCなど多数のIT系雑誌に寄稿。

コメント

コメントする

記事の内容