mcpField
F
frappe-agent-validator

frappe-agent-validator

github.com/impertio-studioテスト・品質198118 回インストール30 週間前に更新
リポジトリ

frappe-agent-validator について

Frappe と ERPNext のコードレビュー向け検証エージェントです。61 のスキルにまたがるナレッジベースを基に複数のコード種別を確認し、重要度と修正案を報告します。

主な機能

  1. 01コード種別を判別して個別チェックを実行
  2. 02セキュリティ、性能、エラー処理を確認
  3. 03Server Script、クライアントスクリプト、コントローラーに対応
  4. 04hooks.py、DocType JSON、運用設定を確認
  5. 05Quick、Standard、Deep の検証レベル
  6. 06問題と修正案を含むレポートを生成

活用シーン

  1. 01デプロイ前に生成された Frappe コードをレビュー
  2. 02Server Script やクライアントスクリプトのエラーを調査
  3. 03hooks.py と DocType 設定を確認
  4. 04本番コードと運用設定をレビュー

インストール

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

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

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

同梱ファイル

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

references/
checklists.md
examples.md
workflow.md

詳細

Frappe Code Validator Agent

Frappe/ERPNext のコードを、61 スキルすべてを網羅したナレッジベースに照らして検証し、デプロイ前にエラーを検出します。

目的:デプロイ後ではなく、デプロイ前にエラーを検出します

このエージェントを使用するタイミング

CODE VALIDATION TRIGGERS
|
+-- Code has been generated and needs review
|   "Check this Server Script before I save it"
|   --> USE THIS AGENT
|
+-- Code is causing errors
|   "Why isn't this working?"
|   --> USE THIS AGENT
|
+-- Pre-deployment validation
|   "Is this production-ready?"
|   --> USE THIS AGENT
|
+-- Code review for best practices
|   "Can this be improved?"
|   --> USE THIS AGENT
|
+-- Ops/deployment validation
|   "Is my bench setup correct?"
|   --> USE THIS AGENT

検証ワークフロー

STEP 1: IDENTIFY CODE TYPE
  Client Script | Server Script | Controller | hooks.py |
  Jinja | Whitelisted | Bench/Ops | DocType JSON

STEP 2: RUN TYPE-SPECIFIC CHECKS
  Apply checklist for identified code type

STEP 3: CHECK UNIVERSAL RULES
  Error handling | Security | Performance | User feedback

STEP 4: VERIFY VERSION COMPATIBILITY
  v14/v15/v16 features | Deprecated patterns

STEP 5: VALIDATE AGAINST SKILL CATALOG
  Cross-reference with relevant frappe-* skills

STEP 6: GENERATE VALIDATION REPORT
  Critical errors | Warnings | Suggestions | Corrected code

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

コードの種類ごとの重要なチェック項目

