
中小企業にとって、デジタルトランスフォーメーションの最大の障壁は往々にして意欲ではなく、コストです。従来の ERP システム(SAP や Oracle など)はライセンス費用だけで数十万から数百万円に上り、ほとんどの中小企業にとっては手の届かない存在です。一方、無料の代替ツールは機能が不十分で、インターフェースは古く、メンテナンスも十分ではありません。
ERPNext の登場がこの状況を変えました。100% 無料オープンソース のエンタープライズリソースプランニング(ERP)システムである ERPNext は、財務、CRM、営業、購買、在庫、製造、人事などのコアビジネスモジュールを網羅する完全なソリューションを提供します。Frappe フレームワークをベースに、Python + JavaScript 技術スタックで構築されており、モダンな Web インターフェースと強力なカスタム開発機能を備えています。
本記事では、ゼロから ERPNext のインストール・デプロイ、基本設定、コアモジュールの使い方を行い、カスタム開発の実践まで深く掘り下げて解説します。自社ビジネスに合ったエンタープライズ ERP システムをスピーディに構築するための指南書です。

ERPNext とは?
ERPNext はインドの Frappe Technologies 社が開発・メンテナンスしているオープンソース ERP システムで、GNU General Public License (GPL) v3 ライセンスで公開されています。つまり、次のことができます:
- ✅ 無料で利用 — ライセンス費用は一切不要
- ✅ 自由に変更 — ビジネスニーズに合わせて機能をカスタマイズ可能
- ✅ 商用利用可能 — 商用環境でも利用可能、ユーザー数制限なし
- ✅ コミュニティ主導 — 世界中のアクティブなコミュニティがコードとプラグインを継続的に貢献
技術アーキテクチャ
┌─────────────────────────────────────┐
│ ERPNext(アプリケーション層) │
│ 財務 | CRM | 営業 | 購買 | 在庫 | 人事 │
├─────────────────────────────────────┤
│ Frappe Framework(フレームワーク層) │
│ DocType | REST API | 権限 | ワークフロー │
├─────────────────────────────────────┤
│ Python(バックエンド) | MariaDB(データベース) │
│ JavaScript/Vue(フロントエンド) | Redis(キャッシュ) │
└─────────────────────────────────────┘
ERPNext の中心にあるのは Frappe Framework です。これは Python で書かれたフルスタック Web アプリケーションフレームワークで、Frappe の最大の特徴は ローコード/ノーコード(Low-Code/No-Code) 機能——DocType(ドキュメントタイプ)を定義するだけで、大量のコードを書かずにデータモデル、フォーム、リストビュー、API を素早く作成できます。
なぜ ERPNext を選ぶのか?
| 比較項目 | ERPNext | Odoo(コミュニティ版) | SAP Business One |
|---|---|---|---|
| ライセンス費用 | 無料(GPL v3) | コミュニティ版無料、コアモジュールは有料 | 数万〜数十万円/年 |
| オープンソース度合い | 100% オープンソース | オープンコア(一部モジュールはクローズド) | クローズドソース |
| ユーザー制限 | 制限なし | コミュニティ版は制限なし | ユーザー数で課金 |
| 技術スタック | Python + MariaDB | Python + PostgreSQL | 独自 |
| カスタム開発 | Frappe フレームワーク、ローコード | Python 開発能力が必要 | 認定デベロッパーが必要 |
| 中国語サポート | 標準サポート | コミュニティ翻訳 | 公式サポート |
| デプロイ方式 | セルフホスト / Frappe Cloud | セルフホスト / Odoo.sh | ローカル / クラウド |
インストール・デプロイ
ERPNext は複数のデプロイ方法に対応しています。このセクションでは最も一般的な 3 つの方法を詳しく解説します:Docker デプロイ(推奨)、手動インストール、Frappe Cloud ホスティング。
方法一:Docker デプロイ(推奨)
Docker デプロイは最も簡単でクリーンなインストール方法で、迅速なテストと本番環境の両方に対応します。
システム要件
- CPU: 2 コア以上
- メモリ: 4GB 以上(推奨 8GB)
- ストレージ: 20GB 以上
- OS: Ubuntu 20.04/22.04、CentOS 8+、Debian 11+
docker-compose で一括デプロイ
# 1. Docker と Docker Compose をインストール
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
# 2. Docker Compose をインストール(標準で付いていない場合)
sudo apt install docker-compose-plugin
# 3. 公式 docker-compose 設定をクローン
git clone https://github.com/frappe/frappe_docker.git
cd frappe_docker
# 4. 環境変数ファイルを作成
cp example.env .env
# .env ファイルを編集し、以下の主要パラメータを設定:
# SITE_NAME=erp.yourdomain.com
# DB_ROOT_USER=root
# DB_ROOT_PASSWORD=your_secure_password
# ADMIN_PASSWORD=your_admin_password
# 5. サービスを起動
docker compose -f compose.yaml \
-f overrides/compose.mariadb.yaml \
-f overrides/compose.redis.yaml \
-f overrides/compose.noproxy.yaml \
config > ~/docker-compose.yml
docker compose -f ~/docker-compose.yml up -d
# 6. 新サイトを作成
docker compose -f ~/docker-compose.yml exec backend \
bench new-site erp.yourdomain.com \
--mariadb-root-password your_secure_password \
--admin-password your_admin_password \
--install-app erpnext
# 7. ERPNext にアクセス
# ブラウザで http://your-server-ip:8080 を開く
# デフォルト管理者アカウント:Administrator
# パスワード:.env で設定した ADMIN_PASSWORD
Nginx リバースプロキシの設定(本番環境)
# Let's Encrypt で無料 SSL 証明書を取得
docker compose -f ~/docker-compose.yml exec backend \
bench setup nginx
# または Traefik で HTTPS を自動管理
docker compose -f compose.yaml \
-f overrides/compose.traefik.yaml \
config > ~/docker-compose-traefik.yml
docker compose -f ~/docker-compose-traefik.yml up -d
方法二:手動インストール(深いカスタマイズ向け)
手動インストールはシステムの深いカスタマイズやデバッグが必要なデベロッパー向けです。
# 1. 依存関係をインストール
sudo apt update
sudo apt install python3-dev python3-setuptools python3-pip \
python3-distutils python3.10-venv software-properties-common \
mariadb-server mariadb-client redis-server nodejs npm \
yarn cron xvfb libfontconfig wkhtmltopdf
# 2. MariaDB を設定
sudo mysql -u root -e "
CREATE DATABASE erpnext;
CREATE USER 'erpnext'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON erpnext.* TO 'erpnext'@'localhost';
FLUSH PRIVILEGES;
"
# 3. bench(Frappe の CLI ツール)をインストール
pip3 install frappe-bench
# 4. bench を初期化
bench init --frappe-branch version-15 frappe-bench
cd frappe-bench
# 5. 新サイトを作成
bench new-site erp.yourdomain.com \
--db-name erpnext \
--db-password your_password \
--admin-password your_admin_password
# 6. ERPNext アプリをインストール
bench get-app --branch version-15 erpnext
bench --site erp.yourdomain.com install-app erpnext
# 7. 開発サーバーを起動
bench start
# http://localhost:8000 にアクセス
方法三:Frappe Cloud ホスティング
サーバーのメンテナンスを自分でやりたくない場合、公式の Frappe Cloud ホスティングサービスが利用できます:
- 価格:$50/月(スモールビジネスプラン)
- 内容:無制限ユーザー、自動バックアップ、SSL 証明書、テクニカルサポート
- 対象:IT メンテナンスチームを持たない中小企業
frappecloud.com で登録するだけで、技術的な操作は一切不要です。
基本設定
インストールが完了したら、システムに入る最初のステップは基本設定です。
1. 会社設定
設定 → 会社 で会社情報を登録します:
- 会社名
- 登録住所
- 税番号
- デフォルト通貨
- 会計年度の開始月
# 複数会社構成
グループに複数の子会社がある場合、複数の会社を追加できます。
ERPNext は会社間の取引と連結財務諸表をサポートしています。
2. ユーザーと権限
ERPNext はロールベースのアクセス制御(RBAC)を採用しています:
管理者(System Manager)→ 全権限
会計(Accounts Manager)→ 財務モジュール
営業(Sales Manager)→ 営業モジュール
倉庫(Stock Manager)→ 在庫モジュール
人事(HR Manager)→ 人事モジュール
ユーザーの作成
# Frappe API でユーザーを作成(Python スクリプト)
import frappe
user = frappe.get_doc({
"doctype": "User",
"email": "zhangsan@company.com",
"first_name": "張三",
"roles": [{"role": "Sales Manager"}]
})
user.insert()
3. 基本データのインポート
ERPNext は Excel/CSV による基本データの一括インポートをサポートしています:
| データタイプ | インポートテンプレート | 説明 |
|---|---|---|
| 顧客 | Customer |
顧客情報、住所、連絡先 |
| サプライヤー | Supplier |
サプライヤー情報、決済条件、決済方法 |
| 製品 | Item |
SKU、仕様、価格、在庫 |
| BOM | BOM |
部品表(製造モジュール) |
| 従業員 | Employee |
従業員情報、部門、職位 |
各モジュールの リストビュー → インポート(Import) から、テンプレートをダウンロードし、データを入力してアップロードするだけで完了です。
4. 印刷テンプレートのカスタマイズ
ERPNext では各種ビジネス伝票の印刷フォーマットをカスタマイズできます:
- 請求書
- 購買発注書
- 営業発注書
- 納品書
- 見積書
設定 → 印刷設定 で、内蔵テンプレートを選択するか、HTML/Jinja で自由にカスタマイズできます。
コアモジュール詳細
ERPNext には 20 以上のビジネスモジュールが含まれています。以下は最もよく使われるコアモジュールです。
💰 財務モジュール(Accounting)
財務は ERP システムの中心であり、ERPNext の財務モジュールは機能が充実しています:
勘定科目表(Chart of Accounts)
ERPNext には多国標準の勘定科目表が内蔵されており、カスタマイズも可能です:
資産(Assets)
├── 流動資産
│ ├── 現金及び預金
│ ├── 売掛金
│ └── 棚卸資産
├── 固定資産
│ ├── 建物
│ └── 設備
負債(Liabilities)
├── 流動負債
│ ├── 買掛金
│ └── 短期借入金
純資産(Equity)
├── 資本金
└── 利益剰余金
収益(Income)
├── 営業収益
└── 営業外収益
費用(Expenses)
├── 売上原価
├── 販売費
├── 管理費
└── 財務費用
自動仕訳
ERPNext の販売、購買、在庫操作は自動的に仕訳を生成します:
# 売上請求書の自動仕訳
借方:売掛金 ¥10,000
貸方:営業収益 ¥8,849.56
仮受消費税 ¥1,150.44
# 購買入庫の自動仕訳
借方:商品 ¥5,000
貸方:買掛金 ¥5,000
財務諸表
- 貸借対照表 — 会社の財務状況をリアルタイムに反映
- 損益計算書 — 期間ごとの収益と支出を集計
- キャッシュフロー計算書 — 現金の流入・流出を追跡
- 売掛金/買掛金のエージング分析 — 回収リスクをモニタリング
📦 在庫モジュール(Stock)
倉庫管理
複数倉庫、複数ロケーションの管理に対応:
本社倉庫
├── エリア A - 原材料
│ ├── A-01 電子部品
│ └── A-02 構造部品
├── エリア B - 完成品
│ ├── B-01 発送待ち
│ └── B-02 検品済み
└── エリア C - 返品
在庫操作
| 操作 | 説明 |
|---|---|
| 入庫 | 購買入庫、生産入庫、返品入庫 |
| 出庫 | 販売出庫、生産出庫、廃棄出庫 |
| 振替 | 倉庫間の移動 |
| 棚卸 | 帳簿と実物の定期的な照合 |
| シリアル番号/ロット追跡 | 各製品を正確に追跡 |
在庫アラート
最小在庫閾値を設定し、閾値を下回ると自動的に補充を通知:
# Frappe スクリプトで在庫アラートを設定
frappe.db.set_value("Item", "ITEM-001", "re_order_level", 100)
frappe.db.set_value("Item", "ITEM-001", "warehouse", "本社倉庫")
🤝 CRM と営業モジュール
営業フロー
リード(Lead)
↓
案件(Opportunity)
↓
見積書(Quotation)
↓
営業発注書(Sales Order)
↓
納品書(Delivery Note)
↓
売上請求書(Sales Invoice)
↓
入金(Payment Entry)
CRM 機能のハイライト
- リード管理 — ソースの追跡、営業への割り当て、フォローアップの記録
- 案件ファネル — 営業パイプラインを可視化
- 見積テンプレート — プロフェッショナルな見積書を迅速に作成
- 顧客ポータル — 顧客が注文や請求書をセルフサービスで確認
- メール統合 — 送受信メールを自動的に顧客に紐付け
👥 人事モジュール(HRMS)
従業員管理
- 従業員プロフィール(個人情報、契約書、緊急連絡先)
- 組織図(部門、職位、報告関係)
- 入社/退職フロー
勤怠と休暇
# 勤怠ルールの設定
attendance_policy = {
"working_hours": "09:00-18:00",
"late_entry_threshold": 15, # 分
"early_exit_threshold": 15,
"holiday_list": "2026-法定祝日"
}
# 休暇の種類
leave_types = [
{"name": "年次有給休暇", "max_leaves": 10},
{"name": "病気休暇", "max_leaves": 5},
{"name": "私用休暇", "max_leaves": 0}, # 要承認
{"name": "結婚休暇", "max_leaves": 3},
]
給与管理
- 給与構成(基本給、パフォーマンス、手当、控除)
- 所得税の自動計算
- 給与明細の作成と支給
- 社会保険・住宅積立金の計算
🏭 製造モジュール(Manufacturing)
BOM(部品表)
製品:スマートスピーカー V2.0
├── マザーボードコンポーネント (x1)
│ ├── メイン制御チップ (x1)
│ ├── メモリモジュール (x2)
│ └── WiFi モジュール (x1)
├── オーディオコンポーネント (x1)
│ ├── スピーカー (x2)
│ └── アンプボード (x1)
├── ケース (x1)
└── 電源アダプター (x1)
生産オーダーフロー
生産計画(Production Plan)
↓
作業指示書(Work Order)
↓
出庫(Material Transfer)
↓
製造(Manufacture)
↓
品質検査(Quality Inspection)
↓
入庫(Stock Entry)
カスタム開発実践
ERPNext の最も強力な点は拡張性です。Frappe フレームワークをベースに、ごく少量のコードでカスタムニーズを実現できます。
開発環境の構築
# 1. 開発用サイトを作成
bench new-site dev.localhost --force
bench use dev.localhost
# 2. カスタムアプリを作成
bench new-app my_custom_app
# ディレクトリ構造:
# my_custom_app/
# ├── my_custom_app/
# │ ├── __init__.py
# │ ├── hooks.py # アプリフック設定
# │ ├── modules.txt # モジュールリスト
# │ ├── custom_doctype/ # カスタムドキュメントタイプ
# │ └── api.py # カスタム API
# └── setup.py
カスタム DocType(ローコード方式)
DocType は Frappe のコア概念で、データベーステーブル + フォーム + API の集合体に相当します。
例:「プロジェクト管理」モジュールの作成
# Python コードで DocType を定義
import frappe
from frappe.model.document import Document
class ProjectTask(Document):
pass
# hooks.py で登録
# doc_events = {
# "Project Task": {
# "on_update": "my_custom_app.tasks.notify_assignee"
# }
# }
DocType のフィールドタイプ
| フィールドタイプ | 用途 | 例 |
|---|---|---|
| Data | 1 行テキスト | プロジェクト名 |
| Long Text | 複数行テキスト | プロジェクト説明 |
| Select | ドロップダウン選択 | ステータス(進行中/完了/キャンセル) |
| Date | 日付 | 開始日 |
| Currency | 金額 | 予算 |
| Link | 他の DocType へのリンク | 顧客にリンク |
| Table | サブテーブル(1 対多) | タスクリスト |
| Attach | ファイル添付 | プロジェクトドキュメント |
カスタム API
# my_custom_app/api.py
import frappe
from frappe import _
@frappe.whitelist()
def get_project_summary(project_name):
"""プロジェクト概要情報を取得"""
project = frappe.get_doc("Project", project_name)
tasks = frappe.get_all("Project Task",
filters={"project": project_name},
fields=["task_name", "status", "assigned_to", "deadline"]
)
return {
"project_name": project.project_name,
"status": project.status,
"budget": project.budget,
"tasks": tasks,
"completion": project.percentage_complete
}
# 呼び出し方:
# GET /api/method/my_custom_app.api.get_project_summary?project_name=PRJ-001
カスタムワークフロー
# 購買承認ワークフローの定義
workflow = {
"workflow_name": "Purchase Approval",
"document_type": "Purchase Order",
"states": [
{"state": "Draft", "allow_edit": "Purchase Manager"},
{"state": "Pending Approval", "allow_edit": "Purchase Manager"},
{"state": "Approved", "allow_edit": "Director"},
{"state": "Rejected", "allow_edit": "Director"},
],
"transitions": [
{"from": "Draft", "to": "Pending Approval", "action": "Submit", "allowed": "Purchase Manager"},
{"from": "Pending Approval", "to": "Approved", "action": "Approve", "allowed": "Director"},
{"from": "Pending Approval", "to": "Rejected", "action": "Reject", "allowed": "Director"},
]
}
カスタムレポート
# my_custom_app/reports/sales_summary.py
import frappe
def execute(filters=None):
columns = [
{"fieldname": "customer", "label": "顧客", "fieldtype": "Link", "options": "Customer", "width": 200},
{"fieldname": "total_sales", "label": "売上高", "fieldtype": "Currency", "width": 150},
{"fieldname": "total_qty", "label": "数量", "fieldtype": "Int", "width": 100},
]
conditions = ""
if filters.get("from_date"):
conditions += f" AND si.posting_date >= '{filters.from_date}'"
if filters.get("to_date"):
conditions += f" AND si.posting_date <= '{filters.to_date}'"
data = frappe.db.sql(f"""
SELECT
si.customer,
SUM(si.grand_total) as total_sales,
SUM(si.total_qty) as total_qty
FROM `tabSales Invoice` si
WHERE si.docstatus = 1 {conditions}
GROUP BY si.customer
ORDER BY total_sales DESC
""", as_dict=True)
return columns, data
フロントエンドのカスタマイズ
ERPNext は Vue.js と Jinja テンプレートを使用しており、カスタマイズできます:
// カスタムフォームスクリプト
frappe.ui.form.on('Sales Order', {
refresh: function(frm) {
// カスタムボタンを追加
frm.add_custom_button('PDF エクスポート', function() {
frappe.call({
method: 'my_custom_app.api.export_pdf',
args: { docname: frm.doc.name },
callback: function(r) {
window.open(r.message.url);
}
});
});
},
validate: function(frm) {
// カスタムバリデーション
if (frm.doc.discount > 20) {
frappe.throw('割引率は 20% を超えることはできません');
}
}
});
運用と最適化
バックアップと復元
# サイトをバックアップ
bench --site erp.yourdomain.com backup
# クラウドにバックアップ
bench --site erp.yourdomain.com backup --with-files
# バックアップを復元
bench --site erp.yourdomain.com restore /path/to/database.sql.gz
# 定期バックアップ(crontab に追加)
0 2 * * * cd /home/frappe/frappe-bench && bench backup-all-sites
パフォーマンス最適化
# 1. Redis キャッシュを有効化(site_config.json で)
{
"cache_redis": "redis://localhost:6379"
}
# 2. データベースインデックスの最適化
# 高頻度クエリフィールドにインデックスを追加
frappe.db.add_index("Sales Invoice", ["customer", "posting_date"])
# 3. Gunicorn のマルチプロセスを有効化
# bench 設定で設定
bench config set-common-config -c gunicorn_workers 4
モニタリングとログ
# bench ログを確認
bench --site erp.yourdomain.com logs
# MariaDB のスロークエリを確認
mysql -u root -e "SHOW VARIABLES LIKE 'slow_query_log%';"
# サーバーリソースをモニタリング
htop
iotop
ERPNext よくある質問 FAQ
Q1: ERPNext はどの規模の企業に適していますか?
A: ERPNext は小規模から中規模企業(1〜500 名)に適しています: - 小規模企業(1〜50 名):無料セルフホスト、ライセンスコストゼロ、迅速に立ち上げ - 中規模企業(50〜500 名):複数会社、複数倉庫、複数通貨に対応し、複雑なビジネスニーズを満たす - 大規模企業(500 名以上):Frappe Cloud またはセルフクラスターでスケールアップ可能
Q2: ERPNext に中国語版はありますか?
A: はい、ERPNext は中国語(簡体字)を標準でサポートしており、インターフェース、レポート、印刷テンプレートなどすべて対応しています。システム設定で言語を切り替えられます。コミュニティでは中国会計基準や税制を含む中国語ローカライゼーションの改善も継続的に進められています。
Q3: ERPNext と Odoo の違いは何ですか?
A: 主な違いは以下の通り: - オープンソース度合い:ERPNext は 100% オープンソース(GPL)、Odoo コミュニティ版は財務などのコアモジュールが不足 - 価格:ERPNext は完全無料、Odoo エンタープライズ版はユーザーごとに課金 - カスタム開発:ERPNext の Frappe フレームワークはローコード能力がより強く、Odoo はより多くのコーディングが必要 - 中国語エコシステム:ERPNext の中国語コミュニティは活発、Odoo の中国語資料はより成熟している
Q4: ERPNext をセルフホストするにはどんなサーバーが必要ですか?
A: 最低構成: - 2 コア CPU + 4GB メモリ + 20GB ストレージ — テストと小規模チーム(20 名未満)向け - 4 コア CPU + 8GB メモリ + 50GB ストレージ — 中規模企業(20〜100 名)向け - 8 コア CPU + 16GB メモリ + 100GB+ SSD — 大規模企業(100 名以上)向け
データベースパフォーマンスを向上させるため、SSD ストレージの使用を推奨します。
Q5: ERPNext は他のシステムと統合できますか?
A: はい。ERPNext は REST API と Webhook を提供しており、以下のシステムと統合できます: - EC プラットフォーム:Shopify、WooCommerce、有賛 - 決済ゲートウェイ:支付宝(アリペイ)、WeChat Pay、Stripe - 物流システム:順豊(SF Express)、中通(ZTO)、FedEx - サードパーティシステム:API を介して任意の外部システムと連携
# ERPNext REST API の例
import requests
# 顧客リストを取得
response = requests.get(
"https://erp.yourdomain.com/api/resource/Customer",
headers={"Authorization": "token api_key:api_secret"}
)
customers = response.json()
# 営業発注書を作成
response = requests.post(
"https://erp.yourdomain.com/api/resource/Sales Order",
headers={"Authorization": "token api_key:api_secret", "Content-Type": "application/json"},
json={"customer": "CUST-001", "items": [{"item_code": "ITEM-001", "qty": 10}]}
)
まとめ
ERPNext は現在、最も成熟して最も完全なオープンソース ERP ソリューションの一つです。中小企業の日常業務管理ニーズを満たすだけでなく、Frappe フレームワークの強力な拡張能力を通じて、高度にカスタマイズされた二次開発も実現できます。
クイックスタートパス: 1. Docker でワンクリックデプロイ(5 分) 2. 会社、ユーザー、基本データの設定を完了 3. 財務または CRM モジュールから使い始める 4. ビジネスニーズに合わせて段階的に他のモジュールを有効化 5. 必要に応じてカスタム開発を実施
スタートアップの創業企業であろうと、デジタルトランスフォーメーションを進める伝統企業であろうと、ERPNext は真剣に検討する価値があります。100% 無料、完全オープンソース、活発なコミュニティ——これこそが ERPNext のコアコンピテンスです。
ERPNext 公式サイト や GitHub リポジトリ で詳細をご確認ください。