frappe/erpnext

⭐ 26,614 🍴 0 Python📄 GPL-3.0 (GNU General Public License v3) GitHubで見る →

主な特徴

  • **包括的なモジュール群**: 会計、在庫、販売、購買、製造、プロジェクト管理、アセット管理、人事管理など
  • **100%オープンソース**: ソースコードが完全に公開され、自由にカスタマイズ可能
  • **モダンなWebインターフェース**: レスポンシブデザインでモバイルにも対応
  • **多言語・多通貨対応**: グローバルビジネスに対応
  • **強力なレポーティング機能**: カスタマイズ可能なダッシュボードとレポート
  • **ワークフロー管理**: 承認プロセスの自動化
  • **API対応**: REST APIによる外部システムとの連携
  • **マルチテナント対応**: 複数の組織を1つのインスタンスで管理可能

リポジトリ解析: frappe/erpnext

基本情報

  • リポジトリ名: frappe/erpnext
  • 主要言語: Python
  • スター数: 26,614
  • フォーク数: [可能なら取得]
  • 最終更新: [最近のコミット日時]
  • ライセンス: GPL-3.0 (GNU General Public License v3)
  • トピックス: ERP, オープンソース, Frappe Framework, ビジネス管理

概要

一言で言うと

ERPNextは、Frappe Frameworkをベースに構築された100%オープンソースのエンタープライズリソースプランニング(ERP)システムで、中小企業から大企業まで幅広く利用できる包括的なビジネス管理ソリューションです。

詳細説明

ERPNextは、企業のあらゆる業務プロセスを統合的に管理するためのオープンソースERPシステムです。会計、在庫管理、販売、購買、製造、プロジェクト管理、人事管理など、企業運営に必要な主要機能を網羅しています。GPL-3.0ライセンスの下で提供され、完全無料で利用・カスタマイズが可能です。Frappe Frameworkという独自のWebアプリケーションフレームワーク上に構築されており、高いカスタマイズ性と拡張性を持っています。

主な特徴

  • 包括的なモジュール群: 会計、在庫、販売、購買、製造、プロジェクト管理、アセット管理、人事管理など
  • 100%オープンソース: ソースコードが完全に公開され、自由にカスタマイズ可能
  • モダンなWebインターフェース: レスポンシブデザインでモバイルにも対応
  • 多言語・多通貨対応: グローバルビジネスに対応
  • 強力なレポーティング機能: カスタマイズ可能なダッシュボードとレポート
  • ワークフロー管理: 承認プロセスの自動化
  • API対応: REST APIによる外部システムとの連携
  • マルチテナント対応: 複数の組織を1つのインスタンスで管理可能

使用方法

インストール

前提条件

  • Python 3.10以上
  • MariaDB 10.3以上またはPostgreSQL 9.5以上
  • Node.js 18以上
  • Redis 5以上
  • wkhtmltopdf(PDFレポート生成用)
  • Frappe Framework 16.0.0以上

インストール手順

# 方法1: Easy Install Script(推奨)
wget https://raw.githubusercontent.com/frappe/bench/develop/install.py
python3 install.py --production

# 方法2: Docker経由
# Docker Composeファイルをクローン
git clone https://github.com/frappe/frappe_docker
cd frappe_docker

# 環境をセットアップして起動
docker-compose up -d

# 方法3: 手動インストール(Bench経由)
# Benchをインストール
pip3 install frappe-bench

# 新しいベンチを初期化
bench init frappe-bench --frappe-branch version-15
cd frappe-bench

# ERPNextアプリを取得
bench get-app erpnext

# 新しいサイトを作成してERPNextをインストール
bench new-site mysite.local
bench install-app erpnext
bench start

基本的な使い方

初期セットアップ

# ブラウザでアクセス
# http://localhost:8000

# 管理者としてログイン
# Username: Administrator
# Password: [インストール時に設定]

実践的な使用例:販売プロセス

# APIを使用した顧客作成
import frappe

customer = frappe.get_doc({
    "doctype": "Customer",
    "customer_name": "ABC Corporation",
    "customer_type": "Company",
    "customer_group": "Commercial",
    "territory": "Japan"
})
customer.insert()

# 見積書の作成
quotation = frappe.get_doc({
    "doctype": "Quotation",
    "party_name": "ABC Corporation",
    "items": [{
        "item_code": "PROD-001",
        "qty": 10,
        "rate": 1000
    }]
})
quotation.insert()
quotation.submit()

高度な使い方:カスタムアプリ開発

# カスタムDocTypeの作成
# apps/custom_app/custom_app/doctype/custom_order/custom_order.py

import frappe
from frappe.model.document import Document

class CustomOrder(Document):
    def validate(self):
        # カスタムバリデーション
        if self.total_amount < 0:
            frappe.throw("Total amount cannot be negative")
    
    def before_submit(self):
        # 承認前の処理
        self.status = "Approved"
        
    def on_submit(self):
        # 承認後の処理
        self.create_stock_entry()
        
    def create_stock_entry(self):
        # 在庫移動を作成
        stock_entry = frappe.get_doc({
            "doctype": "Stock Entry",
            "stock_entry_type": "Material Transfer",
            "from_warehouse": self.source_warehouse,
            "to_warehouse": self.target_warehouse,
            "items": self.get_items_for_transfer()
        })
        stock_entry.insert()
        stock_entry.submit()

