Claude Codeで「成長するAI秘書」を作ってみた 〜事業企画の仕事をオーケストレーションで回す〜

Claude Codeで「成長するAI秘書」を作ってみた 〜事業企画の仕事をオーケストレーションで回す〜

2026.04.01

こんにちは。リテールアプリ共創部で事業企画を担当しているかめだです。

過去2本、「AIにチームで考えさせる」「企画業務をAI化した記録」という記事を書いてきました。今回はその延長線上の話です。

AIは「今この瞬間の答え」は出せても、「昨日の失敗を踏まえた答え」は出せない。この問題を解決するために、Claude Codeのサブスクリプション範囲内(Claude Codeの月額固定)だけで、失敗から学んで自分で賢くなっていくAI秘書「Nina」を作りました。

1. 事業企画という仕事の問題

私の仕事を一言で表すと「仮説を作って、ぶつける相手を見つけて、検証して、サービスにする」です。インプット → 仮説ストック化 → 顧客マッチング → 提案アクション。この4フェーズを一人で回しています。

問題は、情報収集に追われて「考える時間」がどんどん削れていくことです。朝ニュースを読んで仮説を思いつく。企業調査を始める。途中でSlackに問い合わせが来て午前が終わる。午後に提案書を書こうとしたら、朝読んだ記事の内容をもう忘れている。

情報収集・仮説の素案・提案書の下書きまでを誰かに任せて、自分は「判断と関係構築」に集中したい。でもそれを頼めるチームメンバーはいない。だからAIに任せようと思いました。

2. OpenClawからClaude Codeへ

最初に試したのは、AIエージェントオーケストレーションツール「OpenClaw」でした。複数のAIにそれぞれ役割を与えてチームとして動かす仕組みです。5日間試したところ、動くことは確認できました。

しかし運用は大変です。自分でサーバーを用意してツールを設定する必要がある。設定を変えるたびにJSONを手で直す。非エンジニアの私には「動かし続けること」自体のコストが高すぎました。

そこで、普段使っているClaude Codeで同じことができないかと考えました。

OpenClawで学んだチーム設計のコンセプトを、Claude Code単体のサブスクリプション範囲内で実現できるのでは?

3. Claude Codeの機能

Claude Code サブスクリプションは月額固定でClaude Codeが使い放題になるプランです。(もちろん5時間制限などはありますが)API従量課金が不要なので、エージェントを何回動かしてもコストが変動しません。

Claude Codeには以下の機能があります。

機能 役割
CLAUDE.md AIのアイデンティティ、判断基準、ワークフローを定義するファイル
agents/ 専門エージェントの定義。役割・ツール権限・行動方針を設定
skills/ 繰り返し実行するワークフローの定義
hooks/ 特定イベント(セッション開始・終了等)で自動実行されるスクリプト
memory/ セッションをまたいで保持する記憶・学習内容

これらを駆使して、Ninaのプロジェクトのフォルダ構成は以下の通り設計しました。

ai-nina/
├── .claude/
│   ├── CLAUDE.md                  ← Ninaの人格・判断基準・学習プロトコル
│   ├── agents/
│   │   ├── researcher.md          ← 情報収集エージェント(Sonnet)
│   │   ├── writer.md              ← コンテンツ作成エージェント(Sonnet)
│   │   └── reporter.md            ← 日報・レポートエージェント(Haiku)
│   ├── skills/
│   │   ├── morning-news/SKILL.md  ← 朝のニュース収集+仮説生成
│   │   └── nina-daily-report/SKILL.md ← 日報+成長記録更新
│   ├── hooks/
│   │   ├── guard-dangerous-bash.sh ← 危険コマンド・資格情報ブロック
│   │   ├── log-action.sh           ← 全ツール実行ログ
│   │   └── session-end-log.sh      ← セッション終了マーカー
│   ├── memory/
│   │   ├── nina-level.md           ← スキルレベル・判断パターン・業界パターン
│   │   ├── boss-patterns.md        ← 上司の修正指示パターン
│   │   └── guardrails.md           ← 失敗から生まれたルール
│   └── rules/
│       └── domain-knowledge.md     ← 事業企画の業務コンテキスト
├── hypotheses/                     ← 仮説ストック
├── logs/                           ← 実行ログ・セッションサマリー
│   └── nightshift/                 ← 夜間自律運転ログ
├── outputs/                        ← 成果物
│   ├── news/                       ← 朝のニュース収集結果
│   ├── research/                   ← 調査レポート
│   ├── drafts/                     ← ブログ・提案書の下書き
│   └── reports/                    ← 日報・週報
├── tasks/                          ← タスク管理・夜間キュー
├── nina-nightshift.sh              ← 夜間自律運転スクリプト
└── nina-tmux.sh                    ← tmux可視化スクリプト

