mcpField
F
frappe-agent-debugger

frappe-agent-debugger

github.com/impertio-studio開発198119 回インストール30 週間前に更新
リポジトリ

frappe-agent-debugger について

Frappe/ERPNext の問題を調査するデバッグエージェントスキルです。エラーと実行機構を分類し、チェックリストやツールを使った診断を案内します。

主な機能

  1. 01Python、JavaScript、DB エラーの分類
  2. 02関連する実行機構の特定
  3. 03パス規則に基づくコードの特定
  4. 04よくあるエラーのチェックリスト
  5. 05bench とブラウザーのデバッグツール
  6. 06デバッグレポート形式の定義

活用シーン

  1. 01トレースバックやインポートエラーの調査
  2. 02フォーム、フック、バックグラウンドジョブの障害診断
  3. 03データベースや権限エラーの調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/impertio-studio/frappe_claude_skill_package --skill frappe-agent-debugger

インストール後、Claude Code で/frappe-agent-debuggerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
.gitkeep
advanced-debugging.md
checklists.md
examples.md
workflow.md

詳細

Frappe デバッグエージェント

エラーを分類し、関連するコードを特定して、対象を絞った診断チェックリストを適用することで、Frappe/ERPNext の問題を体系的に診断します。

目的:試行錯誤によるデバッグをなくし、決定論的な診断ワークフローに従います。

このエージェントを使用する場面

ERROR ANALYSIS TRIGGER
|
+-- Python traceback or error message
|   "ImportError: cannot import name X from frappe"
|   --> USE THIS AGENT
|
+-- JavaScript console error
|   "Uncaught TypeError: frm.set_value is not a function"
|   --> USE THIS AGENT
|
+-- Silent failure (no error, wrong behavior)
|   "Server Script runs but nothing happens"
|   --> USE THIS AGENT
|
+-- Scheduler/background job failure
|   "Job X failed" in scheduler logs
|   --> USE THIS AGENT
|
+-- Build/asset errors
|   "Module not found" or blank page after build
|   --> USE THIS AGENT

デバッグワークフロー

STEP 1: CLASSIFY ERROR TYPE
  Python | JavaScript | Database | Permission | Hook | Scheduler | Build

STEP 2: IDENTIFY THE MECHANISM
  Controller | Server Script | Client Script | Hook | Scheduler | API

STEP 3: LOCATE RELEVANT CODE
  Use Frappe file path conventions to find source

STEP 4: APPLY DIAGNOSIS CHECKLIST
  Run type-specific checklist for the error class

STEP 5: SUGGEST FIX
  Provide corrected code + reference relevant frappe-* skills

詳細な手順については、references/workflow.md を参照してください。

ステップ 1:エラーの分類

エラーの種類判断材料主なツール
Python.py ファイルを含むトレースバックbench console、ログ
JavaScriptブラウザーコンソールのエラー、cur_frm の問題ブラウザーの DevTools
データベースOperationalError、IntegrityErrorbench mariadb
権限frappe.PermissionError、403 レスポンスPermission Inspector
フックbench migrate 後のエラー、誤ったイベントbench doctor
スケジューラーbench doctor の警告、RQ の失敗スケジューラーログ
ビルドアセットの不足、空白ページ、モジュールのエラーbench build --verbose

ステップ 2:仕組みの特定

症状考えられる仕組み
フォームの保存/送信中にエラーが発生するコントローラーまたは Server Script(validate/on_submit)
ページの読み込み時にエラーが発生するClient Script または Web Template
API 呼び出しからエラーメッセージが返されるホワイトリスト登録されたメソッドまたは REST API ハンドラー
バックグラウンドでエラーが発生するスケジューラーイベントまたは frappe.enqueue() ジョブ
bench migrate 後にエラーが発生するフックの設定またはパッチ
bench build 後にエラーが発生するフロントエンドのアセットパイプライン

ステップ 3:ファイルパスの規則

仕組みに応じて、必ず以下の場所を確認してください。

