カスタムアプリ

本記事ではカスタムアプリの基本と仕組みをわかりやすく解説します。

6分
最終更新: 2025年9月8日

1.はじめに

ERPNextには、標準で多くの機能がそろっています。
販売管理、会計、人事、在庫、生産管理、複雑な権限設定、ワークフローなど、会社の仕事に必要な機能がひと通り用意されています。

ただし、会社ごとに事情が違うため、カスタマイズしたくなることも多いです。
実際、日本ではERP導入の9割以上でカスタマイズが行われています。
一般的なERPではカスタマイズを入れると、コア部分のバージョンアップやパッチ適用のときに「衝突(コンフリクト)」が起きやすくなります。

ERPNextでは、カスタマイズを「本体」ときれいに分ける仕組みがあり、壊れないカスタマイズ が可能です。 (仕組みの詳細は別記事 壊れないカスタマイズ をご覧ください。)
この特徴が、ERPNextの大きな強みのひとつです。

ERPNextで用意されている「カスタマイズ」 には、次のようなレベルがあります:

  • 1.カスタムフィールド — フォームに新しい項目を追加する
  • 2. カスタムフォーム — 請求書や見積書のレイアウトを変更する
  • 3. クライアントスクリプト — 入力画面の動きをカスタマイズする(JavaScript)
  • 4. サーバースクリプト — 業務ロジックの自動化・裏側の制御を担う(Python)
  • 5. カスタムアプリ — より大きな拡張や独自機能を実装する
🧩

1.フィールド

既存フォームに新項目を追加

📋

2.フォーム

入力画面のレイアウトや表示形式を調整

💻

3.スクリプト(Client)

入力画面の動作をJavaScriptで制御

🖥️

4.スクリプト(Server)

保存時やイベント時にサーバー側で処理を追加

🧪

5.アプリ

独立した拡張アプリとして機能を実装

この中で一番パワフルなのが 5.カスタムアプリ です。
独自のDocType(データ構造)を作ったり、標準機能を上書きしたり、翻訳や外部API連携をまとめたりできます。

今回の記事では、ERPNextの日本語翻訳を実装する仕組みを紹介します。


2. カスタムアプリ(Custom App)とは?

カスタムアプリ(Custom App)は、ERPNextのカスタマイズ方法の中で、もっとも強力で柔軟な手段です。
単なる項目追加や画面調整にとどまらず、「ひとつのアプリケーション」として独立した領域に機能をまとめられます。

カスタムアプリでできること・できないこと

すべての修正をカスタムアプリにまとめられるのでしょうか? その答えは、アンチパターンなどの例外は存在するものの、ほぼ「できる」となります。

  • できること

    • GUIベース(クライアント/サーバースクリプト)でやったカスタマイズのすべて
    • 外部API連携や独自の業界向けモジュールの提供
    • 基幹やクラウドとのリアルタイム連携(REST API / Webhook)
    • 不動産、農業、製造業など業界特化のサブモジュール同梱
    • ERPNext標準のワークフローやアクセス制御を拡張し、複雑な承認フローや部門ごとの権限制御の追加
  • 逆にすべきできないこと/アンチパターン

    • ERPNext本体のソースコードを直接書き換える(例: apps/erpnext/erpnext/selling/... を編集)
    • コアDBテーブルに物理カラムを追加する
    • 標準のマイグレーションファイルに手を入れる
      → これらは「壊れるカスタマイズ」の典型例であり、アップデートで必ず苦しむ原因になります。

つまり、ERPNextを「業務ERP」から「自社専用プラットフォーム」に進化させられます。

ERPNextそのものも「カスタムアプリ」

実はERPNext自体も、Frappeフレームワークの上に作られた巨大なカスタムアプリのひとつ です。

🔹 Frappe Frameworkとは

  • Webアプリ基盤(Python + MariaDB + Redis + Node.js) で構成されたフレームワーク(LaravelやRuby on Railsと同類)です。
  • 認証、権限、DB ORM、イベントフック、WebSocket通信などの土台を提供します。

🔹 ERPNext(巨大なアプリ)

  • 会計、人事、販売、在庫、生産などの「業務モジュール」を提供
  • モジュールはさらに Sales OrderSales InvoiceCustomer など DocTypeの集合体
  • DocType同士は参照関係でつながり、販売→在庫→会計へと 一気通貫でデータが流れる

🔹 自作のカスタムアプリ

  • ERPNextの外側に追加する拡張アプリ
  • Hook/Overrideで安全に機能を差し替え・拡張
  • 自社固有の要件をレイヤー分離して実装

このレイヤー構造により 壊れないカスタマイズ が可能で、バージョンアップにも強い設計になります。