4. やったこと① Ninaの人格・チーム・運用を設計した

CLAUDE.mdで人格を定義する

CLAUDE.mdに以下を書きました。

You are Nina, AI secretary for kamedas,
business planner at Classmethod's Retail App Co-creation Division.

kamedas's job: "仮説を作って、ぶつける相手を見つけて、検証して、サービスにする"

この定義で、Ninaは上司が誰で、上司の仕事が何かを知った状態で動きます。加えて判断の優先順位(安全性 > 倫理 > ルール遵守 > 有用性)、アクセスできるディレクトリ範囲、タスクの分類ロジックを定義しました。

3つのサブエージェントを編成する

Ninaは自分では作業をせず、タスクを3つのサブエージェントに委託するオーケストレーターとして設計しました。

エージェント 役割 モデル
researcher 情報収集、競合分析、企業調査。growthpack MCPで製品情報を取得 Sonnet
writer ブログ記事、提案書、ホワイトペーパーの作成 Sonnet
reporter 日報、週次レポート、状態サマリー Haiku

researcherにはWeb検索・MCP連携のツール権限、writerにはファイル書き込み権限、reporterにはログ読み取り権限をそれぞれ付与しています。reporterはコストを抑えるためにHaikuモデルを使っています。

日中の運用は、私が指示してNinaが動く

日中はClaude Codeのセッションで私がNinaに指示を出します。「この企業を調査して」「この仮説でブログの下書きを書いて」といった依頼に対して、Ninaがresearcherやwriterに委託して結果を返す。私は結果を確認して判断する、という流れです。

よく使うワークフローは「スキル」として定義しました。

  • /morning-news — 業界ニュース3本を検索し、仮説を生成してストックに追加
  • /nina-daily-report — ログを分析し、日報を作成、スキルレベルやガードレールを更新

/morning-newsを実行すると、researcherエージェントが3つの検索クエリでニュースを収集し、各記事からGrowth Pack for LINEに関連する仮説を生成し、ファイルに保存します。

夜間の運用はシェルスクリプトで自律稼働

夜間はnina-nightshift.shというシェルスクリプトで自律運転します。連続でセッションを起動するとAPIレート制限に引っかかるリスクがあると考え、タスク間に10分の間隔を入れています。

INTERVAL=600          # タスク間の休憩(秒)= 10分
MAX_RUNS=20           # 1晩の最大実行回数(レート制限保護)

動作の仕組みはこうです。

結果

日中は私の指示ベースで動き、夜間はGitHub Issueを自動消化する体制ができました。

大変だったこと

夜間自律運転にはMacBookのスリープ制御が必要でした。caffeinate -i -w $$で、スクリプト実行中だけアイドルスリープを防止し、終了後は自動解除される設定にしました。

Claude Code Maxには5時間のローリングウィンドウによるレート制限があります。朝から仕事で使えるように、夜中1時起動・6時前完了のスケジュールにしました。

5. やったこと②  「成長する仕組み」を入れた

レベルシステムの再設計

OpenClawのPoCでは「ニュース投稿3回連続成功 → レベルアップ」という成長モデルを使っていました。これをClaude Codeに移植しようとして、Claudeに相談したところ「今のレベルシステムでは事業企画の秘書として成長しない」と返ってきました。

ニュースを3回正しく投稿できたかどうかは「作業の正確性」であって、「仮説の質」や「提案の精度」とは関係がありません。

OpenClawのレベル(作業の正確性) 本来測るべき成長(判断の質)
ニュース3本投稿できた? 仮説の打率 — 上司が「使える」と言った割合
日報のフォーマット正しい? 業界理解 — 適切な企業×課題×機能をマッチできるか
ファイル保存できた? 提案の精度 — 下書きの修正回数が減っているか

そこでレベルの測定対象を「作業の正確性」から「業務別の判断の質」に再設計しました。「仮説生成」「企業調査」「ブログ下書き」など業務ごとにスキルレベルを分けて追跡し、3回連続で上司が「修正不要」と判断したら昇格する仕組みです。

5トリガーの学習プロトコルを設計した

レベルの再設計に加えて、CLAUDE.mdに「Learning Protocol」として5つのトリガーを定義しました。

トリガー 発火条件 記録先
上司フィードバック 承認・修正・却下時 nina-level.md, boss-patterns.md
判断を変える発見 調査中に重要な事実を発見 logs/learnings-YYYY-MM-DD.jsonl
失敗→ガードレール 失敗発生時 guardrails.md
業界パターン抽出 同業種3社以上を調査した時 nina-level.md「業界パターン」
仮説の結果記録 仮説が使われた/使われなかった時 hypotheses/tracker.md

