OSS CRM比較:SuiteCRM vs Odoo vs EspoCRM でSalesforceをセルフホスト代替
オープンソースラボ編集部 ・ 2026年6月13日
OSS CRM比較:SuiteCRM vs Odoo vs EspoCRM でSalesforceをセルフホスト代替
SalesforceはEssentialsプランで月$25/ユーザー〜、ProfessionalプランでHubSpotは月$90/ユーザー〜と、顧客管理ソリューションは高額です。SuiteCRM(SugarCRM fork)・Odoo CRM(ERP統合)・EspoCRM(軽量・高速)はSalesforce代替のOSS CRMです。セルフホストで顧客データを自社サーバーに保管できます。
OSS CRMを選ぶ理由
- コスト削減: Salesforceの月$25〜300/ユーザーに対して、サーバー代のみ
- データ主権: 顧客データ・商談情報を自社サーバーに保管(競合他社のクラウドに送らない)
- カスタマイズ: 独自の商談フロー・カスタムフィールド・自動化ルールを自由に設定
- API連携: REST APIで既存の業務システム(会計・在庫・ECサイト)と統合
- GDPR対応: EU顧客データを自社EU域内サーバーで管理してGDPR準拠
主要ツールの概要
SuiteCRM
SugarCRM Community EditionのフォークとしてSalesAgility社が開発するOSS CRMです。GitHubスター4k+。PHP製でWordPressと同様の技術スタックのため、多くのWeb開発者が運用できます。Salesforceと機能が最も近く、アカウント・コンタクト・リード・商談・ケース・見積もり・Eメールキャンペーン・レポート・ダッシュボードが揃っています。
# SuiteCRMをdocker-composeでセルフホスト
version: "3"
services:
suitecrm:
image: bitnami/suitecrm:latest
restart: always
ports:
- "8080:8080"
- "8443:8443"
depends_on:
- mariadb
environment:
SUITECRM_DATABASE_HOST: mariadb
SUITECRM_DATABASE_PORT_NUMBER: 3306
SUITECRM_DATABASE_NAME: suitecrm
SUITECRM_DATABASE_USER: suitecrm
SUITECRM_DATABASE_PASSWORD: your-password
SUITECRM_USERNAME: admin
SUITECRM_PASSWORD: Admin@1234
SUITECRM_EMAIL: admin@yourcompany.com
SUITECRM_SMTP_HOST: smtp.sendgrid.net
SUITECRM_SMTP_PORT: 587
SUITECRM_SMTP_USER: apikey
SUITECRM_SMTP_PASSWORD: SG.your-key
SUITECRM_SMTP_PROTOCOL: tls
volumes:
- suitecrm_data:/bitnami/suitecrm
mariadb:
image: bitnami/mariadb:latest
restart: always
environment:
MARIADB_ROOT_PASSWORD: rootpass
MARIADB_DATABASE: suitecrm
MARIADB_USER: suitecrm
MARIADB_PASSWORD: your-password
volumes:
- mariadb_data:/bitnami/mariadb
volumes:
suitecrm_data:
mariadb_data:
# SuiteCRM REST APIv8(JSON:API準拠)でデータを操作
import requests
SUITECRM_URL = "https://crm.yourcompany.com"
def get_token():
res = requests.post(f"{SUITECRM_URL}/api/v8/oauth/access_token", data={
"grant_type": "client_credentials",
"client_id": "your-client-id",
"client_secret": "your-client-secret",
})
return res.json()["access_token"]
TOKEN = get_token()
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/vnd.api+json"}
# リード一覧を取得
def get_leads(limit: int = 20):
res = requests.get(
f"{SUITECRM_URL}/api/v8/modules/Leads",
headers=HEADERS,
params={"page[size]": limit, "sort": "-date_entered"}
)
return res.json()["data"]
# 新しい商談を作成
def create_opportunity(name: str, amount: float, account_name: str, close_date: str):
payload = {
"data": {
"type": "Opportunities",
"attributes": {
"name": name,
"amount": amount,
"account_name": account_name,
"date_close": close_date,
"sales_stage": "Prospecting",
"currency_id": "-99", # JPY
}
}
}
res = requests.post(f"{SUITECRM_URL}/api/v8/modules/Opportunities", headers=HEADERS, json=payload)
return res.json()
# Eメールキャンペーンの開封率を取得してSlackに送る
def campaign_report():
res = requests.get(f"{SUITECRM_URL}/api/v8/modules/Campaigns", headers=HEADERS)
for campaign in res.json()["data"]:
attrs = campaign["attributes"]
print(f"キャンペーン: {attrs['name']} | 開封率: {attrs.get('open_rate', 0):.1f}%")
Odoo CRM
PythonとJavaScript製のオープンコアERP/CRMです。GitHubスター36k+。OdooはCRM単体でなく販売・在庫・会計・HR・製造・Eコマース等が統合されたERPプラットフォームであり、CRMはその1モジュールです。Odoo Community Edition(無料・完全OSSのGPL-3.0)でもCRM・販売・在庫・会計の基本機能が使えます。企業規模が拡大したときにモジュールを追加して拡張できるのが強みです。
# Odoo CommunityをDockerで起動
version: "3"
services:
odoo:
image: odoo:17
restart: always
depends_on:
- db
ports:
- "8069:8069"
volumes:
- odoo_data:/var/lib/odoo
- ./config:/etc/odoo
- ./addons:/mnt/extra-addons
environment:
HOST: db
USER: odoo
PASSWORD: your-password
db:
image: postgres:15-alpine
restart: always
environment:
POSTGRES_DB: postgres
POSTGRES_USER: odoo
POSTGRES_PASSWORD: your-password
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
odoo_data:
pgdata:
# OdooのXMLRPC APIでCRMデータを操作(Python)
import xmlrpc.client
ODOO_URL = "https://odoo.yourcompany.com"
DB = "my_database"
USERNAME = "admin@yourcompany.com"
PASSWORD = "your-password"
# 認証
common = xmlrpc.client.ServerProxy(f"{ODOO_URL}/xmlrpc/2/common")
uid = common.authenticate(DB, USERNAME, PASSWORD, {})
models = xmlrpc.client.ServerProxy(f"{ODOO_URL}/xmlrpc/2/object")
def search_leads(domain=None, limit=20):
'''CRMリードを検索'''
return models.execute_kw(DB, uid, PASSWORD, 'crm.lead', 'search_read',
[domain or []], {'fields': ['name', 'partner_name', 'expected_revenue', 'stage_id'], 'limit': limit})
def create_lead(name: str, partner: str, amount: float, salesperson_id: int):
'''新リードを作成'''
return models.execute_kw(DB, uid, PASSWORD, 'crm.lead', 'create', [{
'name': name,
'partner_name': partner,
'expected_revenue': amount,
'user_id': salesperson_id,
'stage_id': 1, # New
}])
# 今月のパイプライン合計を集計
from datetime import datetime
this_month = datetime.now().replace(day=1).strftime('%Y-%m-%d')
leads = search_leads([['create_date', '>=', this_month], ['active', '=', True]], limit=1000)
total = sum(l['expected_revenue'] for l in leads)
print(f"今月のパイプライン: ¥{total:,.0f}")
EspoCRM
PHP製の軽量・高速なOSS CRMです。GitHubスター1.6k+。SuiteCRMよりシンプルで動作が軽く、VPS(2GB RAM)でも快適に動作します。アカウント・コンタクト・リード・商談・Eメール・カレンダー・タスク・レポートが揃っており、中小企業のSalesforce代替として最もバランスが良いツールです。REST APIが整備されており、Zapier・Make.comからも接続できます。
# EspoCRMをDockerで起動
version: "3"
services:
espocrm:
image: espocrm/espocrm:latest
restart: always
ports:
- "80:80"
depends_on:
- espocrm-mysql
environment:
ESPOCRM_DATABASE_HOST: espocrm-mysql
ESPOCRM_DATABASE_NAME: espocrm
ESPOCRM_DATABASE_USER: root
ESPOCRM_DATABASE_PASSWORD: mysql_root_password
ESPOCRM_ADMIN_USERNAME: admin
ESPOCRM_ADMIN_PASSWORD: admin_password
ESPOCRM_SITE_URL: "https://crm.yourcompany.com"
volumes:
- espocrm_data:/var/www/html
espocrm-mysql:
image: mysql:8
restart: always
environment:
MYSQL_ROOT_PASSWORD: mysql_root_password
MYSQL_DATABASE: espocrm
volumes:
- espocrm_mysql:/var/lib/mysql
volumes:
espocrm_data:
espocrm_mysql:
// EspoCRM REST APIをTypeScriptから使う
const ESPO_URL = 'https://crm.yourcompany.com';
const ESPO_TOKEN = Buffer.from('admin:your-password').toString('base64');
const HEADERS = { Authorization: `Basic ${ESPO_TOKEN}`, 'Content-Type': 'application/json' };
// 商談一覧を取得
async function getOpportunities(stage?: string) {
const where = stage ? `&where[0][type]=equals&where[0][attribute]=stage&where[0][value]=${stage}` : '';
const res = await fetch(`${ESPO_URL}/api/v1/Opportunity?orderBy=createdAt&order=desc${where}`, { headers: HEADERS });
return (await res.json()).list;
}
// 今週フォローアップが必要なリードを取得してSlack通知
async function weeklyFollowupAlert() {
const today = new Date().toISOString().split('T')[0];
const res = await fetch(
`${ESPO_URL}/api/v1/Lead?where[0][type]=today&where[0][attribute]=nextActivityDate`,
{ headers: HEADERS }
);
const leads = (await res.json()).list;
if (leads.length > 0) {
await fetch(process.env.SLACK_WEBHOOK_URL!, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
text: `📞 本日フォローアップ必要: ${leads.length}件
` +
leads.slice(0, 5).map((l: any) => `• ${l.name} (${l.status})`).join('
'),
}),
});
}
}
機能比較表
| 比較項目 | SuiteCRM | Odoo CRM | EspoCRM |
|---|---|---|---|
| ライセンス | AGPL-3.0 | LGPL-3.0 | AGPL-3.0 |
| Salesforce類似度 | ✅ 高い | △ | △ |
| ERP統合 | △(プラグイン) | ✅(統合ERP) | ❌ |
| 最小要件 | 4GB RAM | 4GB RAM | 2GB RAM |
| REST API | ✅(JSON:API) | ✅(XMLRPC/JSON) | ✅ |
| GitHub Stars | 4k+ | 36k+ | 1.6k+ |
CRM連携するマーケティングオートメーションツールはMarketingカテゴリ/categories/marketingを参照してください。CRMと連携するカスタマーサポートツールはCommunicationカテゴリ/categories/communicationにまとめています。
FAQ
Q. SalesforceからSuiteCRMにデータを移行できますか?
A. Salesforceはデータエクスポート機能でCSVをエクスポートできます。移行手順: ①SalesforceからAccounts・Contacts・Leads・Opportunities・Cases等のオブジェクトをCSVエクスポート②SuiteCRMのインポートウィザードでCSVをインポート(フィールドマッピングが必要)③カスタムフィールドはSuiteCRM Studio(Admin > Studio)で事前に作成④関連データ(AccountとContactの紐付け)はAccount Nameで自動マッチングまたは手動設定。工数の目安: 100件未満なら1〜2日、10,000件超なら1〜2週間。注意: SalesforceのProcess Builder(自動化)・Apex(カスタムコード)はSuiteCRMのWorflow Modulesと Logic Hooksで再実装が必要です。
Q. OdooのCommunity版とEnterprise版の違いは何ですか?
A. Community版(無料・LGPL-3.0)で使える機能: CRM・販売・在庫・製造・購買・会計(基本)・プロジェクト管理・Eメールマーケティング。Enterprise版(有償)のみの機能: 帳票の高度カスタマイズ・モバイルアプリ・BI(ビジネスインテリジェンス)・電子署名・全機能のSLA付きサポート・Odoo Studio(ノーコードカスタマイズ)・IoT Box・ホスティング(Odoo.sh)。Community版は自社サーバーで無料で使えますが、財務・給与等の法定報告書の自動生成はEnterprise版が必要な場合があります。日本向け: 日本の消費税・インボイス制度への対応はCommunity版では不完全なケースがあります。
Q. EspoCRMでSNSやGoogleカレンダーと同期するには?
A. EspoCRMはGoogle Calendar・Microsoft 365との双方向同期をサポートしています。設定: Administration > Google Maps・Google Calendar Integration。APIキーを設定すると、EspoCRMのミーティング・通話が自動的にGoogleカレンダーに同期されます。Slack・LINE・ChatWorkとの連携はEspoCRMのWebhook機能を使います:
// EspoCRMのWebhookをNext.js API Routeで受け取る
// /api/espocrm-webhook
export async function POST(req: Request) {
const payload = await req.json();
if (payload.entity === 'Lead' && payload.type === 'create') {
// 新しいリードが作成されたらSlackに通知
await fetch(process.env.SLACK_WEBHOOK_URL!, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
text: `🆕 新リード: ${payload.data.name} (${payload.data.emailAddress})`,
}),
});
}
return Response.json({ received: true });
}
Q. 中小企業(10〜50名)が使うCRMとしてOdoo・SuiteCRM・EspoCRMのどれを選ぶべきですか?
A. 用途によって異なります。EspoCRM: 「顧客管理・商談管理だけが欲しい」シンプルなCRM用途に最適。軽くて設定しやすく、小チームが2〜3日でセットアップできます。SuiteCRM: Salesforceを使っていたが高いので乗り換えたいチーム向け。UIと機能がSalesforceに近いため移行の摩擦が少ない。Odoo Community: CRMだけでなく在庫・請求書・プロジェクト管理も使いたい場合。会社成長とともにモジュールを追加できますが、初期設定が複雑で1〜2週間かかります。推奨: まずEspoCRMで始め、より複雑なワークフローが必要になったらSuiteCRMへ移行するのが摩擦が少ないです。ERPが必要になった段階でOdooを検討してください。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| Salesforce代替・フル機能CRM | SuiteCRM |
| ERP統合・スケール対応 | Odoo Community |
| 中小企業の軽量CRM | EspoCRM |