OSS ERP比較:Odoo vs ERPNext vs Dolibarr でSAP・freeeを脱却する
オープンソースラボ編集部 ・ 2026年6月13日
OSS ERP比較:Odoo vs ERPNext vs Dolibarr でSAP・freeeを脱却する
SAP Business One(月100,000円〜)・freee(月23,760円〜)・弥生会計(月27,280円〜)に対して、Odoo(統合ビジネスアプリ群)・ERPNext(Python/Frappe製のモジュラーERP)・Dolibarr(PHP製の軽量ERP/CRM)はOSSでERPをセルフホストできます。
OSS ERPを選ぶ理由
- コスト: Odooコミュニティ版は無料。SAP Business One(年間150万円〜)と比べて大幅削減
- モジュール化: 会計・在庫・販売・購買・HR・製造を必要なものだけ有効化
- カスタマイズ: Python/JavaScriptで独自ビジネスロジックをモジュールとして追加
- ローカライズ: ERPNextは日本語対応・消費税計算・電子帳簿保存法対応(コミュニティ)
主要ツールの概要
Odoo
2005年公開、Python/JavaScript(OWL)製のOSSです。GitHubスター40k+。会計・販売・CRM・在庫・製造・HR・eコマース・プロジェクト管理など50+アプリを一つのプラットフォームで提供します。コミュニティ版は無料・エンタープライズ版はモジュール単位の有料(月$28/ユーザー〜)。
# docker-compose.yml - Odoo 17 セルフホスト
version: '3.8'
services:
odoo:
image: odoo:17.0
restart: unless-stopped
ports:
- "8069:8069"
environment:
HOST: postgres
USER: odoo
PASSWORD: ${DB_PASSWORD}
volumes:
- odoo_data:/var/lib/odoo
- ./addons:/mnt/extra-addons # カスタムモジュール
depends_on:
- postgres
command: --database mycompany --update all
postgres:
image: postgres:15
restart: unless-stopped
environment:
POSTGRES_DB: postgres
POSTGRES_USER: odoo
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
odoo_data:
postgres_data:
# Odoo XML-RPC APIで受注を自動作成
import xmlrpc.client
import os
ODOO_URL = 'https://erp.yourcompany.com'
DB = 'mycompany'
USERNAME = 'admin'
API_KEY = os.environ['ODOO_API_KEY']
# 認証
common = xmlrpc.client.ServerProxy(f'{ODOO_URL}/xmlrpc/2/common')
uid = common.authenticate(DB, USERNAME, API_KEY, {})
models = xmlrpc.client.ServerProxy(f'{ODOO_URL}/xmlrpc/2/object')
def call(model: str, method: str, *args):
return models.execute_kw(DB, uid, API_KEY, model, method, list(args))
# 顧客を検索または作成
def get_or_create_partner(name: str, email: str) -> int:
partners = call('res.partner', 'search', [('email', '=', email)])
if partners:
return partners[0]
return call('res.partner', 'create', {
'name': name,
'email': email,
'customer_rank': 1,
})
# 販売注文(Sale Order)を作成
def create_sale_order(partner_id: int, product_id: int, qty: float, price: float) -> int:
order_id = call('sale.order', 'create', {
'partner_id': partner_id,
'order_line': [
(0, 0, { # 新しい行を追加
'product_id': product_id,
'product_uom_qty': qty,
'price_unit': price,
})
],
})
# 注文を確認(Draft → Sale)
call('sale.order', 'action_confirm', [order_id])
return order_id
# 使用例: ECサイトの注文をOdooに自動登録
partner_id = get_or_create_partner('田中太郎', 'tanaka@example.com')
order_id = create_sale_order(
partner_id=partner_id,
product_id=42, # OdooのProduct ID
qty=2,
price=9800.0,
)
print(f'販売注文 #{order_id} 作成完了')
# Odoo カスタムモジュール(addons/my_module/__manifest__.py)
{
'name': 'My Custom Module',
'version': '17.0.1.0.0',
'category': 'Custom',
'author': 'Your Company',
'depends': ['sale', 'account'],
'data': [
'views/sale_order_views.xml',
'security/ir.model.access.csv',
],
'installable': True,
'auto_install': False,
}
# models/sale_order.py - 受注に独自フィールドを追加
from odoo import models, fields, api
class SaleOrder(models.Model):
_inherit = 'sale.order'
# カスタムフィールド: 案件の優先度スコア
priority_score = fields.Integer(
string='優先度スコア',
compute='_compute_priority_score',
store=True,
)
@api.depends('amount_total', 'partner_id.country_id')
def _compute_priority_score(self):
for order in self:
# 金額が高い × 日本顧客 = 高優先度
base_score = min(int(order.amount_total / 10000), 100)
country_bonus = 20 if order.partner_id.country_id.code == 'JP' else 0
order.priority_score = base_score + country_bonus
ERPNext
2008年公開、Python/JavaScript(Frappe Framework)製のOSSです。GitHubスター22k+。中小製造業・非製造業・教育・医療向けの垂直統合型ERPで、会計・在庫・HR・給与・プロジェクト管理を提供。日本語UI・日本の消費税対応がコミュニティで整備されています。
# ERPNext を Frappe Docker でデプロイ
git clone https://github.com/frappe/frappe_docker.git
cd frappe_docker
cp example.env .env
# .env を編集してサイト名とパスワードを設定
sed -i 's/SITE_NAME=erp.example.com/SITE_NAME=erp.yourcompany.com/' .env
# 起動(フルスタック)
docker compose -f compose.yaml -f overrides/compose.mariadb.yaml -f overrides/compose.redis.yaml up -d
# ERPNextアプリのインストール
docker compose exec backend bench get-app --branch version-15 erpnext
docker compose exec backend bench install-app erpnext --site erp.yourcompany.com
機能比較表
| 比較項目 | Odoo | ERPNext | Dolibarr |
|---|---|---|---|
| モジュール数 | 50+ | 20+ | 40+ |
| 会計・財務 | ✅ | ✅ | ✅ |
| 製造(MRP) | ✅ | ✅ | △ |
| eコマース | ✅ | ✅ | ❌ |
| 日本語対応 | ✅ | ✅(コミュ) | ✅ |
| GitHub Stars | 40k+ | 22k+ | 5k+ |
ERP・会計システムはLow-Codeカテゴリ/categories/low-codeのN8Nと連携してECサイト(Shopify・WooCommerce)の注文を自動でOdooに取り込むワークフローを構築します。マーケティングカテゴリ/categories/marketingのListmonkとOdoo CRMを組み合わせてターゲットメールキャンペーンを実行する統合も実現できます。
FAQ
Q. freeeからOdooへの会計データ移行方法は?
A. ①freeeから仕訳データをCSVエクスポート(設定→エクスポート→仕訳帳)②Odooの会計モジュールの勘定科目(Chart of Accounts)をfreeeに合わせて設定③Odoo「会計→仕訳帳→インポート」からCSVをインポート。変換スクリプト(Python)でfreeeのCSV形式をOdoo標準形式(date,account_code,debit,credit,narration)に変換する中間ステップが必要です。消費税コードもodoo_tax_codeとして事前に設定しておく必要があります。電子帳簿保存法対応: Odooの請求書PDF出力にタイムスタンプを付与するカスタムモジュールがコミュニティで提供されています。
Q. Odooのコミュニティ版(Community)とエンタープライズ版(Enterprise)の違いは何ですか?
A. 主な差分: ①会計: コミュニティはシングルカレンシー・エンタープライズは多通貨・銀行照合の自動化②eコマース: コミュニティ版は基本機能のみ・エンタープライズは拡張eコマース③モバイルアプリ: エンタープライズのみ対応④テクニカルサポート: エンタープライズはOdoo社のサポート契約含む。セルフホストのコミュニティ版(無料)で始めて、機能が不足した場合にエンタープライズ版(月$28/ユーザー〜)に移行するのが一般的な選択肢です。Odooのコミュニティ版でも400社以上のサードパーティアドオン(apps.odoo.com)が利用可能です。
Q. ERPNextの「Frappe Framework」とは何ですか?
A. FrappeはERPNextを構築しているPythonのフルスタックWebフレームワークです(Djangoに似た構成)。特徴: ①DocType(データモデル)をコードなしでUI定義→自動でAPI・フォーム・リストビューが生成②Permission framework(ロールベースアクセス制御)が組み込み③独自のMariaDB/PostgreSQLクエリビルダーとWebSocket通知④カスタムアプリ開発: bench new-app myappでスケルトン生成→bench install-app myappでERPNextに追加。ERPNextのカスタマイズはPython(DocTypeロジック・Hooks・Webマーケットプレース)とJavaScript(フォームスクリプト・ダッシュボード)で行います。
Q. 中小規模(社員30名)の製造業にはOdooとERPNextどちらが向いていますか?
A. 製造業にはERPNextが向いています。理由: ①BOM(Bill of Materials)・生産指示・品質検査フロー・在庫転送のUXがOdooより直感的②日本の製造業向けコミュニティアドオンが整っている③freeeとのCSV連携が比較的シンプル。OdooはeコマースやWebサイト統合・多国籍展開(英語・ユーロ中心)に強く、国内製造業の業務フローはERPNextの方がフィットしやすいです。ただしOdooのほうがUIの洗練度が高くユーザーの習熟が早いため、社員教育リソースが少ない場合はOdooを推奨する場合もあります。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| 総合ビジネスアプリ・eコマース統合 | Odoo |
| 製造業・国内中小企業・日本語強化 | ERPNext |
| 超軽量・PHP・会計+CRM程度で十分 | Dolibarr |