仕組みファイルパスのパターン
コントローラーapps/{app}/{app}/{module}/{doctype}/{doctype}.py
Server ScriptDesk > Server Script list(データベースに保存)
Client ScriptDesk > Client Script list(データベースに保存)
hooks.pyapps/{app}/{app}/hooks.py
スケジューラーapps/{app}/{app}/tasks.py または hooks.py の scheduler_events
ホワイトリスト登録apps/{app}/{app}/{module}/*.py(@frappe.whitelist を検索)
Jinjaapps/{app}/{app}/templates/
パッチapps/{app}/{app}/patches/

ステップ 4:診断チェックリスト(クイックリファレンス)

Python のエラー
エラーパターン考えられる原因修正方法
AttributeError: 'NoneType'frappe.get_doc() が None を返したまずドキュメントが存在するか確認する
ValidationErrorvalidate 内の frappe.throw()メッセージを読む — それが診断結果です
ImportErrorインポートパスの誤り、またはインポートを使用する Server ScriptServer Script ではインポートできません
LinkValidationError参照先のドキュメントが存在しないLink フィールドの参照先が存在するか確認する
TimestampMismatchError同時編集の競合保存前にドキュメントを再読み込みする
DuplicateEntryException一意制約違反命名規則または一意フィールドを確認する
MandatoryError必須フィールドが空保存/送信前にフィールドを設定する
InvalidStatusErrordocstatus の遷移が不正0→1→2 の順序に従う
CircularLinkingError親子関係が自己参照しているドキュメント階層を修正する
JavaScript のエラー
エラーパターン考えられる原因修正方法
frm.X is not a functionAPI の誤り、または古いコードキャッシュをクリアし、API 名を確認する
cur_frm is undefinedフォームのコンテキスト外でコードが実行されているハンドラーパラメーターから frm を使用する
Uncaught Promisefrappe.call に async/await がないコールバックを追加するか、await を使う
frm.doc 内の field undefinedDocType にフィールドが存在しないfieldname のスペルを確認する
フォームが更新されないfrm.refresh_fields() がないset_value の後に更新を追加する
データベースエラー
エラーパターン考えられる原因修正方法
OperationalError: 1054カラムが存在しませんbench migrate を実行します
OperationalError: 1146テーブルが存在しませんbench migrate を実行します
IntegrityError: 1062主キーが重複しています命名/autoname を確認します
IntegrityError: 1452外部キー制約違反ですリンク先のドキュメントが存在しません
OperationalError: 1213デッドロックですトランザクションの範囲を縮小します
InternalError: 1366文字セットに対応しない文字です入力のエンコーディングを確認します
権限エラー
エラーパターン考えられる原因修正方法
frappe.PermissionErrorユーザーにロール権限がありませんRole Permission Manager を確認します
API 呼び出しで 403frappe.has_permission() がない、または @frappe.whitelist(allow_guest=True) の指定が正しくありません権限チェックまたはゲストフラグを追加します
リストビューが空ユーザー権限によるフィルタリングです該当ユーザーの User Permission を確認します
送信できないロールに Submit 権限がありませんDocType に Submit 権限を追加します

デバッグツール

bench console(Python REPL)
bench --site {site} console
# Then:
frappe.get_doc("Sales Invoice", "SINV-00001")  # Inspect document
frappe.db.sql("SELECT name FROM `tabSales Invoice` LIMIT 5")  # Raw SQL
frappe.get_hooks("doc_events")  # Inspect active hooks
frappe.get_all("Server Script", filters={"disabled": 0}, fields=["name", "script_type"])
bench mariadb(SQL シェル)
bench --site {site} mariadb
-- Then:
SHOW CREATE TABLE `tabSales Invoice`;
SELECT * FROM `tabError Log` ORDER BY creation DESC LIMIT 10;
bench doctor
bench doctor  # Check scheduler, workers, background jobs
frappe.logger()
logger = frappe.logger("my_debug", allow_site=True)
logger.info(f"Variable value: {my_var}")
# Logs to: sites/{site}/logs/my_debug.log
ブラウザーの DevTools
Console tab  → JavaScript errors
Network tab  → Failed API calls (check response body for traceback)
Application tab → Session/cookie issues

ログファイルの場所

ログパス内容
Frappe の Websites/{site}/logs/frappe.logWeb リクエストのエラー
Workersites/{site}/logs/worker.logバックグラウンドジョブのエラー
Schedulersites/{site}/logs/scheduler.logスケジュールされたタスクの出力
カスタムロガーsites/{site}/logs/{name}.logfrappe.logger("{name}") の出力
Bench~/.bench/logs/bench.logBench コマンドの出力
Error Log DocTypeDesk > Error LogUI から確認できるエラーレコード
Supervisor/var/log/supervisor/プロセスマネージャーのログ
nginx/var/log/nginx/HTTP リクエスト/プロキシのエラー

よくあるエラーパターンの一覧

エラーメッセージ考えられる原因修正方法関連するスキル
Import not allowed in Server ScriptsServer Script で import を使用していますfrappe.utils.* を使用するか、Controller に移しますfrappe-errors-serverscripts
Cannot read properties of undefinedフォームの読み込み前に JS がフィールドにアクセスしていますfrm.doc.field の null チェックを追加しますfrappe-errors-clientscripts
DocType X not foundアプリのインストールまたはマイグレーションが不足していますbench migrate または bench install-app を実行しますfrappe-ops-bench
Scheduler is not runningWorker が停止していますbench doctor を実行し、Worker を再起動しますfrappe-ops-bench
BrokenPipeError長時間の処理で gunicorn がタイムアウトしています長時間のタスクには frappe.enqueue() を使用しますfrappe-impl-scheduler
ModuleNotFoundErrorPython パッケージがインストールされていませんbench pip install {pkg} を実行しますfrappe-ops-bench
Duplicate name命名規則で名前が衝突していますautoname または naming_series を確認しますfrappe-syntax-doctypes
Insufficient Permission操作に必要なロールがありませんRole Permissions を確認しますfrappe-core-permissions
Cannot edit submitted documentdocstatus=1 のドキュメントを変更していますamend_doc() を使用するか、先にキャンセルしますfrappe-errors-controllers
Invalid columnスキーマが同期されていませんbench migrate を実行しますfrappe-errors-database

エージェントの出力形式

デバッグ出力は必ず次の形式で作成してください。

## Debug Report

### Error Classification
**Type**: [Python/JS/Database/Permission/Hook/Scheduler/Build]
**Mechanism**: [Controller/Server Script/Client Script/Hook/etc.]

### Root Cause
[One-sentence diagnosis]

### Evidence
- [What log/traceback line confirms this]
- [What code path is involved]

### Fix
[Corrected code or configuration change]

### Verification Steps
1. [How to confirm the fix works]
2. [What to check in logs/UI]

### Referenced Skills
- `frappe-*`: [what was consulted]

デバッグの判断ツリー

ERROR RECEIVED
|
+-- Has traceback?
|   +-- YES: Read LAST line first (actual error)
|   |   +-- Contains ".py" --> Python error (Step 4: Python checklist)
|   |   +-- Contains "SQL" --> Database error (Step 4: Database checklist)
|   +-- NO: Check browser console
|       +-- Has JS error --> JavaScript error (Step 4: JS checklist)
|       +-- No error visible --> Silent failure
|           +-- Check Error Log DocType
|           +-- Check frappe.log
|           +-- Add frappe.logger() statements
|
+-- Error after bench command?
|   +-- After migrate --> Hook/schema issue
|   +-- After build --> Frontend asset issue
|   +-- After update --> Version compatibility issue
|
+-- Intermittent error?
    +-- Check scheduler logs
    +-- Check worker logs
    +-- Check for race conditions (TimestampMismatchError)

診断チェックリストの完全版については、references/checklists.md を参照してください。 デバッグ手順の例については、references/examples.md を参照してください。 VS Code DAP の設定、bench console のパターン、mariadb の診断、プロファイリングツールについては、references/advanced-debugging.md を参照してください。

コメント