はじめに
前回の第2話では、GitHubで環境構築をした話を書いた。コードは一行も書かなかったが、プロジェクトの土台ができた。
今回はいよいよ、Claude APIと接続した話だ。
そして、想定外の出来事が起きた。
Claude APIとの初接続
まず、動作確認のためのシンプルなコードをGASに書いた。
function testClaudeAPI() {
const API_KEY = 'sk-ant-...';
const response = UrlFetchApp.fetch('https://api.anthropic.com/v1/messages', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': API_KEY,
'anthropic-version': '2023-06-01'
},
payload: JSON.stringify({
model: 'claude-sonnet-4-6',
max_tokens: 100,
messages: [{ role: 'user', content: 'Hello! Reply in Japanese.' }]
})
});
const result = JSON.parse(response.getContentText());
Logger.log(result.content[0].text);
}
実行した。
ログに流れてきた。
こんにちは!何かお手伝いできることはありますか?😊
動いた。
GASとClaude APIがつながった。福祉の現場でスプレッドシートの関数を書いてきた自分が、AIと会話するコードを書いた。その瞬間、確かに何かが変わった気がした。
最初の壁:残高ゼロ
実は最初、APIは動かなかった。
エラーメッセージはこうだった。
Your credit balance is too low to access the Anthropic API.
クレジット残高が不足しています、という意味だ。
以前$5購入したはずなのに、なぜ残高がゼロなのか。原因をよくよく調べると、別のアカウントでログインしていたことがわかった。
正しいアカウントでログインし直すと、残高が表示された。USD 0.90。
たった90セント。でもテストには十分だった。
ここで一つ学んだことがある。APIキーとアカウントは必ず紐付いている。 キーを発行したアカウントと、残高があるアカウントが違えば動かない。当たり前のことだが、実際に詰まるまで意識していなかった。
4エージェントの連携
動作確認ができたところで、本番のコードを書いた。
CFO、CTO、CMO、CEOの4エージェントが連携するフローだ。
function runAgentFlow() {
Logger.log('=== VCS サイクル開始 ===');
const cfoReport = cfoAgent(); // 財務報告
const ctoReport = ctoAgent(); // 技術報告
const cmoReport = cmoAgent(); // マーケ報告
const ceoDecision = ceoAgent(cfoReport, ctoReport, cmoReport); // 意思決定
Logger.log('=== サイクル完了 ===');
}
実行した。
ログに4つの報告が流れた。そしてCEOが全員の内容を受けて、各部門への指示を出した。
【CEO判断】承認
営業利益240万円と堅調だが、広告費超過は放置すると
収益構造を毀損するリスクがある。CFO提案のROI低施策の
即時停止は妥当。来週中にROI計測データを共有し、
上位施策へ予算を集約。効果検証後に再配分を判断する。
AIが会社会議を再現した。
誰も操作していない。コードが呼び出しただけだ。それなのに、CFOが数字を分析して、CTOがリスクを報告して、CEOが総合的に判断した。
そして、ロシア語が混じった
感動していたその時、CFOの報告に見慣れない文字が混じっていた。
売上:420万円、支出:180万円、純利益:240万円と堅調に推移しております。
однако、広告費が予算を超過しており、早急な見直しが必要です。
однако。
「なんだ、この文字は?」
ロシア語だった。「しかし・ただし」という意味らしい。
誰もロシア語を頼んでいない。システムプロンプトに「日本語で報告してください」とは書いたが、「他の言語を使うな」とは書いていなかった。
AIは時々、こういうことをする。指示の隙間を、予想外の方法で埋める。
対処はシンプルだった。システムプロンプトの先頭に一行追加した。
必ず日本語のみで回答してください。他の言語は絶対に使わないでください。
それ以来、ロシア語は出ていない。
この日学んだこと
Claude APIとの接続でわかったのは、プロンプトは「言わなかったこと」で失敗するということだ。
「日本語で書いて」と伝えても、「他の言語は使うな」と言わなければ、AIは別の言語を混ぜてくることがある。
これはバグではない。AIは指示された範囲で最善を尽くすが、指示されていないことは自由に解釈する。
VCSを作る上で、このことは重要な設計原則になった。
エージェントへの指示は、やってほしいことだけでなく、やってほしくないことも書く。
次回予告
第4話では、Human-in-the-loopの話を書く。
「来月の資金調達に向けて数字を整えてください」と一行入れたら、4人のAIが一斉に動いた。CEOの判断が、人間の指示によって180度変わった瞬間の話だ。
→ note版(ショート)はこちら
→ 前回【第2話】:「何をやっているのかわからない」のまま進んだ話
→ 次回【第4話】:一行の指示で会社が変わった話
Virtual Company Studio 開発日誌 #3
2026年2月
#VCS #AI #ClaudeAPI #GoogleAppsScript #開発日誌 #スタートアップ