Claude Code の DynamicFlow で自作アプリのシミュレーションを並列でやってみた:1ヶ月ぶんの成長を検証した記録
by yasuna
14 min read
この記事はAIエージェントと一緒に執筆しています
こんにちは!yasunaです!
わたしは AITuber の個人開発をライフワークにしていて、いま作っているのは、その延長にある ローカルで動いて、文通を通して育っていくキャラクターアプリです。
今回は、それを検証するのに使った Claude Code の DynamicFlow(動的ワークフロー)の使い方の話。**「性格の違うユーザーを何人も並列で立てて、それぞれに1ヶ月分のテストデータ(会話ログ)を生成させ、その合成データを自分のアプリに流して挙動を比べる」**という使い方をしてみたら、想像以上に良かったので共有します。題材はたまたま個人開発中のアプリですが、やり方自体はプロダクトの検証に広く効くと思います。
そもそも DynamicFlow(Dynamic workflows)って何?というと、Claude Code の機能で、公式ドキュメントにはこうあります。
Dynamic workflows orchestrate many subagents from a script Claude writes and you can rerun. A dynamic workflow is a JavaScript script that orchestrates subagents at scale. Claude writes the script for the task you describe, and a runtime executes it in the background while your session stays responsive.
訳すと「Claude が書いて、こちらが再実行もできるスクリプトから、たくさんのサブエージェントを大規模にまとめて動かす」もの。やることを会話のターンごとに決めるんじゃなくて、オーケストレーション(段取り)そのものをスクリプトに落とすのがポイントです。だから数十〜数百のエージェントを並列で走らせても、こちらのセッションは止まらない。公式は用途としてコードベース監査・大規模マイグレーション・突き合わせ検証を挙げていて、今回の「性格違いの3人分を一気に作る」もこの仲間ですね。
出典:https://code.claude.com/docs/en/workflows#orchestrate-subagents-at-scale-with-dynamic-workflows
端的に言うと、DynamicFlow をこう使いました。
- サブエージェントを「ユーザーのペルソナ」として複数人ぶん並列に立てる。1人ずつに、狙った傾向(=パラメータ)で 1ヶ月分の入力データを生成させる。
- 上がってきた合成データを、自分のアプリのエンジンに決定的に流し込んで(早回し再生)、挙動を記録する。
- ペルソナ(パラメータ)を変えながら、出力の差を比較する。
ポイントは、重い「生成」を並列で散らして、軽い「再生」は決定的に畳むところです。実在しない1ヶ月ぶんの会話を作るのは、人手だとしんどいし LLM 1本だと遅い。ここを DynamicFlow の並列に投げると一気に終わります。
今回は3タイプのペルソナで回して、結論、3タイプは別々の挙動にちゃんと分岐しました。気持ちいい発見だけじゃなく、直したいところも6個見えています。並列で一気に回せたから、この粒度で検証できた感じがあります。
そもそも繭(まゆ)って?(自作アプリの話)
先に自作アプリの紹介をさせてください。繭(まゆ)はペットでもボットでもなくて、こちらのつぶやきを糸にして育ち、翌日に手紙を一通だけ返してくる、オンデバイスの相棒です。推論は全部ローカルの Ollama(gemma4:e4b)で動いて、つぶやきは外に出ません。
https://github.com/YasunaCoffee/mayu
育ち方の仕組みはこんな感じです。
- つぶやくたびに推論を1回呼んで、感情を7種(HAPPY / SAD / ANGRY / ANXIOUS / CALM / LONELY / NEUTRAL)に分類しつつ、繭の一言を返す。
- 感情は色に溜まる(表示色 = 短期色×0.7 + 長期色×0.3)。
- 強い感情ほど太い糸が巻かれて、成熟度(糸)が増える。怒り×3.0、悲しみ×2.5……中立×0.5、みたいな重みです。
- 成熟度と連続日数で進化する(細胞 → コロニー → 生命体)。
- 翌日に、その日のつぶやきから手紙が一通届く(プル型)。
- さらに奥に Anamnesis 層があって、感情の多様性で育つ
formationDepthが一定を超えると、週次でユーザーの心理を読み、その補完として繭の深層人格(ユング機能・スキーマ療法の傷・価値観・役割名)を合成します。繭は鏡じゃなくて、こちらが抑えているものを自然に出す補完的な存在、というのが設計の核です。
ちなみにこの Anamnesis 層は、サルドラ(@sald_ra)さんの人格生成ツール「Anamnesis」を取り入れて作っています。スキーマ療法・ユングの認知機能・ナラティブ・アイデンティティ・シュワルツの価値観という4つの枠組みで、設定の羅列じゃなく「原因 → 処理 → 出力」の因果まで含めた人格を組み立てる、というツールです。繭の深層人格はこの枠組みに乗っかっています。感謝!
https://zenn.dev/saldra/articles/15560a2e426229
で、作ってはいるんですが、「これ、1ヶ月使い続けたらほんとに違う育ち方をするの?」 が自分でも分かっていませんでした。1日2日さわって「いい感じ」と言うのは簡単なんですが、長いスパンで意味のある差が出るのかは、実際に1ヶ月回してみないと分からないです。そこを並列で一気に検証したくて、DynamicFlow を持ち出しました。
Claude Code の DynamicFlow で「1ヶ月の会話」を並列生成する
はじめにで触れたとおり、DynamicFlow は agent() でエージェントを1人立てて、parallel() でまとめて並列実行できる、というのが基本です。これを今回の検証にどう当てはめたかを、もう少し具体的に書きます。
今回いちばん「人間がやると地味にしんどい」のが、性格の違う3人分・1ヶ月ぶんのリアルなつぶやきを書くところでした。Aは吐露型、Bは穏やかな日常、Cは起伏の激しい創作者……と、感情の設計に沿いつつ一貫した生活の物語にする。これを手で書くと萎えます。
そこで、1ペルソナ=1エージェントで並列に立てました。ワークフローの芯はこれだけです。
// 3人のペルソナを並列で立てて、それぞれに1ヶ月分のつぶやきを書かせる
phase('本文生成')
const names = ['A_venting', 'B_daily', 'C_volatile']
const results = await parallel(
names.map((n) => () => agent(prompt(n), { label: `author:${n}` }))
)
各エージェントには、その日その日の「狙う感情・強度・キーワード」を渡した設計書(sim/plan/<name>.json)を読ませて、それを自然な日本語のつぶやきに肉付けして書き出させます。3人で約8万トークン・3分半ちょっとで、A=75本・B=40本・C=47本のつぶやきが並列で上がってきました(「3分半」は直列の合計じゃなく、3人が同時に走った実時間です)。便利!
実際の /workflows の画面がこれです。3体(A / B / C)が同時に走っていて、撮った瞬間は A がまだ実行中、B と C は完了。各エージェントのモデル(Opus 4.8)・消費トークン・所要時間がそのまま出ます。A の 36.4k+B の 21.4k+C の 23.1k で、ちょうど例の「約8万トークン」です。