ドキュメント・リソース

公式ドキュメント

サンプル・デモ

  • デモサイト: https://demo.erpnext.com - 実際のERPNextを体験できるデモ環境
  • 業界別テンプレート: 製造業、小売業、サービス業向けの設定済みテンプレート
  • サンプルデータ: テスト用の顧客、製品、トランザクションデータ

チュートリアル・ガイド

  • Getting Started Guide: 初心者向けのステップバイステップガイド
  • Video Tutorials: YouTubeチャンネルでの動画チュートリアル
  • ERPNext School: オンライン学習プラットフォーム
  • Community Forum: https://discuss.erpnext.com - 活発なコミュニティサポート

技術的詳細

アーキテクチャ

全体構造

ERPNextは、MVCアーキテクチャを採用したFrappe Framework上に構築されています。フロントエンドはJavaScript(Frappe UI)、バックエンドはPython、データベースはMariaDB/PostgreSQLを使用。リアルタイム通信にはSocketIO、バックグラウンドジョブにはPython RQ(Redis Queue)を活用しています。

ディレクトリ構成

erpnext/
├── erpnext/          # メインアプリケーションディレクトリ
│   ├── accounts/     # 会計モジュール
│   ├── stock/        # 在庫管理モジュール
│   ├── selling/      # 販売管理モジュール
│   ├── buying/       # 購買管理モジュール
│   ├── manufacturing/# 製造管理モジュール
│   ├── projects/     # プロジェクト管理モジュール
│   ├── hr/           # 人事管理モジュール
│   ├── assets/       # 資産管理モジュール
│   ├── setup/        # セットアップウィザード
│   ├── public/       # 静的ファイル(JS、CSS、画像)
│   ├── templates/    # HTMLテンプレート
│   └── hooks.py      # アプリケーションフック設定
├── .github/          # GitHub Actions設定
└── pyproject.toml    # プロジェクト設定ファイル

主要コンポーネント

  • 会計モジュール(accounts): 総勘定元帳、売掛・買掛管理、財務レポート

    • 場所: erpnext/accounts/
    • 依存: Frappe Framework、Payment Ledger
    • インターフェース: GL Entry、Payment Entry、Journal Entry
  • 在庫モジュール(stock): 在庫管理、倉庫管理、在庫評価

    • 場所: erpnext/stock/
    • 依存: Item Master、Warehouse、Stock Ledger
    • インターフェース: Stock Entry、Stock Reconciliation
  • 製造モジュール(manufacturing): BOM管理、作業指示、生産計画

    • 場所: erpnext/manufacturing/
    • 依存: BOM、Work Order、Production Plan
    • インターフェース: Material Request、Job Card

技術スタック

コア技術

  • 言語: Python 3.10以上(バックエンド)、JavaScript ES6+(フロントエンド)
  • フレームワーク: Frappe Framework 16.0.0以上(独自のフルスタックWebフレームワーク)
  • 主要ライブラリ:
    • Unidecode (~1.4.0): Unicode文字の処理
    • barcodenumber (~0.5.0): バーコード生成・検証
    • rapidfuzz (~3.12.2): 文字列の類似度計算
    • holidays (~0.75): 各国の祝日データ
    • googlemaps (~4.10.0): Google Maps API統合
    • plaid-python (~7.2.1): 銀行連携(Plaid API)
    • mt-940 (>=4.26.0): 銀行取引明細(MT940形式)の解析
    • onscan.js (^1.5.2): バーコードスキャナー対応

開発・運用ツール

  • ビルドツール: Flit(Pythonパッケージング)、Webpack(フロントエンドバンドル)
  • テスト: pytest、Frappe Test Framework、単体テスト・統合テスト・E2Eテスト
  • CI/CD: GitHub Actions、自動テスト実行、コード品質チェック
  • デプロイ: Docker、Kubernetes、Bench(Frappe専用デプロイツール)
  • コード品質: Ruff(リンター・フォーマッター)、line-length: 110、タブインデント

設計パターン・手法

  • Document-Oriented Design: すべてのビジネスエンティティは「DocType」として定義
  • Event-Driven Architecture: ドキュメントのライフサイクルイベント(validate、before_save、after_insert等)
  • Permission System: 役割ベースのアクセス制御(RBAC)
  • Naming Series: 自動採番システム(請求書番号、注文番号等)
  • Workflow Engine: 承認フローの自動化
  • Background Jobs: Python RQを使用した非同期処理

データフロー・処理フロー

  1. リクエスト処理: Nginx → Gunicorn → Frappe Framework → ERPNext
  2. データ検証: DocTypeフィールド定義に基づく自動検証
  3. ビジネスロジック: before_save、validateフックでのカスタムロジック実行
  4. データベース更新: MariaDB/PostgreSQLへの保存
  5. リアルタイム更新: SocketIOによる画面の自動更新
  6. バックグラウンド処理: Redis Queue経由での非同期タスク実行

