frappe/erpnext
主な特徴
- **会計**: 取引の記録から財務報告の分析まで、キャッシュフロー管理に必要なすべてのツール
- **受注管理**: 在庫レベルの追跡、在庫補充、受注、顧客、サプライヤー、配送、納品管理
- **製造**: 生産サイクルの簡素化、材料消費の追跡、生産能力計画、下請けの処理など
- **資産管理**: 購入から廃棄まで、ITインフラから設備まで、組織全体の資産を一元管理
- **プロジェクト**: 内部・外部プロジェクトを時間、予算、収益性を考慮して納品
- **CRM**: リード・機会の追跡、顧客関係管理
- **人事**: 給与計算、採用、従業員管理
- **サポート**: 問題追跡とチケット管理
- **多言語サポート**: 28以上の言語に対応
- **マルチカーレンシー**: 複数通貨のサポート
- **地域対応**: 各国の税制や規制に対応したローカライゼーション
リポジトリ解析: frappe/erpnext
基本情報
- リポジトリ名: frappe/erpnext
- 主要言語: Python
- スター数: 26,873
- フォーク数: 8,808
- 最終更新: 活発に更新中(v15.x.x-develop)
- ライセンス: GNU General Public License v3.0
- トピックス: ERP、オープンソース、ビジネス管理、会計、在庫管理、製造、CRM、エンタープライズ
概要
一言で言うと
強力で直感的なオープンソースERPシステムで、企業のあらゆるビジネスプロセスを統合管理できる100%無料のソフトウェアです。
詳細説明
ERPNextは、企業経営の複雑なタスクを簡素化するために開発された包括的なERPシステムです。請求書の管理、在庫追跡、人事管理など、通常は個別のソフトウェアで管理される様々な業務を、ERPNextは一つの統合されたプラットフォームで無料で提供します。
Frappe Framework上に構築されたERPNextは、PythonとJavaScriptで開発されたフルスタックWebアプリケーションです。モジュール式の設計により、企業は必要な機能だけを使用でき、独自の要件に合わせてカスタマイズも可能です。
主な特徴
- 会計: 取引の記録から財務報告の分析まで、キャッシュフロー管理に必要なすべてのツール
- 受注管理: 在庫レベルの追跡、在庫補充、受注、顧客、サプライヤー、配送、納品管理
- 製造: 生産サイクルの簡素化、材料消費の追跡、生産能力計画、下請けの処理など
- 資産管理: 購入から廃棄まで、ITインフラから設備まで、組織全体の資産を一元管理
- プロジェクト: 内部・外部プロジェクトを時間、予算、収益性を考慮して納品
- CRM: リード・機会の追跡、顧客関係管理
- 人事: 給与計算、採用、従業員管理
- サポート: 問題追跡とチケット管理
- 多言語サポート: 28以上の言語に対応
- マルチカーレンシー: 複数通貨のサポート
- 地域対応: 各国の税制や規制に対応したローカライゼーション
使用方法
インストール
前提条件
- Python 3.10以上
- MariaDB 10.3以上またはPostgreSQL 9.5以上
- Redis 5.x以上
- Node.js 18以上
- yarn 1.12以上
- wkhtmltopdf (オプション)
インストール手順
# 方法1: Dockerを使用したクイックセットアップ
git clone https://github.com/frappe/frappe_docker
cd frappe_docker
docker compose -f pwd.yml up -d
# http://localhost:8080 でアクセス
# ユーザー名: Administrator
# パスワード: admin
# 方法2: Benchを使用した手動インストール
# benchのセットアップ
pip install frappe-bench
bench init frappe-bench
cd frappe-bench
# 新しいサイトを作成
bench new-site erpnext.localhost
# ERPNextアプリを取得してインストール
bench get-app https://github.com/frappe/erpnext
bench --site erpnext.localhost install-app erpnext
# サーバーを起動
bench start
基本的な使い方
初期設定と基本操作
-
会社情報の設定:
- セットアップウィザードで会社情報、通貨、会計年度を設定
- 税率、仕訳科目、コストセンターを設定
-
基本マスタデータの登録:
- 顧客、サプライヤー、アイテムを登録
- 従業員、部門、役職を設定
実践的な使用例
# Python APIを使用した受注作成の例
import frappe
# 新しい受注を作成
sales_order = frappe.get_doc({
'doctype': 'Sales Order',
'customer': 'ABC Corporation',
'delivery_date': '2024-12-31',
'items': [{
'item_code': 'ITEM-001',
'qty': 10,
'rate': 1000
}]
})
sales_order.insert()
sales_order.submit()
高度な使い方
# カスタムレポートの作成例
@frappe.whitelist()
def get_sales_analysis(from_date, to_date):
"""指定期間の売上分析を取得"""
sales_data = frappe.db.sql("""
SELECT
customer,
SUM(grand_total) as total_sales,
COUNT(*) as order_count
FROM `tabSales Order`
WHERE docstatus = 1
AND transaction_date BETWEEN %s AND %s
GROUP BY customer
ORDER BY total_sales DESC
""", (from_date, to_date), as_dict=True)
return sales_data
# フックを使用したカスタマイズ
def validate_sales_order(doc, method):
"""受注のバリデーションフック"""
if doc.grand_total > 1000000:
doc.needs_approval = 1
frappe.msgprint('高額受注のため、承認が必要です')
ドキュメント・リソース
公式ドキュメント
- README.md: プロジェクト概要、インストール方法、コミュニティ情報
- 公式ドキュメント: https://docs.erpnext.com/ - 各モジュールの詳細なユーザーマニュアル
- Frappe Frameworkドキュメント: https://frappeframework.com/docs - 開発者向けフレームワークドキュメント
- 変更履歴: change_log/ディレクトリ内に各バージョンの詳細な変更点
サンプル・デモ
- ライブデモ: https://erpnext-demo.frappe.cloud - フル機能のオンラインデモ
- セットアップデモ: setup/demo.py - デモデータの自動セットアップ
- テストデータ: demo_master_doctypesとdemo_transaction_doctypesで定義
チュートリアル・ガイド
- Frappe School: https://school.frappe.io - メンテナーやコミュニティによる各種コース
- セットアップウィザード: 初回起動時のガイド付き設定
- ディスカッションフォーラム: https://discuss.erpnext.com/ - ユーザーとサービスプロバイダーのコミュニティ
- Telegramグループ: https://erpnext_public.t.me - リアルタイムサポート
技術的詳細
アーキテクチャ
全体構造
ERPNextは、Frappe Frameworkの上に構築されたマルチテナントWebアプリケーションです。モジュール式アーキテクチャを採用し、各ビジネス機能が独立したモジュールとして実装されています。バックエンドはPython、フロントエンドはJavaScript/Vue.js、データベースにMariaDB/PostgreSQL、キャッシュにRedisを使用しています。
ディレクトリ構成
erpnext/
├── erpnext/ # メインアプリケーションディレクトリ
│ ├── accounts/ # 会計モジュール
│ ├── assets/ # 資産管理モジュール
│ ├── buying/ # 購買モジュール
│ ├── crm/ # CRMモジュール
│ ├── manufacturing/# 製造モジュール
│ ├── projects/ # プロジェクト管理モジュール
│ ├── selling/ # 販売モジュール
│ ├── stock/ # 在庫管理モジュール
│ ├── support/ # サポートモジュール
│ ├── controllers/ # 共通コントローラー
│ ├── patches/ # アップグレードパッチ
│ ├── regional/ # 地域固有の機能
│ ├── public/ # 静的ファイル
│ └── www/ # Webページ
└── deployment/ # デプロイ設定
├── docker-compose.yaml
└── k8s/ # Kubernetes設定
主要コンポーネント
-
DocType: Frappeのデータモデルの基本単位
- 場所: 各モジュールのdoctype/ディレクトリ
- 役割: データ構造、バリデーション、権限の定義
- 例: Sales Order、Purchase Order、Item、Customer
-
Controllers: ビジネスロジックの実装
- 場所:
erpnext/controllers/ - 依存: Frappe Framework
- 主要クラス:
AccountsController: 会計関連の共通処理StockController: 在庫関連の共通処理SellingController: 販売関連の共通処理
- 場所:
-
モジュールシステム: 機能別のビジネスモジュール
- modules.txtで定義: 21のコアモジュール
- 各モジュールは独立した機能を提供
- 相互依存を最小限にした設計
技術スタック
コア技術
- 言語: Python 3.10+ (型ヒント、async/await、モダンPython機能を使用)
- フレームワーク:
- Frappe Framework v16.x - フルスタックWebフレームワーク
- Frappe UI - Vue.jsベースのUIライブラリ
- 主要ライブラリ:
- Unidecode (~1.4.0): Unicode文字の正規化
- barcodenumber (~0.5.0): バーコード生成・検証
- rapidfuzz (~3.12.2): 文字列マッチング
- holidays (~0.75): 祖日管理
- googlemaps (~4.10.0): Google Maps統合
- plaid-python (~7.2.1): 銀行統合
- mt-940 (>=4.26.0): 銀行取引明細書の解析
開発・運用ツール
- ビルドツール:
- flit_core: Pythonパッケージビルド
- bench: Frappeアプリケーション管理ツール
- yarn: フロントエンド依存関係管理
- テスト:
- 単体テスト、統合テスト、UIテスト
- codecovでカバレッジ追跡
- CI/CD:
- GitHub ActionsでMariaDB/PostgreSQLテスト
- Docker自動ビルド
- デプロイ:
- Docker/Docker Compose
- Kubernetes (k8s/ディレクトリに設定)
- Frappe Cloud (マネージドホスティング)
- コード品質:
- Ruff: Pythonリンター・フォーマッター
- タブインデント、ダブルクォート
- 行長110文字制限
設計パターン・手法
- モジュールパターン: 各ビジネス機能を独立したモジュールとして実装
- MVCパターン: DocType(Model)、Controller、Viewの分離
- フックシステム: イベント駆動でカスタマイズを実現
- オブザーバーパターン: ドキュメントの変更を監視して自動処理
- テンプレートメソッドパターン: 各Controllerで共通処理を実装
データフロー・処理フロー
-
ドキュメントのライフサイクル:
- Draft (下書き) → Submit (確定) → Cancel (キャンセル)
- 各段階でバリデーションとフックが実行
-
在庫処理フロー:
- Stock Entryが作成される
- Stock Ledger Entryで在庫移動を記録
- Binテーブルで現在在庫を更新
- FIFO/移動平均で評価
-
会計処理フロー:
- ドキュメントのSubmit時にGL Entryを自動生成
- 複式簿記の原則に従った仕訳
- リアルタイムで財務諦表を更新
-
ワークフロー処理:
- ドキュメントの承認フロー
- 権限に基づいたアクセス制御
- メール通知の自動送信
API・インターフェース
公開API
REST API
- 目的: 外部システムとの統合、モバイルアプリ開発
- エンドポイント例:
# 認証
POST /api/method/login
{
"usr": "admin@example.com",
"pwd": "password"
}
# ドキュメントの取得
GET /api/resource/Sales Order/SO-00001
# ドキュメントの作成
POST /api/resource/Sales Order
{
"customer": "ABC Corp",
"items": [...]
}
Python API
# @frappe.whitelist()デコレータでAPIを公開
@frappe.whitelist()
def get_customer_orders(customer):
return frappe.get_all(
"Sales Order",
filters={"customer": customer},
fields=["name", "grand_total", "status"]
)
設定・カスタマイズ
設定ファイル
# hooks.py - アプリケーションフック設定
app_name = "erpnext"
app_title = "ERPNext"
# ドキュメントイベントフック
doc_events = {
"Sales Order": {
"validate": "erpnext.custom.validate_sales_order",
"on_submit": "erpnext.custom.on_submit_sales_order"
}
}
# スケジューラージョブ
scheduler_events = {
"daily": [
"erpnext.custom.daily_cleanup"
]
}
拡張・カスタマイズ開発
-
カスタムアプリの作成:
bench new-app my_custom_app bench --site site1.local install-app my_custom_app -
DocTypeのカスタマイズ:
- Custom Fieldでフィールド追加
- Server Scriptでロジック追加
- Print Formatで帳票カスタマイズ
-
クライアントサイドスクリプト:
frappe.ui.form.on('Sales Order', { refresh: function(frm) { // カスタムボタン追加 frm.add_custom_button('Custom Action', () => { // カスタム処理 }); } });
パフォーマンス・スケーラビリティ
パフォーマンス特性
- キャッシュ: Redisで高速化
- バックグラウンドジョブ: RQ (Redis Queue)で非同期処理
- 最適化手法:
- データベースインデックスの最適化
- レポートのキャッシュ
- ページネーションによる大量データ処理
- バッチ処理の非同期実行
スケーラビリティ
- マルチテナント対応: 1つのインスタンスで複数企業をサポート
- 水平スケーリング:
- ロードバランサーで複数インスタンスへ分散
- 読み取りレプリカで読み込み負荷分散
- 垂直スケーリング:
- データベースサーバーのスケールアップ
- Redisクラスタリング
制限事項
-
技術的制限:
- リアルタイム処理にはWebソケットが必要
- 大量データのインポートはバックグラウンド処理が必須
- カスタマイズの複雑化によるアップグレードの難度
-
運用上の制限:
- 適切なバックアップ戦略が必須
- バージョンアップは慣重な計画が必要
- パフォーマンスチューニングには専門知識が必要
評価・所感
技術的評価
強み
- 包括的な機能セットで企業のあらゆるニーズに対応
- 強力なフレームワークによる高いカスタマイズ性
- 活発なコミュニティと継続的な開発(26k+スター、定期リリース)
- 完全なオープンソースでベンダーロックインなし
- モバイル対応と現代的なUI(Frappe UI)
- 多言語・多通貨・地域対応でグローバル展開可能
改善の余地
- 初期設定の複雑さ(多機能ゆえの学習曲線)
- モダンなフロントエンドフレームワークへの移行(React/Vueの部分的採用)
- マイクロサービスアーキテクチャへの対応
- ドキュメントの一元化と整理
向いている用途
- 中小企業から大企業までの幅広い規模
- 製造業、卸売業、小売業、サービス業
- カスタマイズが必要な特殊な業務プロセスを持つ企業
- オープンソースERPを求める組織
- 地域固有の税制や規制への対応が必要な企業
向いていない用途
- 非常にシンプルなERPを求める小規模企業
- 特定業界に特化した機能のみが必要な場合
- 技術リソースが限られた組織(セットアップと管理に専門知識が必要)
- リアルタイム性が極めて重要なシステム
総評
ERPNextは、オープンソースERPの中で最も完成度が高く、実用的なシステムの一つです。無料でありながら、商用ERPに匹敵する機能を提供し、特に中小企業にとって魅力的な選択肢です。
Frappe Frameworkの強力な基盤により、高いカスタマイズ性と拡張性を備え、企業の成長に合わせて柔軟に対応できます。多言語対応や地域固有の機能も充実しており、グローバル展開する企業にも適しています。
ただし、初期設定やカスタマイズには一定の技術力が必要で、導入には専門家の支援が推奨されます。しかし、活発なコミュニティと豊富なドキュメントにより、学習リソースは充実しています。総合的に見て、TCO(総所有コスト)を大幅に削減できる優れたERPソリューションと評価できます。