Upgrade to Pro — share decks privately, control downloads, hide ads and more …

開発をもっとダイナミックに! dynamic workflowsの活用 / more dyna...

Avatar for Logy Logy
August 26, 2026
94

開発をもっとダイナミックに! dynamic workflowsの活用 / more dynamic developing with dynamic workflows

ClaudeCodeMeetupOsaka vol.3

Avatar for Logy

Logy

August 26, 2026

More Decks by Logy

Transcript

  1. 自己紹介 名前: 太田拓也 経歴: SIer -> SaaS開発 -> クラスメソッド(2023/04〜) 業務:

    小売流通業向けSaaSの開発 役割: プレイングマネージャー 備考: 今日のためにClaude Certified Architect Professionalを 取得しようと思ったが間に合わず 2
  2. dynamic workflowsとは 動的ワークフローは、サブエージェントを大規模にオーケストレーションする JavaScript ス クリプトです。 https://code.claude.com/docs/ja/workflows 名前的にはclaude自身が大規模作業のために動的に生成するスクリプトを意図してそうだが、 実は任意のスクリプトを作成して呼び出すことができる。 export

    const meta = { name: 'audit-routes', description: 'Audit every route handler for missing auth checks', } const found = await agent('List every .ts file under src/routes/.', { schema: { type: 'object', required: ['files'], properties: { files: { type: 'array', items: { type: 'string' } } } }, }) const audits = await pipeline(found.files, file => agent(`Audit ${file} for missing authentication checks.`, { label: file }), ) return audits.filter(Boolean) https://code.claude.com/docs/ja/workflows#what-the-saved-script-looks-like 4
  3. 使い分けの基準 7 判断軸 スキル dynamic workflows フローの複雑さ 単純〜煩雑 煩雑〜複雑 人間の介入

    途中で採否を確認する 走り出したら最後まで コスト 作業次第 スキルに比べるとトークン消費が多くなりがち 小規模な手順は素直にスキルを使うほうが安価 途中で人間の判断が必要な処理はワークフローに不向き
  4. スクリプトで直接書ける強み グルーピングしたり、プロンプトで変数を展開したりする処理をスクリプトで直接書ける 可読性は正直良くないですが const batchByFile = new Map() for (const

    f of toVerify) { const key = f.file || '(no-file)' if (!batchByFile.has(key)) batchByFile.set(key, []) batchByFile.get(key).push(f) } const verifyBatches = [...batchByFile.values()].map((findings) => ({ findings, hasCritical: findings.some((f) => f.severity === 'critical'), })) function verifyPrompt(batch) { const file = batch.findings[0].file || '(ファイル不明)' return ( '次のコードレビュー指摘(同一ファイル ' + file + ' に対する ' + batch.findings.length + '件)が' + 'それぞれ偽陽性でないか検証してください。\n\n' + 'リポジトリ(worktree, 変更適用後): ' + workspace + '\n' + '差分ファイル(文脈が必要なら Read): ' + diffPath + '\n' + (priorFindingsPath ? '過去レビューの検証結果ダイジェスト: ' + priorFindingsPath + '(同一の指摘が過去に refuted/confirmed 済みなら、その根拠が現在のコードでも成立するかを実コードで確認して判定に用いる。過去の判定を無検証で踏襲しない)\n' : '') + '蒸留済みの偽陽性抑制ルール: ' + workspace + '/.claude/rules/review*.md が存在すれば Read し、' + '「偽陽性抑制」セクションに合致する指摘は、その前提が実コードで成立していることを確認したうえで isReal=false の根拠にしてよい。\n' + '\n' + '指摘リスト(JSON。_verifyId が各指摘の識別子):\n```json\n' + JSON.stringify(batch.findings) + '\n```\n\n' + '各指摘を1件ずつ独立に実コードを根拠に判定し、指摘ごとに verdicts の1要素を返すこと' + '(verifyId には _verifyId をそのまま入れる。同一ファイルの指摘同士でも判定を引きずらない)。\n' + '不確実時の方針: 指摘の前提が実コードと食い違うと確認できた場合のみ isReal=false。' + '指摘が成立する場合、または確証が持てない場合は isReal=true とし、reasoning に不確実性を明記する(人間への報告のため取りこぼし防止を優先)。' ) } 12
  5. 記録 → 蒸留 → 適用 → 次の実行 記録: ワークフローのRecordフェーズ 蒸留:

    溜まったログを分析し、ルール候補を出 す 適用: 候補の採否を人間が決め、ルールファイ ルに書く 14
  6. フィードバックの適用先 faceted promptingという考え方(AIプロンプトにおける関心の分離) 関心 答える問い 例 Persona 誰として判断するか? 役割定義、専門性 Policy

    何を守るか? 禁止事項、品質基準、優先順位 Instruction 何をするか? 目標、ステップ固有の手順 Knowledge 何を参照するか? 前提知識、ドメイン資料、API仕様 Output Contract どう出すか? 出力構造、レポートテンプレート 参考: https://nrslib.com/faceted-prompting/ 17
  7. テンプレートにfacetを差し込む --name: xxx-admin-coder description: >xxx admin (Next.js/Material-UI/NextAuth) の管理画面実装担当 subagent。 useFetcher+BFF・Custom

    コンポーネント・usePageRole 権限制御等の xxx 固有規約に従い、詳細はリポジトリのコードを Read して実装する。 tools: Read, Grep, Glob, Bash, Write, Edit, WebFetch, Skill skills: - jest-test --{{facet:persona}} {{facet:policies}} # xxx ナレッジ {{facet:knowledges}} このテンプレートにfacetが埋め込まれたカスタムエージェントが生成される 19