OSS CRM比較:Twenty vs SuiteCRM vs Monica でSalesforceを脱却する
オープンソースラボ編集部 ・ 2026年6月13日
OSS CRM比較:Twenty vs SuiteCRM vs Monica でSalesforceを脱却する
Salesforce(月18,000円/ユーザー〜)・HubSpot CRM Pro(月$890/月〜)・Pipedrive(月$14/ユーザー〜)に対して、Twenty(モダンUI搭載の新興OSSCrm)・SuiteCRM(SugarCRMフォーク・エンタープライズ機能)・Monica(個人向けCRM)は自社サーバーで顧客データを管理できます。
OSS CRMを選ぶ理由
- コスト: Salesforce 10ユーザーは月18万円。Twentyセルフホストで0円
- データ主権: 顧客情報・商談履歴を外部SaaSに預けない(GDPR・個人情報保護法対応)
- カスタマイズ: SuiteCRMはモジュールとワークフローを完全カスタマイズ可能
- API統合: TwentyはGraphQL APIで社内システムとの統合が容易
主要ツールの概要
Twenty
2023年公開、TypeScript/React/NestJS製のOSS CRMです。GitHubスター26k+。Notionライクなモダンなデータベースビューと、Salesforceに近い機能セットをOSSで提供します。GraphQL API・カスタムオブジェクト・自動化ワークフロー・AI支援機能(商談サマリー)を備えた最新鋭のCRMです。
# Twenty を Docker Compose でセルフホスト
git clone https://github.com/twentyhq/twenty.git
cd twenty
# 環境変数を設定
cat > .env << 'EOF'
# Server
SERVER_URL=https://crm.yourcompany.com
APP_SECRET=your-random-32-char-secret-here
# PostgreSQL
PG_DATABASE_URL=postgresql://twenty:twenty_password@db:5432/default
POSTGRES_ADMIN_PASSWORD=root_password
# Redis
REDIS_URL=redis://redis:6379
# ストレージ(ローカルまたはS3)
STORAGE_TYPE=local
# または S3:
# STORAGE_TYPE=s3
# STORAGE_S3_REGION=ap-northeast-1
# STORAGE_S3_NAME=your-s3-bucket
# AWS_ACCESS_KEY_ID=your-key
# AWS_SECRET_ACCESS_KEY=your-secret
# メール
EMAIL_FROM_ADDRESS=crm@yourcompany.com
EMAIL_SYSTEM_ADDRESS=system@yourcompany.com
EMAIL_DRIVER=smtp
EMAIL_SMTP_HOST=smtp.sendgrid.net
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=apikey
EMAIL_SMTP_PASSWORD=your-sendgrid-key
EOF
docker compose up -d
// Twenty GraphQL API で商談・コンタクトを操作
// npmでGraphQLクライアントをインストール: npm install graphql-request
import { GraphQLClient, gql } from 'graphql-request'
const client = new GraphQLClient('https://crm.yourcompany.com/api', {
headers: {
Authorization: `Bearer ${process.env.TWENTY_API_KEY}`,
},
})
// コンタクトを作成
const CREATE_PERSON = gql`
mutation CreatePerson($data: PersonCreateInput!) {
createPerson(data: $data) {
id
name {
firstName
lastName
}
emails {
primaryEmail
}
}
}
`
async function createContact(firstName: string, lastName: string, email: string) {
const result = await client.request(CREATE_PERSON, {
data: {
name: { firstName, lastName },
emails: { primaryEmail: email },
},
})
return result.createPerson
}
// 商談(Opportunity)を作成してコンタクトと紐付け
const CREATE_OPPORTUNITY = gql`
mutation CreateOpportunity($data: OpportunityCreateInput!) {
createOpportunity(data: $data) {
id
name
amount {
amountMicros
currencyCode
}
stage
}
}
`
async function createDeal(name: string, amountJpy: number, personId: string) {
const result = await client.request(CREATE_OPPORTUNITY, {
data: {
name,
amount: {
amountMicros: amountJpy * 1000000, // microCurrency(円×100万)
currencyCode: 'JPY',
},
stage: 'NEW',
pointOfContactId: personId,
},
})
return result.createOpportunity
}
// 使用例: SaaS製品の申込フォームから自動でCRMに登録
async function onFormSubmit(formData: { firstName: string; lastName: string; email: string; plan: string }) {
const contact = await createContact(formData.firstName, formData.lastName, formData.email)
const deal = await createDeal(
`${formData.plan} プラン申込 - ${formData.firstName} ${formData.lastName}`,
formData.plan === 'pro' ? 29800 : 9800,
contact.id,
)
console.log(`CRM登録完了: Contact ${contact.id}, Deal ${deal.id}`)
}
# Twenty API を Python で操作(フォーム連携・バッチ処理)
import requests
import os
TWENTY_URL = 'https://crm.yourcompany.com'
API_KEY = os.environ['TWENTY_API_KEY']
def graphql(query: str, variables: dict = None) -> dict:
resp = requests.post(
f'{TWENTY_URL}/api',
headers={
'Authorization': f'Bearer {API_KEY}',
'Content-Type': 'application/json',
},
json={'query': query, 'variables': variables or {}},
)
resp.raise_for_status()
data = resp.json()
if 'errors' in data:
raise RuntimeError(data['errors'])
return data['data']
# コンタクト一覧を取得(フィルタ・ソート付き)
result = graphql('''
query {
people(
filter: { emails: { primaryEmail: { like: "%yourcompany.com%" } } }
orderBy: { createdAt: DescNullsLast }
first: 50
) {
edges {
node {
id
name { firstName lastName }
emails { primaryEmail }
company { name }
}
}
}
}
''')
contacts = [edge['node'] for edge in result['people']['edges']]
print(f'{len(contacts)}件のコンタクト取得')
機能比較表
| 比較項目 | Twenty | SuiteCRM | Monica |
|---|---|---|---|
| ターゲット | B2B SaaS向け | エンタープライズ | 個人・小規模 |
| UI | モダン(Notion風) | 伝統的 | シンプル |
| GraphQL API | ✅ | ❌(REST) | ✅ |
| ワークフロー自動化 | ✅ | ✅(高機能) | ❌ |
| AIサポート | ✅(β) | ❌ | ❌ |
| GitHub Stars | 26k+ | 4k+ | 22k+ |
CRMはLow-Codeカテゴリ/categories/low-codeのN8N・Zapierと連携して問い合わせフォームからの自動登録・メール送信ワークフローを構築します。マーケティングカテゴリ/categories/marketingのListmonkと組み合わせてCRMの顧客セグメントにメールキャンペーンを配信する統合も実現できます。
FAQ
Q. SalesforceからTwentyへのデータ移行はどうすればいいですか?
A. ①Salesforce Data Exportでオブジェクト(Account・Contact・Opportunity)をCSVダウンロード②TwentyのCSVインポート機能(Settings → Data Model → Import)でCSVをアップロード③またはTwenty APIのcreateManyミューテーションでバッチインポート(Pythonスクリプトで自動化)。注意: SalesforceのカスタムフィールドはTwentyでカスタムオブジェクトとして再作成が必要。Salesforceの「ルックアップ関係」はTwentyの「関連付け(Relations)」として設定し直します。大規模データ(10万レコード以上)はAPIバッチ(1000件/リクエスト)で分割インポートを推奨。
Q. TwentyとHubSpot CRM Freeはどちらがスタートアップに向いていますか?
A. コンタクト数が少ない間はHubSpot CRM Free(無料SaaS)、プライバシー・データ主権が重要になったらTwentyセルフホストが実用的です。HubSpot CRM Free: ①即使用可能(セットアップ不要)②メール統合(Gmail/Outlook)が標準③コンタクト数無制限。Twentyセルフホスト: ①サーバーコスト(VPS $10/月〜)が必要②GraphQL APIによる高度なカスタマイズ③データが自社サーバーに残る。移行タイミング: ①顧客データが急増してHubSpot Proへの有料アップグレードが必要になった時②セキュリティ監査でデータの所在証明を求められた時。
Q. Monicaは個人のリレーション管理にどう使いますか?
A. Monica(Personal CRM)は友人・家族・仕事の知人とのやりとりを管理します。機能: ①コンタクトのプロフィール(誕生日・住所・家族関係・会社)②インタラクション記録(いつ会った・何を話した)③リマインダー(誕生日・定期的な連絡)④タスク管理(この人に〇〇を確認する)。活用例: 業界カンファレンスで出会った人の名刺情報とメモをMonicaに記録→3ヶ月後のリマインダー設定→フォローアップを忘れない。セルフホスト版はdocker pull monicahq/monicahqで起動。データは自分のサーバーに保存され、monica.comのSaaS版(月$9)のデータが気になる場合に有効です。
Q. SuiteCRMでGmailのメールを自動でCRMに記録するには?
A. SuiteCRMのメール統合を設定します。①Admin → Email → Email Settings でGmailのIMAPを設定(App Passwordを使用)②Accounts→メールアドレスを各コンタクト/Accountと紐付け③SuiteCRMのArchive機能: メールをsales@yourcompany.comにBCCすると自動でCRMのコンタクト/Accountタイムラインに記録。より高度な方法: Google Apps ScriptまたはZapierでGmailの受信メールをSuiteCRM REST API(/api/v8/module/EmailAddress)に送信するフックを設定。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| B2B SaaS・モダンUI・GraphQL API | Twenty |
| エンタープライズ・複雑ワークフロー | SuiteCRM |
| 個人のリレーション管理 | Monica |