debug-connection
CLIとFigJamプラグイン間のWebSocket接続で、図の同期エラーや接続失敗が発生した場合に、その原因を特定し問題を解決するSkill。
📜 元の英語説明(参考)
Debug WebSocket connection issues between CLI and FigJam plugin. Use when diagrams aren't syncing or connection fails.
🇯🇵 日本人クリエイター向け解説
CLIとFigJamプラグイン間のWebSocket接続で、図の同期エラーや接続失敗が発生した場合に、その原因を特定し問題を解決するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o debug-connection.zip https://jpskill.com/download/16764.zip && unzip -o debug-connection.zip && rm debug-connection.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/16764.zip -OutFile "$d\debug-connection.zip"; Expand-Archive "$d\debug-connection.zip" -DestinationPath $d -Force; ri "$d\debug-connection.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
debug-connection.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
debug-connectionフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
WebSocket接続のデバッグ
アーキテクチャ
┌─────────────┐ WebSocket ┌─────────────────┐ postMessage ┌─────────────────┐
│ CLI serve │ ◄───────────────► │ Plugin UI │ ◄───────────────► │ Plugin Main │
│ (Bun) │ ws://...:3456 │ (ui.ts) │ │ (code.ts) │
└─────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ File watcher │ Browser APIs │ Figma API
│ YAML parsing │ WebSocket client │ Canvas rendering
└───────────────────────────────────┴─────────────────────────────────────┘
よくある問題と解決策
1. 接続拒否
症状: プラグインが "Connecting..." を無限に表示する
確認:
# CLI serve は実行されていますか?
ps aux | grep "figram serve"
# ポートが利用可能か確認 (デフォルト: 3456)
lsof -i :3456
解決策: bun run packages/cli/src/index.ts serve diagram.yaml で CLI を起動してください。
2. 接続が切断される
症状: 最初は動作するが、同期が停止する
確認:
- プラグイン UI のコンソールで WebSocket のクローズイベントを確認してください。
- CLI のターミナルでエラーメッセージを確認してください。
解決策: YAML のパースエラーがアップデートをブロックしていないか確認してください。
3. パッチが適用されない
症状: 接続されているが、キャンバスが更新されない
デバッグ手順:
- CLI の出力でパッチの生成を確認してください。
- プラグイン UI のコンソールで受信したメッセージを確認してください。
- プラグイン Main のコンソールでレンダリングエラーを確認してください。
4. YAML パースエラー
症状: CLI が検証エラーを表示する
解決策: YAML の構文とスキーマへの準拠を検証してください。
5. シークレットの不一致
症状: 接続は確立されるが、すぐに閉じられる
確認: --secret フラグの値が CLI とプラグインで一致していることを確認してください。
6. JSON インポートエラー
症状: インポートダイアログにエラーアラートが表示される
確認:
- JSON はオブジェクトである必要があります。
- DSL JSON は
version、docId、およびnodes配列が必要です。 - IR JSON は
version、docId、およびnodesオブジェクトが必要です。
解決策: アラートに表示される検証エラーを修正してください (パス + メッセージ)。
デバッグツール
CLI 側
# 詳細な出力で実行
DEBUG=* bun run packages/cli/src/index.ts serve diagram.yaml
# カスタムポートを指定
bun run packages/cli/src/index.ts serve diagram.yaml --port 8080
# 認証あり
bun run packages/cli/src/index.ts serve diagram.yaml --secret mysecret
プラグイン UI 側
- プラグイン UI を右クリック → Inspect
- コンソールで WebSocket イベントを確認してください。
- Network タブで WS フレームを確認してください。
プラグイン Main 側
- Figma Desktop → Plugins → Development → Open console
- レンダリングエラーを確認してください。
WebSocket プロトコル
プラグイン → CLI メッセージ
// 接続開始
interface HelloMessage {
type: "hello";
docId: string;
secret?: string; // サーバーが認証を必要とする場合
}
// フル同期のリクエスト (例: 再接続後)
interface RequestFullMessage {
type: "requestFull";
docId: string;
}
CLI → プラグイン メッセージ
// ドキュメント全体の同期
interface FullMessage {
type: "full";
rev: number; // 現在のリビジョン番号
ir: IRDocument; // 完全に正規化されたドキュメント
}
// 差分アップデート
interface PatchMessage {
type: "patch";
baseRev: number; // 期待される現在リビジョン
nextRev: number; // 適用後の新しいリビジョン
ops: PatchOp[]; // 適用するオペレーション
}
// エラー通知
interface ErrorMessage {
type: "error";
message: string;
}
パッチオペレーション
type PatchOp =
| { op: "upsertNode"; node: IRNode }
| { op: "removeNode"; id: string }
| { op: "upsertEdge"; edge: IREdge }
| { op: "removeEdge"; id: string };
簡単な診断
# 1. CLI serve を起動 (デフォルトポート: 3456)
bun run packages/cli/src/index.ts serve examples/diagram.yaml
# 2. wscat で WebSocket をテスト (インストールされている場合)
wscat -c ws://localhost:3456
# 3. hello メッセージを送信
{"type":"hello","docId":"test"}
# 4. YAML が有効か確認
bun run packages/cli/src/index.ts build examples/diagram.yaml
メッセージフロー
Plugin CLI
│ │
│──── HelloMessage ───────────►│ (docId, secret?)
│ │
│◄──── FullMessage ───────────│ (rev, ir)
│ │
│ [YAML file changes] │
│ │
│◄──── PatchMessage ──────────│ (baseRev, nextRev, ops)
│ │
│ [Plugin reconnects] │
│ │
│──── RequestFullMessage ─────►│ (docId)
│ │
│◄──── FullMessage ───────────│ (rev, ir)
│ │ 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
WebSocket Connection Debugging
Architecture
┌─────────────┐ WebSocket ┌─────────────────┐ postMessage ┌─────────────────┐
│ CLI serve │ ◄───────────────► │ Plugin UI │ ◄───────────────► │ Plugin Main │
│ (Bun) │ ws://...:3456 │ (ui.ts) │ │ (code.ts) │
└─────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ File watcher │ Browser APIs │ Figma API
│ YAML parsing │ WebSocket client │ Canvas rendering
└───────────────────────────────────┴─────────────────────────────────────┘
Common Issues & Solutions
1. Connection Refused
Symptoms: Plugin shows "Connecting..." indefinitely
Check:
# Is CLI serve running?
ps aux | grep "figram serve"
# Check port availability (default: 3456)
lsof -i :3456
Solution: Start CLI with bun run packages/cli/src/index.ts serve diagram.yaml
2. Connection Drops
Symptoms: Works initially, then stops syncing
Check:
- Plugin UI console for WebSocket close events
- CLI terminal for error messages
Solution: Check for YAML parse errors blocking updates
3. Patches Not Applied
Symptoms: Connected but canvas doesn't update
Debug steps:
- Check CLI output for patch generation
- Check Plugin UI console for received messages
- Check Plugin Main console for rendering errors
4. YAML Parse Errors
Symptoms: CLI shows validation errors
Solution: Validate YAML syntax and schema compliance
5. Secret Mismatch
Symptoms: Connection established but immediately closed
Check: Ensure --secret flag value matches between CLI and plugin
6. JSON Import Errors
Symptoms: Import dialog shows an error alert
Check:
- JSON must be an object
- DSL JSON requires
version,docId, andnodesarray - IR JSON requires
version,docId, andnodesobject
Solution: Fix validation errors shown in the alert (path + message)
Debugging Tools
CLI Side
# Run with verbose output
DEBUG=* bun run packages/cli/src/index.ts serve diagram.yaml
# Specify custom port
bun run packages/cli/src/index.ts serve diagram.yaml --port 8080
# With authentication
bun run packages/cli/src/index.ts serve diagram.yaml --secret mysecret
Plugin UI Side
- Right-click plugin UI → Inspect
- Check Console for WebSocket events
- Check Network tab for WS frames
Plugin Main Side
- Figma Desktop → Plugins → Development → Open console
- Check for rendering errors
WebSocket Protocol
Plugin → CLI Messages
// Connection initiation
interface HelloMessage {
type: "hello";
docId: string;
secret?: string; // If server requires authentication
}
// Request full sync (e.g., after reconnection)
interface RequestFullMessage {
type: "requestFull";
docId: string;
}
CLI → Plugin Messages
// Full document sync
interface FullMessage {
type: "full";
rev: number; // Current revision number
ir: IRDocument; // Complete normalized document
}
// Incremental update
interface PatchMessage {
type: "patch";
baseRev: number; // Expected current revision
nextRev: number; // New revision after applying
ops: PatchOp[]; // Operations to apply
}
// Error notification
interface ErrorMessage {
type: "error";
message: string;
}
Patch Operations
type PatchOp =
| { op: "upsertNode"; node: IRNode }
| { op: "removeNode"; id: string }
| { op: "upsertEdge"; edge: IREdge }
| { op: "removeEdge"; id: string };
Quick Diagnostic
# 1. Start CLI serve (default port: 3456)
bun run packages/cli/src/index.ts serve examples/diagram.yaml
# 2. Test WebSocket with wscat (if installed)
wscat -c ws://localhost:3456
# 3. Send hello message
{"type":"hello","docId":"test"}
# 4. Check YAML is valid
bun run packages/cli/src/index.ts build examples/diagram.yaml
Message Flow
Plugin CLI
│ │
│──── HelloMessage ───────────►│ (docId, secret?)
│ │
│◄──── FullMessage ───────────│ (rev, ir)
│ │
│ [YAML file changes] │
│ │
│◄──── PatchMessage ──────────│ (baseRev, nextRev, ops)
│ │
│ [Plugin reconnects] │
│ │
│──── RequestFullMessage ─────►│ (docId)
│ │
│◄──── FullMessage ───────────│ (rev, ir)
│ │