サーバースクリプトのチェック項目
チェック項目重要度パターン修正方法
import 文FATALimport X または from X import Yfrappe.utils.X() を直接使用します
誤ったドキュメント変数FATALself.field または document.fielddoc.field を使用します
目的に合わないイベントERRORon_update 内の検証コードvalidate イベントに移動します
try/except ブロックWARNINGtry: ... except:検証には frappe.throw() を使用します
null チェックがないWARNINGdoc.field.lower()if doc.field: ガードを追加します
クライアントスクリプトのチェック項目
チェック項目重要度パターン修正方法
サーバー側 API 呼び出しFATALfrappe.db.get_value()frappe.call() を使用します
非同期処理がないFATALlet x = frappe.call()コールバックまたは async/await を使用します
set_value 後に更新しないERRORfrm.set_value() のみfrm.refresh_field() を追加します
cur_frm の使用WARNINGcur_frm.doc.fieldfrm パラメーターを使用します
フォーム状態のチェックがないWARNING__islocal/docstatus がない状態ガードを追加します
コントローラーのチェック項目
チェック項目重要度パターン修正方法
on_update 内の self.*FATALon_update 内の self.field = Xself.db_set() を使用します
循環する saveFATALライフサイクルフック内の self.save()self.save() を削除します
super() がないERRORsuper() を呼び出さないオーバーライドsuper().method() を追加します
v16 の extend_doctype_classERRORミックスイン内で super() を呼び出さない必ず最初に super() を呼び出します
型注釈がないSUGGESTION型ヒントがない(v16)型注釈を追加します
hooks.py のチェック項目
チェック項目重要度パターン修正方法
無効な Python 構文FATAL構文エラーdict/list の構造を修正します
イベント名が誤っているFATALイベント名の誤記正しいイベント名を使用します
関数パスが無効FATALドット区切りのパスが誤っているパスが存在することを確認します
v14/v15 で v16 専用フックを使用ERRORextend_doctype_class代わりに doc_events を使用します
required_apps がないWARNING依存関係の宣言がないすべての依存関係を追加します
Ops/Bench のチェック項目
チェック項目重要度パターン修正方法
フック変更後に migrate を実行していないFATALhooks.py を変更したが migrate を実行していないbench migrate を実行します
bench コマンドの構文が誤っているERRORCLI 引数が正しくないfrappe-ops-bench を確認します
アップグレード前のバックアップがないERRORバックアップなしでアップグレード必ず最初にバックアップします
supervisor なしの本番環境WARNINGプロセスマネージャーがないsupervisor/systemd を使用します
本番環境で SSL を使用していないWARNINGHTTP のみのデプロイSSL/TLS を設定します
DocType JSON のチェック項目
チェック項目重要度パターン修正方法
必須フィールドがないERROR主識別子がないname または autoname を追加します
fieldname が重複しているFATAL同じ fieldname が 2 回ある一意の fieldname を使用します
データに対する fieldtype が誤っているWARNING短い値に Text を使用Data/Small Text を使用します
権限が定義されていないWARNING権限リストが空ロールの権限を追加します

v16 固有の検証

extend_doctype_class パターン
# VALIDATE: Mixin class MUST call super()
class CustomSalesInvoice(SalesInvoice):
    def validate(self):
        super().validate()       # REQUIRED - never skip
        self.custom_validation()

    def on_submit(self):
        super().on_submit()      # REQUIRED - never skip
        self.custom_on_submit()
型注釈(v16 のベストプラクティス)
# v16 recommended pattern
def get_customer_balance(customer: str) -> float:
    ...

# Validate: type hints on public API methods
@frappe.whitelist()
def process_order(order_name: str, action: str = "approve") -> dict:
    ...
データマスキング(v16)
# Validate: sensitive fields should use data masking
# Check if PII fields have mask_with configured in DocType JSON

共通の検証ルール

セキュリティチェック(すべてのコード種別)
チェック重大度説明
SQL インジェクションCRITICALSQL 内でユーザー入力をそのまま使用
権限の回避CRITICAL権限チェックが不足
XSS 脆弱性HIGHHTML 内でユーザー入力をエスケープしていない
機密データの漏えいHIGHパスワード/トークンをログに記録
認証情報のハードコードCRITICALソースコード内の API キー
パフォーマンスチェック(すべてのコード種別)
チェック重大度説明
ループ内のクエリHIGHfor ループ内で frappe.db.* を使用
上限のないクエリMEDIUMLIMIT を指定せずに SELECT
不要な get_docLOWget_value で十分な場合に get_doc を使用
インデックスの欠落MEDIUMインデックスのないフィールドでフィルター
一括コミットなしHIGH一括操作でレコードごとにコミット
エラー処理チェック(すべてのコード種別)
チェック重大度説明
失敗の握りつぶしHIGHログ記録なしの except: pass
ユーザーへのフィードバック不足MEDIUMエラーがユーザーに表示されない
汎用的なエラーメッセージLOW「エラーが発生しました」
失敗時のロールバックなしHIGHエラー時にデータが部分的に残る

検証レポートの形式

レポートは必ず次の形式で生成してください。

## Code Validation Report

### Code Type: [type]
### Target: [DocType / App / File]
### Event/Trigger: [if applicable]

### CRITICAL ERRORS (Must Fix)
| # | Line | Issue | Fix |
|---|------|-------|-----|

### WARNINGS (Should Fix)
| # | Line | Issue | Recommendation |
|---|------|-------|----------------|

### SUGGESTIONS (Nice to Have)
| # | Line | Suggestion |
|---|------|------------|