トリガー1〜3は防御的な学習(同じ失敗を繰り返さない)、トリガー4〜5は攻撃的な学習(パターンを見つけて次の提案に活かす)です。

たとえば上司フィードバック(トリガー1)では、私が承認したらnina-level.mdの「良い成果物の基準」に何が良かったかを記録し、修正指示を出したらboss-patterns.mdに追記します。次のセッションからNinaはこれらを参照して動きます。

## 上司の判断パターン
| 日付 | 状況 | ニナの提案 | 上司の判断 | 学び |
|------|------|-----------|-----------|------|
| 03-31 | エージェント構成 | Skill自作で頑張る | 却下→Agent委託方式 | ニナは作業者ではなくオーケストレーター |
| 03-31 | タスク完了時 | 「進めますか?」と確認 | 却下 | 自明な次ステップで確認しない |
| 03-31 | コンテンツのトーン | 軽めの語り口 | 修正指示 | 事業企画者の重み・判断根拠を含める |

ガードレールの自動蓄積

失敗が起きるとguardrails.mdに自動記録されます。現時点で4つのガードレールがあり、「事実確認の徹底」「成果物の実在確認」「進捗の定期報告」「機密情報のマスク処理」。全て運用中に起きたインシデントへの対策で、事前に想定して書いたものはありません。ガードレール追加後、同じカテゴリの失敗は再発していません。

結果:Observe → Learn → Improve のループ

セッション中に5つのトリガーに基づいてメモリファイルを即時更新し、次のセッションでNinaがそれを参照して判断する。夜間の学習セッションでは、各Issueの調査で得た発見ログをメモリに転記し、業界パターンとして昇格させます。

大変だったこと

hooksの設計に試行錯誤がありました。最初はセッション終了時(Stop hook)にAIが学習処理を実行する設計にしようとしましたが、hookにはcommand型・prompt型・agent型があり、それぞれできることが違います。prompt型はファイル操作ができず、agent型はセッション終了後にさらにAIを動かすためコストがかかる。

最終的に採用したのは、学習記録はセッション中にNinaが即時実行する設計です。CLAUDE.mdのLearning Protocolに「フィードバックを受けたら次のアクションに移る前に書く」と定義し、hookは command 型のシェルスクリプト3つに絞りました。

  • PreToolUse — 危険なBashコマンド(rm -rf等)と資格情報の露出をブロック
  • PostToolUse — 全ツール実行をログに1行記録
  • Stop — セッション終了マーカーをログに書き込み

Claude Codeのhookには command 型と agent 型の2種類があります。agent 型はセッション終了後にさらにAIを起動するためコストがかかる。hookをシンプルな command 型に保ち、学習のロジックはCLAUDE.mdに集約する設計にしました。

6. 結果

事業企画の仕事で変わったことは3点です。

1. 情報収集の工程がなくなった

/morning-newsでresearcherが3本のニュースと仮説候補を用意します。私がやるのは「使える/使えない」の判断だけです。従来30〜60分かかっていた情報収集の工程がなくなりました。

2. 提案書をゼロから書かなくなった

企業調査 → 課題仮説 → 構成案 → ドラフト。このフローをNinaに指示して、researcherとwriterに委託させ、私はドラフトの修正・加筆をする形に変わりました。

3. 同じミスの再発がなくなった

ガードレール追加後、同じカテゴリの失敗は再発していません。ガードレールに書かれたルールをNinaは必ず守ります。

一方で、仮説の質は「使える」と判断できるものがまだ半分程度です。3つのガードレールと6つの判断パターンしかない現状では当然の結果です。フィードバックの蓄積とともに精度は上がっていく設計なので、運用を続けながら改善していきます。

7. まとめ

Ninaの開発でやったことは、CLAUDE.mdで人格を定義し、3つのサブエージェントを編成し、日中は指示ベース・夜間はシェルスクリプトで自律稼働する運用を組み、5トリガーの学習プロトコルで成長ループを実装した、という4つです。

振り返ると、やっていることは新人育成と同じでした。役割を明確にして、専門知識を渡して、失敗したらフィードバックして、成功パターンを記録して、次に活かす。AIは一度記録したことを忘れないので、フィードバックが蓄積するほど判断の精度が上がります。

コードが書けなくても、Claude Code Maxのサブスクリプション範囲内で、設定ファイル(MarkdownとJSON)だけで「成長するAI秘書」は構築できます。事業企画に限らず、情報収集と仮説構築を繰り返す仕事なら同じアプローチが使えるはずです。

最初から完璧に設計する必要はありません。Ninaも最初はレベルシステムという間違った設計から始まりました。失敗して、学んで、作り直す。そのプロセスをAIにも組み込んだことが、今回の一番の成果だと考えています。

では、おつかめ!

この記事をシェアする

関連記事