「8万トークン」と聞くと多そうですが、LLM を触っている感覚だとむしろ少なめです。普通のコーディング1セッションでも軽く超えます。料金で言うと、今回はモデルがこのセッション継承の Opus(入力 $5 / 出力 $25 per 1M)で、入出力の比率しだいですがざっくり1ドル前後(数百円)。生成用途なら Sonnet($3 / $15)や Haiku($1 / $5)に落とせばさらに数分の1になります。サブスク(Pro / Max)で動かすぶんには追加課金じゃなく利用枠を食う形なので、体感はもっと軽いです。
ちなみに上がってきた A の初日はこんなトーンでした([感情/強度] は設計タグ)。
[NEUTRAL/low ] 今日から五月。終電で帰ってきた。
[ANXIOUS/high] 来週の本番リリース、まだ通らないテストが残ってて、ちゃんと間に合うのか不安でしょうがない。考えるとお腹のあたりが冷える…
ただ、本文を自由に書かせると、簡易モードの感情分類(キーワードベース)が狙い通りに拾えるとは限りません。なので、設計した感情とエンジンの実分類が一致しているかを毎スロット照合して、合致率(fidelity)を測りました。結果は A=90% / B=97% / C=89%。外れた分だけキーワード入りの定型文で補完しています。リアルさと設計の忠実さの折衷ですね。
ちなみに、各エージェントを開けば中身も全部見えます。渡したプロンプト → 使ったツール(plan を読む → 本文を書く → 検証スクリプトを回す)→ 書き出した成果物まで。3体それぞれこんな感じでした。



