AI

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('
'),
      }),
    });
  }
}

機能比較表

比較項目SuiteCRMOdoo CRMEspoCRM
ライセンスAGPL-3.0LGPL-3.0AGPL-3.0
Salesforce類似度✅ 高い
ERP統合△(プラグイン)✅(統合ERP)
最小要件4GB RAM4GB RAM2GB RAM
REST API✅(JSON:API)✅(XMLRPC/JSON)
GitHub Stars4k+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代替・フル機能CRMSuiteCRM
ERP統合・スケール対応Odoo Community
中小企業の軽量CRMEspoCRM

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。