📁 現在の開発場所: charmflow_v3/ (nyacore v14.0統一アーキテクチャ)
🔗 プラグインパス: charmflow_v3/plugins/categories/
🌟 メインURL: http://192.168.0.150:10000/charmflow_v3/
✅ 成功事例: text-noteプラグイン(シンプル設計の完璧な実装例)
👉 AI開発ルール(Claude/ChatGPT/Gemini共通)
このルールを守らないとプロジェクトが壊れるにゃ!絶対に読んでにゃ!
👉 プラグイン追加完全ガイド ← 必読
✅ 必須:nyacoreVersion: "v14.0+" 設定(これがないと読み込まれない!)
✅ 必須:シンプル状態管理(this.currentText = '' など)
✅ 必須:NyaCoreクラス継承 or 純粋オブジェクト形式
✅ 必須:charmflow_v3/plugins/配下に配置
❌ 禁止:Map()での状態管理(過剰設計の元凶)
❌ 禁止:pluginIDでの状態管理(プラグインは自律的)
❌ 禁止:複雑なハンドラー作成(シンプルが正義)
- **AIテンプレート(HOW_TO_ADD_PLUGIN_V3_NYACORE14.txt内)**をそのままコピペ
- テキストノートプラグイン
charmflow_v3/plugins/categories/ui/text-note/を参考 - 新nyacore v14.0絶対ルールを全て確認
- plugin-registry.jsのホワイトリスト対応確認
- 🚨 AI迷走防止の絶対ルール
- 🎯 厳格なテンプレート(コピペ専用)
- 🚀 5分クイックスタート
- 📁 ファイル構造詳細
- ❌ AI頻出エラーと解決法
- 📋 成功実例
プラグインを繋いで実用的なフローを作る例がたくさんあるにゃ!
- HTTPリクエスト → JSONフォーマッタ
- GitHub API活用フロー
- 複数API連続実行
Y:\nyacore\debug\ フォルダ内をチェック!
フロー実行やプラグイン動作で問題が発生した場合、必ずデバッグログを確認してにゃ!
- text-noteプラグイン完全動作: 配置・開閉・テキスト永続化すべて成功
- シンプル設計の勝利: this.currentText = '' で完璧な状態管理
- 過剰設計排除: Map()やpluginID管理を完全に排除
- nyacore v14.0対応: nyacoreVersionフィールドで自動読み込み成功
- シンプルが最強: 複雑な仕組みは一切不要
- プラグイン自律性: インスタンス毎に独立した状態管理
- 過剰設計は悪: Map()やID管理は百害あって一利なし
- nyacore哲学の勝利: this.currentValue形式で全て解決
👉 ConnectionManager統合と後方互換性削除計画
🚨 5時間の迷走を終わらせる!二重管理が諸悪の根源!
- ConnectionManager完全削除: UnifiedConnectionManagerに統一
- 全プラグインv15.0+移行: 後方互換性を完全排除
- レガシーコード一掃: 1,600行以上の削減見込み
👉 CharmFlow v3完全純化計画 も参照
- シンプル第一: 複雑化は悪、シンプルは正義
- 1インスタンス=1状態: Map()やID管理は禁止
- プラグイン自律性: 自分の状態は自分で管理
- 過剰設計禁止: this.currentValue形式で十分
「設計とは封じ込めである」 - ChatGPT君からの重要な教訓
- 状態は絶対に直接触らせないこと - 外部からの破壊的アクセス完全禁止
- setup関数、stateオブジェクト、内部変数などは
#またはprivate- Private Fields必須 - 外から変更させたければ明示的なメソッドで - 例: setText(), open(), close()
// ❌ これらは全て外部から破壊可能(超危険!)
projectCore.projectInstances.clear() // 全プラグイン削除攻撃
plugin.pluginDef = maliciousObject // プラグイン乗っ取り
nyaCoreUI.charmFlowCore = hackedCore // システム改ざん
connectionManager.connections.set("fake") // 偽接続注入export class ProjectCore extends NyaCore {
// 🔒 外部アクセス完全禁止(構文レベルでブロック)
#projectInstances = new Map()
#projectConnections = new Map()
#nyaCoreUI
#internalState = {}
// 🌍 安全な公開APIのみ
createPlugin(type, config) {
// バリデーション + 安全な作成
return this.#safeCreatePlugin(type, config)
}
getPluginInfo(pluginId) {
// 読み取り専用データ返却
return this.#getReadOnlyPluginInfo(pluginId)
}
}
// ✅ 使用例
const core = new ProjectCore()
core.createPlugin('text-note', {}) // ✅ OK(公開API)
core.#projectInstances.clear() // ❌ SyntaxError!(完全防止)- 内部状態の完全保護: Private Fields (#記法) でガチガチに封じ込め
- API境界の明確化: 公開メソッドでのみ安全な操作を許可
- 破壊的アクセスの完全防止: 外部からの直接状態変更を構文レベルで禁止
- 保守性と安全性の両立: カプセル化で堅牢なアーキテクチャを実現
「設計とは封じ込めである」- この言葉を胸に刻んで、がちがちカプセル化でCharmFlow v3を要塞にするにゃ!🔒✨
// ❌ 昔のClaude Code君の大失敗
this.editorContents = new Map() // ← 何これ?意味不明
this.editorContents.set(pluginId, text) // ← なぜID管理?
const pluginId = this.meta.instanceId || 'default' // ← 不要!
// ✅ 正しいnyacore哲学
this.currentText = '' // ← これだけで完璧!
this.currentText = e.target.value // ← 直接保存
html: `<textarea>${this.currentText}</textarea>` // ← 直接表示- 「複数の状態を管理したいからMap使おう」→ ❌ 暴走開始
- 「pluginIDで識別した方が安全」→ ❌ 過剰設計の始まり
- 「複雑なハンドラーが必要かも」→ ❌ シンプル性を見失い
- 「この機能は特別だから例外で」→ ❌ 原則違反の言い訳
export class TextNotePlugin extends NyaCore {
constructor() {
super(...)
this.currentText = '' // ← シンプル状態管理の完璧例
}
getExpandedUI() {
return {
html: `<textarea>${this.currentText}</textarea>`, // ← 直接表示
onMount: (element) => {
const textarea = element.querySelector('.text-note-content')
textarea.addEventListener('input', (e) => {
this.currentText = e.target.value // ← 直接保存
})
}
}
}
}- シンプル第一: 複雑化は悪、this.currentValue形式が正義
- 1インスタンス=1状態: Map()やpluginID管理は禁止
- プラグイン自律性: 自分の状態は自分で管理、外部依存禁止
- 過剰設計禁止: 「特別」や「例外」の言い訳は全て疑う
□ Map()を使いたくなったら→過剰設計の始まり!停止!
□ pluginIDで管理したくなったら→自律性違反!停止!
□ 複雑なハンドラーを作りたくなったら→シンプル性違反!停止!
□ 「この機能は特別だから」と思ったら→原則違反!停止!
// ✅ 正しいnyacore v14.0設計
export class MyPlugin extends NyaCore {
constructor() {
super(...)
this.currentValue = '' // ← シンプル状態管理の完璧例
}
getExpandedUI() {
return {
html: `<input value="${this.currentValue}">`, // ← 直接表示
onMount: (element) => {
element.querySelector('input').addEventListener('input', (e) => {
this.currentValue = e.target.value // ← 直接保存
})
}
}
}
}💀 過去のClaude失敗例(絶対真似するな)
// ❌ 昔のClaude Code君の大失敗
this.editorContents = new Map() // ← 何これ?意味不明
this.editorContents.set(pluginId, text) // ← なぜID管理?
const pluginId = this.meta.instanceId || 'default' // ← 不要!やりたいこと → 変更対象ファイル (変更規模)
────────────────────────────────────────
プラグイン検出・読み込み → plugin-registry.js (🔥重要)
プラグイン表示・一覧 → plugin-palette-plugin.js (🔸軽微のみ)
UI操作・イベント処理 → nyacore-ui.js (🔥重要)
接続線・描画 → connection-manager.js (🔶中)
ドラッグ&ドロップ → drag-drop-manager.js (🔸軽微)
右クリックメニュー → context-menu-manager.js (🔸軽微)
- plugin-palette-plugin.js は表示担当 - ゴリゴリ変更禁止!
- plugin-registry.js が読み込み本体 - 重要変更は慎重に
- 責務外の機能追加禁止 - 役割分担を尊重
- 判断に迷ったら上記ガイド参照 - 効率的開発のため
💡 このガイドによりAIの迷走を防ぎ、効率的な開発を実現!
対象ファイル(修正時に自動チェック実行):
✅ voidflow/js/**/*.js - 実装ファイル
✅ voidflow/**/*.html - テストファイル
✅ docs/specifications/architecture/ - アーキテクチャ文書
✅ docs/progress/ - 進捗管理文書
1. 🔍 VoidFlow修正検出 → 自動影響分析実行
2. 📝 影響ドキュメント特定 → 自動TodoWrite実行
3. 🔧 修正作業完了 → 自動整合性チェック実行
4. 📋 ドキュメント更新 → modification-log.md自動記録
5. ✅ 整合性確認完了 → 次の作業へ
CharmFlow修正完了時に必ず確認:
□ modification-log.md記録済み?
□ class-index.md該当クラス説明更新済み?
□ current-status.md状況指標更新済み?
□ architecture-overview.md構造図矛盾なし?
□ 変更による影響ドキュメント全て確認済み?
| 修正ファイル | 影響ドキュメント | 更新内容 | 優先度 |
|---|---|---|---|
| nyacore-ui.js | class-index.md | nyaCoreUI説明・メソッド | 🔴 高 |
| nyacore-ui.js | current-status.md | addEventListener()削減率 | 🔴 高 |
| connection-manager.js | class-index.md | ConnectionManager説明 | 🔴 高 |
| charmflow-core.js | architecture-overview.md | システム構造図 | 🟡 中 |
| 新ファイル作成 | class-index.md | 新コンポーネント追加 | 🟡 中 |
| Intent Handler追加 | architecture-overview.md | Intent一覧更新 | 🟢 低 |
# CharmFlow修正完了時に即座実行
echo "🤖 CharmFlow自動ドキュメント更新チェック実行中..."
echo "📝 影響分析: [修正ファイル] → [影響ドキュメント]"
echo "✅ 自動TodoWrite: ドキュメント更新タスク追加済み"
echo "🔍 整合性チェック: [結果] 確認完了"🎉 これで更新忘れゼロ!Claude Codeが自動でドキュメント整合性を維持するにゃー!
テスト用サーバー: ポート10000番を使用
- URL:
http://192.168.0.150:10000
- IPアドレス: 192.168.0.150
- ポート: 10000(8000番は既に使用中)
- メインURL:
http://192.168.0.150:10000/charmflow_v3/ - テストURL:
http://192.168.0.150:10000
# ✅ STEP1: 既にサーバーが立ち上がってるかチェック
ps aux | grep "python3.*http.server.*10000" | grep -v grep
# ✅ STEP2: 接続テスト(既存サーバー確認)
curl -s http://localhost:10000 > /dev/null && echo "✅ Server already running on port 10000" || echo "❌ Server not running"
# ✅ STEP3: 既に動いてる場合はそのまま使用、動いてない場合のみ起動# 1. 既存サーバー全停止(競合回避)
pkill -f "python3.*http.server" 2>/dev/null || true
# 2. バックグラウンドでサーバー起動(Ubuntu・全インターフェイス)
python3 -m http.server 10000 --bind 0.0.0.0 > /dev/null 2>&1 &
# 3. 起動確認(2秒待機)
sleep 2
ps aux | grep "python3.*http.server.*10000" | grep -v grep
# 4. 接続テスト
curl -s http://localhost:10000 > /dev/null && echo "✅ Server ready on port 10000" || echo "❌ Server failed"# Step 1: 既存サーバー停止
$ pkill -f "python3.*http.server" 2>/dev/null || true
# Step 2: サーバー起動
$ python3 -m http.server 8000 --bind localhost > /dev/null 2>&1 &
# Step 3: プロセス確認
$ sleep 2; ps aux | grep "python3.*http.server.*8000" | grep -v grep
tomoaki 74909 0.0 0.0 27404 19788 ? S 17:40 0:00 python3 -m http.server 8000 --bind localhost
# Step 4: 接続確認
$ curl -s http://localhost:8000 > /dev/null && echo "✅ Server ready on port 8000" || echo "❌ Server failed"
✅ Server ready on port 8000# サーバー状態確認
ps aux | grep "python3.*http.server.*8000"
# サーバー停止
pkill -f "python3.*http.server.*8000"
# サーバー再起動
pkill -f "python3.*http.server.*8000" 2>/dev/null; python3 -m http.server 8000 --bind localhost > /dev/null 2>&1 &# 🔍 サーバー状態確認(最初に実行)
ps aux | grep "python3.*http.server.*10000" | grep -v grep && echo "✅ Server already running" || echo "❌ Server not running"
# 📡 サーバー立て直し(動いてない場合のみ)
pkill -f "python3.*http.server" 2>/dev/null || true; python3 -m http.server 10000 --bind 0.0.0.0 > /dev/null 2>&1 & sleep 2; echo "✅ Server ready: http://192.168.0.150:10000"
# 🧪 テストページ直接アクセス(IPアドレス: 192.168.0.150)
# 🚀 メインアプリ: http://192.168.0.150:10000/charmflow/
# Phase S3テスト: http://192.168.0.150:10000/test-voidflow-phase-s3-integration.html
# Phase Rテスト: http://192.168.0.150:10000/test-voidflow-phase-r-integration-fixed.html
# 簡易テスト: http://192.168.0.150:10000/test-voidflow-simple.html# Step 1: ポート使用状況確認
$ ss -tuln | grep -E ':(8000|10000)'
tcp LISTEN 0 4096 0.0.0.0:8000 0.0.0.0:*
# Step 2: ポート10000でサーバー起動
$ python3 -m http.server 10000 --bind 0.0.0.0 > /dev/null 2>&1 &
# Step 3: プロセス確認
$ sleep 2; ps aux | grep "python3.*http.server.*10000" | grep -v grep
tomoaki 2799008 0.6 0.1 31220 17664 ? S 21:02 0:00 python3 -m http.server 10000 --bind 0.0.0.0
# Step 4: 接続確認
$ curl -s http://localhost:10000 > /dev/null && echo "✅ Server ready on port 10000" || echo "❌ Server failed"
✅ Server ready on port 10000# 🔥 完全リセット(全httpサーバー停止)
sudo pkill -f "python.*http.server" 2>/dev/null || true
sleep 1
python3 -m http.server 8000 --bind localhost > /dev/null 2>&1 &
# 🔍 ポート占有確認
lsof -i :8000
# 🏥 緊急時別ポート使用
python3 -m http.server 8001 --bind localhost > /dev/null 2>&1 &
# その場合: http://localhost:8001 でアクセス- ポート占有エラー: 上記停止コマンドで既存サーバー終了
- 接続エラー: 2-3秒待ってから再試行
- 権限エラー: sudo不要、localhost bindで回避
- 基本テスト:
http://localhost:8000/test-*.html - VoidFlowテスト:
http://localhost:8000/test-voidflow-*.html - Phase別テスト:
http://localhost:8000/test-*-phase-*.html
- ✅ サーバー8000番起動確認
- ✅ 必要ファイル存在確認
- ✅ ブラウザ開発者ツール準備
- ✅ エラーログ監視準備
VoidFlowには高度なファイル出力デバッグシステムが実装されています。 Claude AIが効率的にデバッグできるよう設計された統合システムです。
debug/
├── voidflow-connection-YYYY-MM-DD-xxxxx-yyyyy.log # 接続管理ログ
├── voidflow-system-YYYY-MM-DD-xxxxx-yyyyy.log # システムログ
├── voidflow-ui-YYYY-MM-DD-xxxxx-yyyyy.log # UIイベントログ
├── voidflow-intent-YYYY-MM-DD-xxxxx-yyyyy.log # Intentログ
├── voidflow-performance-YYYY-MM-DD-xxxxx-yyyyy.log # パフォーマンスログ
└── voidflow-error-YYYY-MM-DD-xxxxx-yyyyy.log # エラーログ
// カテゴリ別ログファイル出力
const categories = ['system', 'connection', 'ui', 'intent', 'performance', 'error']
// 使用例
debugLogger.log('connection', 'debug', '🔗 接続作成', { sourceId, targetId })// VoidCore統合デバッグプラグイン(パフォーマンス最適化済み)
// デバッグモード無効時は全メソッドno-op化
setupNoOpMethods() // パフォーマンス影響ゼロ- 場所: メインページ右上「ログセンター」ボタン
- 機能: カテゴリ別ログ表示・一括ダウンロード
- ショートカット: 全ログ自動保存ボタンあり
- ユーザーが「ログ保存したにゃ」と報告
- Claude:
LS /debugで最新ログファイル確認 - Claude:
Readで関連ログファイル分析 - 問題の根本原因特定
- 複雑な問題はChatGPTに相談可能
- ログファイルを共有して詳細分析
- ChatGPTの提案をVoidFlowに実装
- 問題修正後、再テスト実行
- 新しいログで修正確認
- 必要に応じて追加デバッグログ追加
| カテゴリ | 用途 | 重要度 | 例 |
|---|---|---|---|
system |
起動・初期化・プラグイン管理 | 🔥高 | VoidCore初期化、プラグイン登録 |
connection |
接続作成・描画・削除 | 🔥高 | 接続線表示、扇形分散 |
ui |
UI操作・イベント・レスポンス | 🔶中 | クリック、ドラッグ、メニュー |
intent |
Intent処理・変換・配信 | 🔶中 | Intent解析、プラグイン通信 |
performance |
処理時間・メモリ・最適化 | 🔸低 | 描画時間、メモリ使用量 |
error |
エラー・例外・警告 | 🚨最高 | 接続失敗、プラグインエラー |
// 基本形
this.log('🔗 接続作成開始')
// データ付きログ(推奨)
this.log('🔗 接続作成', { sourceId, targetId, type })
// カテゴリ指定
debugLogger.log('connection', 'debug', 'メッセージ', data)const startTime = performance.now()
// 処理実行
const duration = performance.now() - startTime
debugLogger.log('performance', 'info', `処理時間: ${duration}ms`)# チェック項目
grep "🌀 接続描画" debug/voidflow-connection-*.log
grep "扇形分散" debug/voidflow-connection-*.log
grep "SVG element" debug/voidflow-connection-*.log# チェック項目
grep "右クリック" debug/voidflow-connection-*.log
grep "contextmenu" debug/voidflow-ui-*.log
grep "接続モード" debug/voidflow-connection-*.log# チェック項目
grep "プラグイン" debug/voidflow-system-*.log
grep "エラー" debug/voidflow-error-*.log
grep "404" debug/voidflow-system-*.log- ログファイルはセッション毎に生成 - F5で新しいログファイル
- 重いログ出力は自動でno-op化 - パフォーマンス影響なし
- Claudeは必ず最新ログを確認 - タイムスタンプ確認必須
- 問題再現時は必ずログ保存 - エビデンス重要
最近解決した主要問題:
- ✅ 2本接続重複表示 → 扇形分散閾値修正
- ✅ 接続モード継続問題 → 空白クリック検出追加
- ✅ 右クリックメニュー表示 → キャプチャフェーズ実装
- ✅ F5自動保存問題 → enableAutoExport無効化
- 今日〜3日:
docs/progress/next/優先度高い/に記載 - 1週間〜数ヶ月:
docs/progress/next/予定計画/に記載 - アイデア段階:
docs/progress/next/検討中/に記載 - 現在の状況:
docs/progress/current-status/で一元管理 - 禁止: CLAUDE.mdに次回予定を詳細記載
- 目的: C++版との統一・役割分離・情報整理
docs/
├── progress/ # 📊 進捗管理システム
│ ├── next/ # 🔮 今後やること
│ │ ├── 優先度高い/ # 🔥 今日〜3日以内
│ │ ├── 予定計画/ # 📅 1週間〜数ヶ月
│ │ └── 検討中/ # 💭 アイデア段階
│ ├── completed/ # ✅ 完了したタスク
│ │ ├── 2025-07/ # 📦 月別アーカイブ
│ │ ├── major-phases/ # 🏆 Phase完了記録
│ │ └── debug-system/ # 🐛 デバッグシステム開発記録
│ └── current-status/ # 📋 現在の状況
│ ├── voidflow-phase-status.md
│ ├── debug-system-status.md
│ └── overall-progress.md
├── specifications/ # 📚 技術仕様書(参照用)
│ ├── architecture/ # 🏗️ アーキテクチャ設計
│ ├── debug-system/ # 🐛 デバッグシステム仕様
│ ├── connection-system/ # 🔗 接続システム仕様
│ └── plugins/ # 🔌 プラグイン仕様
└── archive/ # 🗄️ 完全アーカイブ
- 統一性: C++版と同じ管理手法
- 明確性: 進捗・仕様・アーカイブの完全分離
- 効率性: current-status/で現況即座把握
- 拡張性: Phase増加に対応可能な設計
- テストファイル:
test-[機能名]-[phase名].html - ドキュメント:
docs/[機能名]_[バージョン]_[言語].md - レポート:
docs/[分析対象]分析レポート.md
[type]: 🚀 [Phase/機能名] - [概要]
✨ 主要変更:
• [変更点1]
• [変更点2]
🎯 [効果・達成]:
• [効果1]
• [効果2]
📊 [数値的成果]:
• [削減行数/改善率など]
🧪 [テスト]:
• [テストファイル名]
🎉 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
master: 安定版- 大型リファクタリング時は一時ブランチ作成検討
- タブ幅: 2スペース
- 文字コード: UTF-8
- 改行コード: LF
- 型チェック:
npm run typecheck(利用可能時) - リント:
npm run lint(利用可能時) - テスト:
npm test(利用可能時)
- 場所:
docs/completed-projects/ - 目的: 終わったプロジェクトの体系的整理・保存
docs/completed-projects/YYYY-MM-DD-project-name/
README.md- プロジェクト完了報告書- 技術仕様・実装詳細ドキュメント
- 削除ファイル情報(該当時)
- ✅ 明確な成果物があり完了したプロジェクト
- ✅ 技術革新・新手法を確立したプロジェクト
- ✅ アーキテクチャに重要な影響を与えた変更
- ✅ 将来の開発に参考価値のあるプロジェクト
2025-07-09-voidflow-phase4-debug-integration/- VoidFlow Phase 4統合デバッグシステム完成2025-07-08-voidcore-purification/- VoidCore純化(3,251行削減)2025-07-06-voidflow-phase4/- VoidFlow Phase 4完成2025-01-26-phase5-initialization-fix/- 初期化競合解決2025-01-07-voidflow-analysis/- VoidFlow分析・統合計画
- ✅ Phase R: VoidCore統一Intentアーキテクチャ (完了)
- ✅ Phase S3: VoidFlowNodePlugin → IPlugin統合 (完了)
- ✅ VoidCore純化プロジェクト: 後方互換性削除・ローカルコピー戦略 (完了)
- ✅ Phase 4: VoidFlow統合デバッグシステム完成 (完了 2025-07-09)
- 🔄 Phase 5準備: 次期開発計画策定中
- 詳細な次回作業は
次にやる.txt参照 - 完了プロジェクトは
docs/completed-projects/に整理済み
Last Updated: 2025-07-09
VoidFlow Phase 4統合デバッグシステム完成 + ドキュメント整理完了