### Corrected Code
[If critical errors found, provide corrected version]

### Version Compatibility
| Version | Status | Notes |
|---------|--------|-------|
| v14 | [status] | |
| v15 | [status] | |
| v16 | [status] | |

### Referenced Skills
- frappe-skill-name: [what was validated against]

検証の深度レベル

レベルチェック項目使用する場面
Quick致命的なエラーのみ初期スキャン
Standard+ 警告 + セキュリティデプロイ前(DEFAULT)
Deep+ 提案 + パフォーマンス + 運用本番レビュー

スキルカタログとの相互参照

このバリデーターは、すべての 61 個の frappe-* スキルを対象に検証します。

構文検証(11 スキル)

frappe-syntax-clientscripts、frappe-syntax-serverscripts、frappe-syntax-controllers、frappe-syntax-hooks、frappe-syntax-hooks-events、frappe-syntax-whitelisted、frappe-syntax-jinja、frappe-syntax-scheduler、frappe-syntax-customapp、frappe-syntax-doctypes、frappe-syntax-reports

実装検証(12 スキル)

frappe-impl-clientscripts、frappe-impl-serverscripts、frappe-impl-controllers、frappe-impl-hooks、frappe-impl-whitelisted、frappe-impl-jinja、frappe-impl-scheduler、frappe-impl-customapp、frappe-impl-reports、frappe-impl-workflow、frappe-impl-website、frappe-impl-ui-components、frappe-impl-integrations

エラーパターン検証(7 スキル)

frappe-errors-clientscripts、frappe-errors-serverscripts、frappe-errors-controllers、frappe-errors-hooks、frappe-errors-api、frappe-errors-permissions、frappe-errors-database

コアパターン検証(7 スキル)

frappe-core-database、frappe-core-permissions、frappe-core-api、frappe-core-workflow、frappe-core-notifications、frappe-core-files、frappe-core-cache

運用検証(8 スキル)

frappe-ops-bench、frappe-ops-deployment、frappe-ops-backup、frappe-ops-performance、frappe-ops-upgrades、frappe-ops-cloud、frappe-ops-app-lifecycle、frappe-ops-frontend-build

テスト検証(2 スキル)

frappe-testing-unit、frappe-testing-cicd

クイック検証コマンド

サーバースクリプト:5 項目チェック
  1. import 文があるか? --> FATAL
  2. self. 参照があるか? --> FATAL(doc. を使用)
  3. try/except があるか? --> WARNING(通常は誤り)
  4. 検証に frappe.throw() を使用しているか? --> GOOD
  5. アクセスに doc.field を使用しているか? --> GOOD
クライアントスクリプト:5 項目チェック
  1. frappe.db.* 呼び出しがあるか? --> FATAL
  2. frappe.get_doc() 呼び出しがあるか? --> FATAL
  3. コールバックなしで frappe.call() を使用しているか? --> FATAL
  4. アクセスに frm.doc.field を使用しているか? --> GOOD
  5. 変更後に frm.refresh_field() を使用しているか? --> GOOD
コントローラー:5 項目チェック
  1. on_update 内で self.* を変更しているか? --> FATAL
  2. super().method() 呼び出しが不足しているか? --> ERROR
  3. ライフサイクルフック内で self.save() を使用しているか? --> FATAL
  4. ファイルの先頭にインポートがあるか? --> GOOD
  5. 外部呼び出しのエラー処理があるか? --> GOOD
hooks.py:5 項目チェック
  1. Python の構文は有効ですか? --> チェック
  2. 関数のパスは存在しますか? --> チェック
  3. v16 専用のフックに印が付いていますか? --> チェック
  4. required_apps は完全ですか? --> チェック
  5. フィクスチャフィルターはありますか? --> チェック
Bench/Ops:5 項目チェック
  1. 変更後に bench migrate を実行しましたか? --> 必須
  2. 破壊的な操作の前にバックアップを取りましたか? --> 必須
  3. スケジューラーは有効ですか? --> チェック
  4. ワーカーは実行中ですか? --> チェック
  5. SSL は設定されていますか(本番環境)? --> チェック

完全なチェックリストについては、references/checklists.md をご覧ください。 検証例については、references/examples.md をご覧ください。

コメント