mcpField
F
frappe-core-utils

frappe-core-utils

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

frappe-core-utils について

Frappe 開発者が Python と JavaScript のユーティリティ関数を調べるためのリファレンスです。日付、数値、文字列、検証などの API を用途別に整理し、バージョン差や典型的なアンチパターンも示します。

主な機能

  1. 01用途別の Python ユーティリティ一覧
  2. 02日付と時刻の API を整理
  3. 03数値、通貨、文字列関数を掲載
  4. 04JavaScript ユーティリティを参照
  5. 05v14、v15、v16 の関数差を比較
  6. 06標準ライブラリとの使い分けとアンチパターンを説明

活用シーン

  1. 01日付や金額の書式設定関数を探す
  2. 02入力変換やデータ検証を行う
  3. 03Server Script で利用可能な関数を選ぶ
  4. 04標準ライブラリ関数の誤用を確認

インストール

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

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

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

同梱ファイル

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

references/
anti-patterns.md
date-time-functions.md
javascript-utilities.md
number-money-functions.md
string-validation-functions.md

詳細

Frappe ユーティリティ関数

クイックリファレンス:Python

用途関数戻り値
現在の日付nowdate() / today()datetime.date
現在の日時now_datetime()datetime.datetime
日付文字列を解析getdate(str)datetime.date
日時文字列を解析get_datetime(str)datetime.datetime
日数を加算add_days(date, n)datetime.date
月数を加算add_months(date, n)datetime.date
日付の差date_diff(end, start)int(日数)
ユーザー向けにフォーマットformat_date(dt)str(ユーザーのロケール)
相対時間pretty_date(dt)str(「2 hours ago」)
安全な浮動小数点数flt(val, precision)float
安全な整数cint(val)int
安全な文字列cstr(val)str
安全な真偽値sbool(val)bool
安全な除算safe_div(a, b)float [v15+]
金額のフォーマットfmt_money(amt, currency)str
金額を文字で表記money_in_words(amt, cur)str
HTML を除去strip_html(text)str
リストを文章に変換comma_and(items)str(「a, b, and c」)
メールアドレスを検証validate_email_address(e)str または ""
URL を検証validate_url(url)bool
JSON を解析parse_json(s)Any
ファイルのパスget_files_path(is_private)str
サイトのパスget_site_path(*parts)str
重複のないリストunique(seq)list
ハッシュgenerate_hash(s, length)str

すべてのインポート:コントローラー/ホワイトリスト登録されたメソッドでは、from frappe.utils import nowdate, flt, ... を使用します。 Server Scripts では、frappe.utils.nowdate() を直接使用してください。インポート文は使用できません。


判断ツリー:「どの関数を使えばよいですか?」

Need a date/time value?
├─ Current date → nowdate() or today()
├─ Current datetime → now_datetime()
├─ Parse a string → getdate() or get_datetime()
├─ Add/subtract time → add_days(), add_months(), add_to_date()
├─ Difference → date_diff() (days), month_diff(), time_diff_in_seconds()
├─ Period boundary → get_first_day(), get_last_day(), get_quarter_start()
└─ Display to user → format_date(), format_datetime(), pretty_date()

Need a number?
├─ Convert safely → flt(), cint(), cstr(), sbool()
├─ Round → rounded() (banker's rounding)
├─ Safe divide → safe_div(a, b, default=0) [v15+]
├─ Format money → fmt_money(amount, currency)
└─ Money to words → money_in_words(amount, currency)

Need string processing?
├─ HTML → strip_html(), escape_html(), is_html()
├─ Join list → comma_and(), comma_or(), comma_sep()
├─ Markdown ↔ HTML → to_markdown(), md_to_html()
└─ Mask sensitive → mask_string(input, show_first=4) [v16+]

Need validation?
├─ Email → validate_email_address(email, throw=False)
├─ URL → validate_url(url, valid_schemes=["https"])
├─ Phone → validate_phone_number(phone, throw=False)
├─ JSON → validate_json_string(s)
└─ IBAN → validate_iban(iban) [v16+]

Need file/path?
├─ Public files → get_files_path()
├─ Private files → get_files_path(is_private=True)
├─ Site directory → get_site_path("private", "backups")
├─ Bench root → get_bench_path()
└─ File size → get_file_size(path, format=True)

重大なアンチパターン

frappe.utils にある場合は、Python 標準ライブラリを絶対に使用しないでください
絶対に使用しない(標準ライブラリ)必ず使用する(frappe.utils)理由
datetime.datetime.now()now_datetime()システムのタイムゾーンを無視します
datetime.date.today()nowdate()システムのタイムゾーンを無視します
float(val)flt(val, precision)None/空の場合にエラーになります
int(val)cint(val)None/空の場合にエラーになります
round(val, 2)rounded(val, 2)丸め処理に一貫性がありません
val1 / val2safe_div(val1, val2)ZeroDivisionError [v15+]
json.loads(s)parse_json(s)None/空の場合にエラーになります
json.dumps(obj)frappe.as_json(obj)シリアライズに一貫性がありません
"{:,.2f}".format(a)fmt_money(a, currency)ロケール/通貨を無視します
os.path.join(...)get_site_path(...)マルチテナンシーに対応できません
", ".join(items)comma_and(items)「and」のローカライズに対応していません
dt.strftime(fmt)format_date(dt)ユーザー設定を無視します
re.sub(r'<.*?>', '', h)strip_html(h)エッジケースに対応できません
Server Script サンドボックス
# ❌ NEVER in Server Scripts
from frappe.utils import nowdate, flt
import json

# ✅ ALWAYS in Server Scripts (no imports allowed)
today = frappe.utils.nowdate()
amount = frappe.utils.flt(doc.amount, 2)
data = frappe.parse_json(doc.json_field)

JavaScript クイックリファレンス

用途関数
HTML をエスケープfrappe.utils.escape_html(txt)
HTML をテキストに変換frappe.utils.html2text(html)
HTML かどうかを確認frappe.utils.is_html(txt)
JSON を解析frappe.utils.parse_json(str)
URL を検証frappe.utils.is_url(txt)
タイトルケースに変換frappe.utils.to_title_case(str)
「and」で結合frappe.utils.comma_and(list)
重複のない配列frappe.utils.unique(list)
クリップボードにコピーfrappe.utils.copy_to_clipboard(txt)
要素までスクロールfrappe.utils.scroll_to(el)
モバイルかどうかfrappe.utils.is_mobile()
スロットルfrappe.utils.throttle(fn, delay)
デバウンスfrappe.utils.debounce(fn, delay)
値をフォーマットfrappe.format(value, df, options, doc)
期間を表示frappe.utils.get_formatted_duration(secs)

バージョンの違い

機能v14v15v16
safe_div()--追加あり
duration_to_seconds()--追加あり
guess_date_format()--追加あり
validate_duration_format()--追加あり
mask_string()----追加
validate_iban()----追加
validate_name()----追加
safe_json_loads()----追加
groupby_metric()----追加
コア関数ありありあり

リファレンスファイル

コメント