Claude Codeを既存システムに導入すると詰まる「コンテキスト問題」とハーネスエンジニアリングの話
個人開発で2週間→2〜3日を実現したClaude Codeを大規模システムに持ち込むと詰まる。コンテキストジレンマの正体・MDファイル分散の罠・Hooksで自動検証を組む「ハーネスエンジニアリング」・段階的PRフローまで、まだ誰も確立していないベストプラクティスを探る。

freee の MCP サーバーを使えば、Claude Code から freee 会計の API を読み書きできる。それなら記帳を AI に任せられるのではないか。2026年9月、そう考えて経理用のサブエージェントを作り始めた。
最初の調査で、前提が外れた。その年の口座明細1,203件は、すべて処理済みだった。freee の「自動で経理」が、ほぼ全件を勘定科目つきで記帳していた。記帳は、そもそもボトルネックではなかった。
そこで役割を組み直した。AI に任せるのは「代わりに入力すること」ではなく、自動記帳の検品、証憑の突合、税金の試算にした。この記事は、その体制を1か月半回した記録だ。
この記事でわかるのは次の4つ。
| 項目 | やったこと |
|---|---|
| 構成 | サブエージェント5体(記帳の検品、請求、月次、税金、証憑の監査) |
| 書き込み | 書き込めるのは2体だけ。どちらも、内容を表で見せて承認を取ってから書き込む |
| 共有の知識 | 勘定科目の ID 表、仕訳のルール、毎月の固定の出金を、3つのファイルにまとめて全員が読む |
| 入口 | 4つのスラッシュコマンド(日次〜週次、月次、月次の資金繰り、年次) |
| 拾ったもの | 口座の資金不足(約8万円)、売上の計上漏れ(3.3万円)、家事按分の振替漏れ、予定納税の減額、ブログ記事の税額の誤り |
AI に期待していたのは入力の手間を減らすことだった。実際に効いたのは、自分が見ていなかった数字を、期限の前に見せてくれることだった。
エージェントを作る前に、freee の実データを API で読んだ。2026年の口座明細は1,203件。その全件が、処理済みを表す status=2 だった。未処理の明細は0件。
freee の「自動で経理」は、銀行やカードの明細を取り込んで、取引先や摘要から勘定科目を推測して記帳する。自分の場合、その推測でほぼ回っていた。ここに AI を足しても、入力の手間はほとんど減らない。
一方で、自動記帳は推測だ。推測が外れていないか、証憑がそろっているか、年末に何が必要か。こうした確認は、誰もしていなかった。AI に任せる価値があるのは、こちらだと判断した。
| エージェント | 役割 | freee への書き込み |
|---|---|---|
freee-bookkeeper | 未処理明細の記帳、自動記帳の検品、レシートとの突合 | あり(承認必須) |
freee-billing | 請求書の作成、入金の消込、取引先の登録 | あり(承認必須) |
freee-closer | 月次の締め、前月比、売上の着地見込み、異常値の検知 | なし(読み取り専用) |
freee-tax-advisor | 税額の試算、節税策、確定申告の準備 | なし(読み取り専用) |
freee-auditor | 証憑の監査、電子帳簿保存法、インボイス、私的支出の混入の検知 | なし(読み取り専用) |
書き込めるのは2体だけにした。誤った記帳は税額に直結し、取り消すのにも手間がかかる。分析と助言しかしないエージェントに、書き込みの権限を渡す理由がない。
権限は、定義の文章で「書き込まないでください」とお願いするのではなく、使えるツールから外している。読み取り専用の3体は、定義の tools: に書き込み用の MCP ツールを入れていない。
---
name: freee-closer
tools: Read, Write, Edit, Bash, mcp__freee-mcp__freee_api_get, mcp__freee-mcp__freee_auth_status
model: sonnet
---freee_api_get しか持っていないので、指示を取り違えても freee に書き込むことはできない。書き込む2体だけが freee_api_post と freee_api_put を持つ。
モデルは、税金の試算をする freee-tax-advisor だけ opus にしていて、ほかの4体は sonnet だ。
Write と Bash は持っている
読み取り専用の3体も、ローカルのファイルに書く Write と、Bash は持っている。レポートをファイルに保存するためだ。freee には書けないが、手元のファイルは書き換えられる。「読み取り専用」は freee に対してだけの意味だと、定義の上で区別している。
書き込む2体の定義には、「内容を表で示して承認を得るまで、POST も PUT もしない」と書いた。記帳なら、日付・金額・勘定科目・摘要を表にして見せ、自分が OK と言ってから登録する。
請求書は、さらに一段固くした。請求書は社外に出る書類なので、freee-billing は下書きまでしか作らない。送るのは自分だ。未入金の督促も、文面は作るが、送るのは自分にしている。
自分がやること・決めることは、1枚のノート(対応・判断リスト)に期限順にまとめさせている。エージェントが自分で進められる作業は、そこに載せない。自分はそのページだけを見て、終わったら「◯◯やった」と伝える。帳簿とノートの更新は、エージェントがやる。
体制は、Claude Code の標準の仕組みだけで組んでいる。ファイルはすべてホームディレクトリの ~/.claude/ の下にあり、リポジトリは持っていない。
freee が公開している MCP サーバー(freee-mcp)を、Claude Code の MCP の設定に足す。自分の設定は npx で起動するだけの形だ。
{
"mcpServers": {
"freee-mcp": { "command": "npx", "args": ["freee-mcp"] }
}
}初回は、freee-mcp の認証の手順に従って、ブラウザで freee にログインしてアプリの利用を許可する。以後は、freee_api_get や freee_api_post といったツールで API を呼べる。対応している API の一覧と使い方は、freee の公式の案内に従った。
エージェントは ~/.claude/agents/ に、1体1ファイルの Markdown で置く。先頭の tools: で使えるツールを決め、本文に仕事の手順を書く。
freee-bookkeeper の本文は、「最初に必ずやること」「現状を掴む」「自動記帳の検品」「記帳する」の順になっている。いちばん長いのは検品の節で、自動記帳がよく間違えるものを並べている。
未処理の明細が0件なら「記帳は追いついています」と報告して、検品に進む。自分の環境では、ほとんどの回がこの流れになる。
~/.claude/commands/ に置いた Markdown が、そのままスラッシュコマンドになる。/keiri の中身は短い(引数の扱いを除いた抜粋)。
---
description: freee の経理を日次チェック(未処理明細・自動記帳の検品・証憑漏れ)
---
1. `freee-bookkeeper` エージェントに、未処理明細の有無と自動記帳の検品を依頼する
2. `freee-auditor` エージェントに、証憑の添付漏れチェックを依頼する
2つは独立しているので**同時に**起動してください。
結果は次の形でまとめること:
- 未処理明細: N件(あれば一覧)
- 要確認の記帳: N件(科目の誤り・二重計上の疑い)
- 証憑漏れ: N件(金額の大きい順に上位のみ)
- 今すぐやるべきこと: 箇条書きで3つまで
freee への書き込みは、内容を提示して承認を得るまで行わないこと。報告の形を決めておくと、毎回同じ順で読める。やるべきことは3つまでに絞らせている。
エージェントは起動するたびに、次の3つを読む。
| ファイル | 中身 |
|---|---|
profile.md | 事業所の ID、勘定科目の ID 表、口座の ID、取引先、API の制約、確認待ちの事項 |
rules.md | 摘要から勘定科目への対応表、金額のしきい値、やってはいけない記帳 |
cashflow.md | 事業用口座から毎月出ていく固定の出金と、入金のパターン |
勘定科目は153件ある。毎回 API で全件を取っていると、それだけでトークンを使う。よく使う科目の ID を profile.md に書いておけば、取りに行かなくて済む。
rules.md は、判断が確定するたびに追記していく。「この摘要はこの科目」「Suica のチャージは私用カードから」といった判断が、本人に確認した日付つきで溜まっていく。
エージェントを毎回名指しするのは面倒なので、スラッシュコマンドを入口にした。
| コマンド | 頻度 | 中身 |
|---|---|---|
/keiri | 日次〜週次 | 未処理明細、自動記帳の検品、証憑の漏れ(2体を並列で起動) |
/getsuji | 月次 | 損益、前年比、着地見込み、異常値。レポートをノートに保存 |
/shikin | 月次 | 事業用口座の資金繰り。25日の朝に必要な額を出し、足りなければ対応リストに書く |
/kakutei | 年次 | 税額の試算、節税策、申告前のチェック(2体を並列で起動) |
/shikin だけはエージェントを使わず、メインのセッションで計算する。カードの引き落とし額は freee に入る前なので、自分に聞いてから計算する必要があるからだ。
1か月半で拾ったものを、時系列で並べる。
| 時期 | 拾ったもの | 対応 |
|---|---|---|
| 10/3 | 10月の資金繰りで、25日の朝に事業用口座が約8.2万円足りない | 私用口座から約9.3万円を入金して解消 |
| 10/3 | 予定納税の第2期(約48万円)は、今年の見込みで出し直すと減額を申請できる | 申請すると決めた。11月に、10月末の実績で数字を作り直して出す |
| 10月中旬 | 帳簿に入っていなかった売上の請求書が2件、計3.3万円 | 売上として登録 |
| 10月中旬 | インボイス登録後の請求書は、交通費の税区分を「不課税」から「10%」に変える必要がある | 10月分の請求書から変える |
| 10/24 | 自宅兼事務所の家事按分の振替が、1〜4月分で止まっていた(5〜10月の実績ベースで、残り約57万円分) | 12月の決算整理で、年間の確定額に対して一括で振り替える |
| 10/25 | このブログの記事の税額が間違っていた(所得税103万円→正しくは約164万円、2026年分の消費税15万円→約6.1万円) | 記事を訂正 |
10月の資金繰りは、こう計算した。
| 金額 | |
|---|---|
| 25日の朝に必要な残高(固定の出金+カードの引き落とし+安全分5万円) | 995,424円 |
| 25日の朝の見込み残高 | 913,037円 |
| 不足 | 82,387円 |
月末には売上の入金がある。ただ、入金より先に家賃と生活費の送金が出ていく。月の合計では足りていても、入金までの数日だけ口座がマイナスになる計算だった。年間の税金を月ごとに並べると同じことが起きる話は、税金積立の記事に書いた。
このブログの記事の税額の誤りを、経理のエージェントが見つけた。
このブログには、別に記事を書くエージェントと校閲するエージェントがいる。手取りの記事の税額は、記事側の確認だけでは誤りに気づけていなかった。
freee-tax-advisor に記事の税額を検算させたところ、所得税は、記事の前提どおりに計算し直すと103万円ではなく約164万円だった。2026年分の消費税も、15万円ではなく約6.1万円だった。2025年分の所得税の実額も、予定納税の通知額から逆算すると約144万円で、103万円とは離れていた。帳簿と通知額を持っている経理側だから、記事の数字が実額とずれていることが見えた。手取りの記事は訂正済みだ。
最初の rules.md では、カード会社名で引き落とされている明細を「クレジットカードの引き落とし=振替。経費にしない」と定義していた。明細の名前だけを見ると、そう読める。
実際には、それは家賃の口座引き落としだった。引き落としの名義がカード会社だっただけだ。自分に確認して、10/3 に rules.md を「地代家賃。家事按分の対象」に直した。
10/31 に定義を読み直して、もう一つ見つけた。rules.md は10/3に直していたのに、freee-bookkeeper の定義の「検品で疑うもの」の例に、同じ明細が「クレジットカードの引き落とし(経費にしてはいけない)」として残っていた。
検品のときに rules.md と定義のどちらを信じるかで、家賃を「経費にしてはいけない明細」として扱いかねない状態が4週間続いていた。10/31 に定義を直し、「迷ったら rules.md を優先する」と書き足した。
同じ事実を2つのファイルに書くと、直すときに片方が残る。具体的な明細の名前は rules.md だけに置き、定義には「何を疑うか」だけを書くのが筋だった。
freee の API は、使っているアプリの権限によって、取れないものがあった。
| エンドポイント | 結果 | 代わりにしたこと |
|---|---|---|
GET /api/1/walletables(口座の残高) | 403 | 口座明細(wallet_txns)の最新の残高で代用 |
GET /api/1/companies/{id}?details=true | 403 | 必要な ID は profile.md に手で書いた |
| 固定資産台帳 | API では見られない | 減価償却は、申告の前に画面で確認する作業として残した |
deals、wallet_txns、receipts、partners、account_items、reports/*、請求書 | 取れる | — |
口座の残高が直接取れないのは、資金繰りには痛い。10/3 の資金繰りは、明細から取れた 9/30 時点の残高で計算した。資金繰りのノートには、何日時点の残高で計算したかを書いている。
エージェントに任せていないものもある。
どれも、間違えたときに自分が説明しなければならないものだ。本業でも、AI に任せない線を「相手に説明しないといけないもの」に引いている。経理でも同じ線になった。
tools: から外して止めているrules.md の1か所に置く。定義にも書くと、直すときに片方が残る毎月いくら税金用に貯めればいいかは、税金積立の記事で、支払月ごとの実額で計算している。
学習にかけた費用は、フリーランスなら経費として申告できます。何がどこまで通るのかを、顧問税理士を付けずに自分で申告している立場から書いています。
確定申告・節税の記事を読む個人開発で2週間→2〜3日を実現したClaude Codeを大規模システムに持ち込むと詰まる。コンテキストジレンマの正体・MDファイル分散の罠・Hooksで自動検証を組む「ハーネスエンジニアリング」・段階的PRフローまで、まだ誰も確立していないベストプラクティスを探る。
両方Proプランを使う現役フリーランスエンジニアが解説。Claude Codeで開発速度10倍・GitHub CopilotでUT作成1/3削減を実現した使い分け術、CLAUDE.md設定、失敗しないルール設計を実例付きで解説する。
フリーランスエンジニアの税金・積立・口座管理を自動化するWebアプリ「フリーランス金銭プランナー」を個人開発した。所得税・住民税・消費税・国保を自動計算し、毎月の積立目標と使える金額をリアルタイムに算出する仕組みと技術スタックを紹介する。