💡 拡張の独立性チーム開発・移行のしやすさ

  • カスタムアプリはERPNext本体とは別フォルダに配置され、DBも別テーブルで定義されるため、
    Gitで別管理ができ、本体を更新してもカスタムは壊れにくく、チーム開発や環境移行がしやすくなります。

  • また、アプリ単位でインストール・アンインストールできるので、他プロジェクトへの展開や将来の移行にも対応しやすい仕組みです。

3. Overwriteと技術的な仕組み

「外側で安全に拡張できる」根拠は、Frappe/ERPNextが提供する 公式の入口 を使う点にあります。

🔹 Hook(フック)

イベントに割り込む仕組み。
validateon_submit などドキュメントのライフサイクルで処理を追加できます。
本体コードを変えずにチェック・通知・連携を差し込めるのがポイントです。

🔹 Override(オーバーライド)

標準動作を差し替える仕組み。

  • override_whitelisted_methods:公開関数の置き換え
  • override_doctype_class:DocTypeのクラス上書き
  • override_doctype_dashboards など:標準JSやダッシュボードの差し替え

Monkey Patch と違い、公式に用意された入口を使うため安全でアップデートに強いのが特徴です。

🔹 技術的な構成要素

Custom Appは小さなアプリとして整理します。

  • DocType定義(データ構造)
  • Pythonモジュール(サーバ処理)
  • JavaScript(フロント動作)
  • テストコード(自動テスト)
  • 依存管理requirements.txt / app.json

5. 実践:my_custom_app で日本語訳を反映する手順

では、実際にカスタムアプリを作成してみましょう。

  • 前提:Frappe/ERPNext v15系、サイト名は demo.maihatch.com
  • 既に bench が動作する環境があり、ERPNext はインストール済み。

Step 1:カスタムアプリを作成

# ワークスペース(bench init済みのフォルダ)で
bench new-app my_custom_app

Step 2:サイトにインストール

bench --site demo.maihatch.com install-app my_custom_app

Step 3:翻訳CSVを用意(アプリ側)

mkdir -p apps/my_custom_app/translations
# 例として数件だけ追記。既存ファイルを編集でもOK
cat >> apps/my_custom_app/translations/ja.csv << 'EOF'
source_text,translated_text,context
Sales Invoice,請求書,DocType
Sales Order,受注,DocType
Grand Total,合計,Label
Outstanding Amount,未収金額,Label
EOF
 

Step 4:翻訳を反映(サイトの言語設定を確認)

Desk → System Settings → Language を Japanese(JN) に。

Step 5:キャッシュをクリア & ビルド

bench --site demo.maihatch.com clear-cache
bench --site demo.maihatch.com clear-website-cache
bench build

Step 6:開発サーバを起動(または再起動)

# 開発時(フォアグラウンド)
bench start
 
# 既にpm2/supervisor運用なら
bench restart

6. 日本語翻訳ができました。

実際の画面はこちら: custom-app-translation

Tips:

  • apps/erpnext/erpnext/.../locale/ja.csv など、本体側のja.csvを書き換えない  → アップデートで消えます。アプリ側に置くのが原則。

  • Git 管理  → アプリ側は Git で別管理しておき、本体側は変更しないようにします。


5. まとめ

この記事では、ERPNextのカスタムAppについて以下を整理しました。

  • ERPNextは「壊れないカスタマイズ」が可能であり、アップデートにも強い
  • Custom Appは、DocType・Hook・Overrideなどを駆使して、本体を汚さずに拡張できる
  • GUIでの変更も含めてアプリ化し、Gitで管理することでチーム開発や移行が容易になる
  • 実際に my_custom_app を使えば、日本語翻訳の追加もシンプルに実装できる

今後も、

  • 日本の会計・税制に合わせた勘定科目表・消費税処理のカスタマイズ
  • 現場で使いやすいタブレット向けUIや、請求書PDFの自動生成・送付機能
  • プロジェクト/予算ワークフローに「全員承認」「段階承認」など日本企業で求められる承認フロー機能の追加

といった具体的なカスタマイズを順次実装し、記事として公開していく予定です。


MyHaTchの紹介と体験

私たち MyHaTch は、日本企業向けにERPNextの導入支援やカスタマイズを行っています。
特に「壊れないカスタマイズ」の実装や、日本語環境への最適化、業界ごとのサンプルデータを備えたデモ環境を用意しています。

ぜひ実際に触って、ERPNextの柔軟さとCustom Appの力を体験してください。

まだ疑問が残りますか?

この記事で解決しない疑問は、無料相談でお気軽にご質問ください。ERPNext導入の専門家が直接お答えします。