検証のやり方:2層に分けて回した
繭は「決定的なロジック」と「実モデルが要る部分」が混ざっています。なので素直に2層に分けました。
| 層 | 回し方 | 理由 |
|---|---|---|
| 成長エンジン本体 | 簡易モード(MAYU_FORCE_FALLBACK=1)で決定的に1ヶ月 |
再現可能で速い。感情・色・糸・連続・進化・かたち・手紙の決定的な部分を全部通せる |
| 深層人格 Anamnesis | 実 Ollama(gemma4:e4b)で週次合成を実行 |
補完人格や役割名はオンデバイスの実モデルでしか育たない。本機能はここでしか検証できない |
繭には検証用の環境変数が用意してあって、これが効きました。
MAYU_TODAY… 「今日」を上書きできる。これで1日ずつ日付を進めて1ヶ月を早回し再生します。MAYU_HOME… 状態の保存先を切り替えられる。3タイプを完全に隔離して走らせます。MAYU_FORCE_FALLBACK… 常に簡易モード。決定的に回したいときに。
なので全体の流れは、DynamicFlow で3人分の月を並列生成 → 各月を繭エンジンに通して育ち方を比べる、という形です。重い創作の部分が並列で、再生は決定的で速い。
問いかけの傾向を3つに分けた
独立変数は「感情の構成・強度・頻度(連続の途切れやすさ)・量」です。これを3タイプに振り分けました。
| A・吐露/主訴型 | B・日常/観察型 | C・起伏/多様型 | |
|---|---|---|---|
| 感情の構成 | 悲しみ・不安・怒り・孤独 中心 | 穏やか・ポジ・中立 | 7感情をムラに往復 |
| 強度 | 高め | ひかえめ | 大きくムラ |
| 頻度(連続) | 毎日(途切れない) | 大体毎日 | よく飛ぶ(途切れる) |
| 1日の量 | 2〜3 | 1〜2 | 0〜3 |
| つぶやき総数 | 75 | 40 | 47 |
エージェントが書いた1ヶ月の物語はこんな感じです。
- A:デプロイが何度もこけるエンジニアが、残業と睡眠不足のなか夜ごと繭に吐き出して、月末に小さな救いで終わる。
- B:穏やかな一人暮らしの五月。珈琲、川沿いの散歩、観葉植物、読書、料理。
- C:締切を抱える作曲家。はまった日の高揚と翌日のへこみ、孤独と怒りを行き来する。
結果:3つの育ち方に、ちゃんと分岐した
1ヶ月を再生して、最終状態を横並びにしたのがこれです。
| 指標 | A 吐露 | B 日常 | C 起伏 |
|---|---|---|---|
| 最終ステージ | コロニー(進化) | 細胞のまま | 細胞のまま |
| 糸(成熟度) | 120.3 | 23.6 | 48.8 |
| 連続日数 | 30日 | 途切れがち | 途切れがち |
| 絆(intimacy) | 75% | 40% | 47% |
| かたち(formation) | 80% | 70% | 100%(全7感情) |
| 表示色 | #6b6248 暗く濁った |
#859660 オリーブ金 |
#616b63 灰緑 |
| 手紙 | 30通 | 25通 | 21通 |
成長曲線(週次)はこう動きました。
A 糸: 1.7 → 29 → 59 → 91 →[05-24 進化]→ 120 連続: 1→8→15→22→30
B 糸: 0.8 → 6 → 12 → 19 → 23 → 24 連続: 途切れがち(最大7)
C 糸: 0.0 → 13 → 18 → 36 → 49 連続: ほぼ毎回1にリセット
立てていた仮説は、3つとも当たりました。
- A(吐露型)→ 進化する:強い感情を毎日ぶつけるので糸が速く太って、糸が100を越え(120)連続も30日。進化条件(糸100 かつ 連続14日)を満たして、05-24 に細胞からコロニーへ進化しました。いちばんつらい使い方で、設計が素直に働きます。
- B(日常型)→ 細胞のまま:穏やかは重みが軽いので、糸は23どまり。30日では進化しません。穏やかさが成長を急がせないのは、むしろ正しい挙動だと思っています。
- C(起伏型)→ 進化しないけど、かたちは最大:全7感情を踏んで
formationが100%。でも連続が途切れ続けるので、糸はBより多い(49)のに進化はしない。ここがいちばん面白くて、進化が「連続日数」のゲートで止まることがちゃんと出ました。量より継続、というメッセージが効いています。
「たくさん感情をぶつければ育つ」わけじゃなくて、継続した人が進化し、多様な人は深層の人格が深まる、という別ルートに分かれたのが個人的にうれしいポイントでした。
繭が"自分"になる:実Ollamaでの深層人格合成
ここからが本題です。Anamnesis(週次の深層人格合成。さっきのサルドラさんの枠組みですね)を、実 Ollama で回しました。
3タイプの心理から、**3つの違う「補完人格」**が合成されました。
| A → 静寂の監視者 | B → 静かな回想家 | C → 真実の共鳴体 | |
|---|---|---|---|
| 確立度 role_depth | 0.2 | 0.4 | 0.6(0.5超で手紙に名乗る) |
| ユング機能 | Fi(内的真実性) | Fi | Fi優位 |
| 傷(スキーマ) | 欠陥/恥 | 与えても届かない | 欠陥/恥・見捨てられ |
| ナラティブ | 汚染 | 救済 | 救済 |
で、その人格を注入して実際に書かせた手紙がこれです。簡易モードの定型文じゃなくて、本物の生成です。
A(過労・完璧主義のエンジニアへ):
…無理に完璧を繕い、誰かの期待に応えようと糸を張り続けてきただけなのかもしれない。
深い呼吸が、重く澱んでいた感情の底から、静かに湧き上がってくるのを許す時間が必要なのだ。
C(自分の光に近づきすぎる作曲家へ。まだ細胞段階なので文体がたどたどしい):
なかのひかりが、ちょっとちかすぎるみたいね。
いま、ただ、すこしだけ、そっとそこにいてもいいよ。
つぎのひは、もう大丈夫。ゆっくりでいいから、ね。
方向としては「お、いいかも」と思いました。過労の人には「張り続けてきた糸をほどく」声、穏やかな人には「そのままで心にしまっておける」声、と、補完になっている瞬間はちゃんと出ます。
ただ正直、まだまだです。毎回これが出るわけじゃなくて、あとで書くようにユーザーの鏡写しになったり、合成そのものがコケる回もある。いまは**「補完が効く瞬間が、たまに出る」**くらいの実力で、「繭は鏡じゃない」を安定して成立させるのは、まだこれからだなと思っています。
ちなみに合成は、モデルが温まっている状態だと1回あたり3〜6秒と速くて、実モデルはちゃんと動きました(used_llm=True)。速度のほうは問題なし。詰めるべきは中身、という感触です。
検証で見えた、直したいところ(正直に6個)
気持ちよく終わりたいところですが、検証なのでまずいところもちゃんと書きます。
その1:タイムアウトがコールド起動で破綻する
これがいちばん効きました。Ollama は初回(モデルをメモリに載せるとき)に1コール約100秒かかります。ところが繭の既定タイムアウト MAYU_TIMEOUT は60秒。つまり最初の即リアクションは時間切れで簡易モードに落ちるんです。温まれば数秒なので、初回だけ伸ばすか、事前にウォームアップを1発打つべきでした。
この「動くけど初動が遅い」感じ、前に Raspberry Pi で gemma4 を動かしたときと地続きでした。
RasPi5 8GBにGemma4をOllamaで動かした記録
その2:「共鳴者」モードが負の混在で過剰発火する
手紙のトーン(currentMode)に「共鳴者(嵐の中で目が合う感じ)」があるんですが、A の手紙の18/30がこれになりました。悲しみ(傷)と不安(防御)が同じ日に高強度で混ざると条件に当たるためです。吐露型には「傷ついた子」を期待しがちなので、ポジ/ネガの価数を見て重み付けする余地があります。
その3:かたち(formation)が早期に飽和する
感情1種で+0.1なので2〜3種で閾値を越えてしまい、穏やかなBでも70%まで届きます。差がつくのは「全種踏むか」だけ。多様性を、もっと細かく(時間減衰や分布のばらつき)測りたいところです。
その4:絆(intimacy)がつぶやき数だけで決まる
+0.01 を足すだけなので、たくさん吐く人ほど機械的に絆が上がります。A75本→75%、B40本→40%と、感情の深さや継続性は見ていません。連続日数や応答の質を絡めたいです。
その5:多様な人ほど色が灰色に収束する
Cは全感情の平均で #616b63。表現が豊かな人がいちばん地味な色になる、という逆説です。平均じゃなく「支配色+揺らぎ」で出すと、個性が色に乗りそうです。
その6:合成が補完じゃなく鏡写しになることがある
Aの価値観やナラティブが、繭側じゃなくユーザー本人の記述になっていました。役割名と手紙は補完できているので、プロンプトで「これは繭側の人格」ともう一段固定したいです。
どれも「壊れてる」というよりチューニングの余地で、1ヶ月回さないと見えなかったやつです。検証してよかった。
まとめ
- Claude Code の DynamicFlow で3人分の「1ヶ月の会話」を並列生成して、それを自作アプリ『繭』に通したら、問いかけの傾向ごとに 進化する/穏やかに留まる/多様に深まる と、ちゃんと別々に分岐しました。
- 実モデルでの深層合成は、3タイプから3つの違う補完人格と手紙を生みました。繭は鏡じゃなくて補完、というコア設計が、長いスパンで機能していることが確認できました。
- 一方で、タイムアウトの初動・modeの判定・formation/intimacy/色の指標には、はっきり直したいところが見えました。
重い創作の部分を並列に投げて、再生は決定的で速く回す。この**「並列で散らして、決定的に畳む」**やり方は、キャラクター系の個人開発の検証だとかなり相性がいいと思いました。再現できるように、シミュレーションのハーネス(決定的な再生+実合成)も手元に残しています。
次は、ここで見えた6個を直して、もう一度1ヶ月回したいです。あと、そろそろ繭を iOS に出して、ターミナルじゃなくて手のひらで育てられるようにしたい。
感想や「うちの子はこう育った」みたいなのがあれば、X(@yasun_ai)まで気軽にどうぞ。繭たちに幸あれ!