API・インターフェース

公開API

REST API

  • 目的: 外部システムとの連携、モバイルアプリ開発
  • 使用例:
# 認証
import requests

headers = {
    "Authorization": "token api_key:api_secret"
}

# データ取得
response = requests.get(
    "https://your-site.com/api/resource/Customer/CUST-0001",
    headers=headers
)

# データ作成
data = {
    "customer_name": "New Customer",
    "customer_type": "Company"
}
response = requests.post(
    "https://your-site.com/api/resource/Customer",
    json=data,
    headers=headers
)

設定・カスタマイズ

設定ファイル

# apps/erpnext/erpnext/hooks.py
app_name = "erpnext"
app_title = "ERPNext"
app_publisher = "Frappe Technologies Pvt. Ltd."
app_description = """ERP made simple"""
app_license = "GNU General Public License (v3)"

# カスタムフック
doc_events = {
    "Sales Invoice": {
        "on_submit": "erpnext.custom.send_invoice_email",
        "on_cancel": "erpnext.custom.notify_cancellation"
    }
}

# スケジューラー設定
scheduler_events = {
    "daily": [
        "erpnext.accounts.utils.auto_create_exchange_rate_revaluation_daily"
    ],
    "hourly": [
        "erpnext.stock.doctype.repost_item_valuation.repost_entries"
    ]
}

拡張・プラグイン開発

  1. カスタムアプリ作成:
bench new-app custom_erpnext
bench install-app custom_erpnext
  1. カスタムDocType:
# カスタムフィールド追加
custom_field = {
    "fieldname": "custom_field",
    "label": "Custom Field",
    "fieldtype": "Data",
    "insert_after": "customer_name"
}
  1. Webフォーム統合:
// カスタムスクリプト
frappe.ui.form.on('Sales Order', {
    refresh: function(frm) {
        // カスタムボタン追加
        frm.add_custom_button('Custom Action', () => {
            // カスタム処理
        });
    }
});

パフォーマンス・スケーラビリティ

パフォーマンス特性

  • ベンチマーク結果: 中規模環境で数千ユーザー、数百万トランザクション/月を処理可能
  • 最適化手法:
    • Redisによるキャッシング
    • データベースインデックスの最適化
    • バックグラウンドジョブによる重い処理の非同期化
    • レポートの事前集計

スケーラビリティ

  • 水平スケーリング: ロードバランサー配下で複数のアプリケーションサーバー
  • データベース: マスター・スレーブレプリケーション対応
  • キャッシュ: Redis Clusterによる分散キャッシュ
  • マルチテナント: 単一インスタンスで複数企業をホスト可能

制限事項

  • リアルタイム処理: 大量の同時接続時のWebSocket制限
  • レポート生成: 大規模データセットでのレポート生成に時間がかかる
  • カスタマイズ: 過度なカスタマイズはアップグレードを困難にする
  • 言語サポート: UIの一部が英語のみ対応

評価・所感

技術的評価

強み

  • 完全なオープンソース: ベンダーロックインがなく、自由にカスタマイズ可能
  • 統合型システム: 会計から製造まで全モジュールが緊密に連携
  • 開発者フレンドリー: Pythonベースで拡張開発が容易
  • 活発なコミュニティ: 世界中の開発者・ユーザーによるサポート
  • モダンなUI/UX: レスポンシブデザインで使いやすいインターフェース

改善の余地

  • 学習曲線: Frappe Frameworkの理解が必要で初期学習コストが高い
  • ドキュメント: 一部の高度な機能のドキュメントが不足
  • パフォーマンス: 大規模データでの複雑なレポート生成が遅い
  • アップグレード: メジャーバージョン間のアップグレードが複雑

向いている用途

  • 中小企業のERP導入: 低コストで包括的なERP機能を必要とする企業
  • 製造業: BOM管理、生産計画、品質管理が必要な製造業
  • 流通・小売業: 在庫管理、POS統合が重要な業種
  • サービス業: プロジェクト管理、タイムシート管理が必要な業種
  • NPO・教育機関: 予算制約がある組織

向いていない用途

  • 超大規模企業: 数万人規模のユーザー、複雑な組織構造
  • 特殊な業界要件: 医療、金融など厳格な規制がある業界
  • リアルタイム要求: ミリ秒単位の応答が必要なシステム
  • レガシー統合: 多数の既存システムとの複雑な統合が必要な環境

総評

ERPNextは、オープンソースERPの中で最も包括的で成熟したソリューションの一つです。中小企業から中堅企業にとって、商用ERPに匹敵する機能を無料で利用できる点は大きな魅力です。Frappe Frameworkによる高いカスタマイズ性により、様々な業種・業態に適応できます。ただし、導入・運用には一定の技術力が必要であり、大規模環境では性能面での考慮が必要です。活発なコミュニティと継続的な開発により、今後も機能拡張と改善が期待できる有望なERPシステムと言えるでしょう。