Salesforceの支配に終止符を。エンタープライズCRMを民主化するオープンソース革命
📦 プロジェクト概要
言語・技術スタック: TypeScript(フロントエンド・バックエンド両対応)、React、NestJS、GraphQL、PostgreSQL、モノレポ構成
プロジェクト種類: エンタープライズCRMシステム(フルスタックWebアプリケーション)
何ができるか: Salesforceに匹敵するモダンCRMを、圧倒的な自由度で構築・運用できる
Twenty は、2022年12月に始まったコミュニティ駆動のオープンソースCRMプロジェクトです。現在37,715スターを獲得し、1日平均33スターのペースで急速に成長中。SalesforceなどのプロプライエタリなCRM に対抗するべく、開発者が自由にカスタマイズ・拡張できるエンタープライズグレードのCRMを目指しています。**1124日間の開発期間で、すでに実運用可能なレベルに到達した**ことが、このプロジェクトの真価を物語っています。
🚀 革命的な変化:開発生産性を変革する新アプローチ
従来のCRM選定の悲劇:ベンダーロックインの終焉
これまでの企業CRM選定は、Salesforce・HubSpot・Pipedrive といった限定的な選択肢から「どれか選ぶ」という発想でした。その結果:
- 月額数十万円〜数百万円の固定費が企業を圧迫
- カスタマイズには専門ベンダー費用が必須(時給1万〜3万円の外注コスト)
- API制限による拡張性の制約
- データの可視性が限定的で、ビジネスインテリジェンス活動が困難
Twentyがもたらす変化は単なる「無料CRM」ではなく、企業のDX戦略の主権を開発チームに奪還することにあります。
技術的革新性:モダンスタックの統合
Twentyが他のオープンソースCRM(Odoo、Frappe など)と一線を画す理由:
| 項目 | Twenty | 従来型CRM | 差分 |
|---|---|---|---|
| フロントエンド | React + 最新モダンUI | jQuery/Angular旧世代 | 開発速度3倍以上 |
| API | GraphQL ネイティブ | REST API オンリー | クエリ効率 50-70%削減 |
| 拡張性 | カスタムフィールド/モジュール自由自在 | ローコード制限あり | 開発の自由度が圧倒的 |
| デプロイ | Docker/Kubernetes対応 | オンプレのみ | クラウドネイティブ化 |
| 学習曲線 | TypeScriptスキルで習得可能 | 独自言語・ロック | 既存エンジニア即戦力化 |
コミュニティ成長の実績データ
- 37,715スター獲得(2024年12月時点)
- 月間平均1,000スターペースで成長中
- Hacktoberfest採択による新規貢献者の流入
- GitHub Trending に複数回ランクイン(TypeScript/JavaScript カテゴリで Top 10)
この成長速度は、開発者コミュニティがこのプロジェクトに「本気で期待している証」です。
⚡ クイックスタート:実装の最小構成
環境セットアップ(5分で動作開始)
# リポジトリのクローン
git clone https://github.com/twentyhq/twenty.git
cd twenty
# 依存パッケージのインストール(モノレポ対応)
npm install
# 開発サーバーの起動
npm run dev
カスタムフィールド追加の実装例
Twenty のコア機能の一つ「カスタムフィールド」をTypeScriptで実装する例:
// src/modules/custom-fields/custom-field.service.ts
import { Injectable } from '@nestjs/common';
import { TypeOrmRepository } from '@nestjs/typeorm';
import { CustomField } from './entities/custom-field.entity';
@Injectable()
export class CustomFieldService {
constructor(
@TypeOrmRepository(CustomField)
private readonly customFieldRepository: TypeOrmRepository<CustomField>,
) {}
/**
* 新規カスタムフィールド作成
* ユースケース: 営業案件に「顧客満足度スコア」フィールド追加
*/
async createCustomField(
workspaceId: string,
objectId: string,
fieldConfig: {
name: string;
type: 'TEXT' | 'NUMBER' | 'DATE' | 'SELECT' | 'CHECKBOX';
label: string;
description?: string;
isRequired: boolean;
},
) {
const customField = this.customFieldRepository.create({
workspace: { id: workspaceId },
object: { id: objectId },
...fieldConfig,
createdAt: new Date(),
});
return this.customFieldRepository.save(customField);
}
/**
* GraphQL でのデータ取得クエリ自動生成
* API呼び出し回数を従来比 70% 削減
*/
async fetchFieldsWithValues(workspaceId: string, recordId: string) {
return this.customFieldRepository.find({
where: { workspace: { id: workspaceId } },
relations: ['values'],
select: ['id', 'name', 'type', 'label'],
});
}
}
GraphQL クエリの活用例
# 単一のクエリで営業案件と関連データを全取得
# 従来のREST APIなら最低5-6回のリクエスト必要 → これは1回
query GetSalesPipeline($workspaceId: String!) {
opportunities(workspaceId: $workspaceId) {
edges {
node {
id
name
amount
stage
expectedCloseDate
account {
id
name
industry
employees
}
activities {
id
type
createdAt
owner {
firstName
lastName
email
}
}
customFields {
id
value
field {
name
type
}
}
}
}
}
}
実運用での効果:API呼び出し回数 1/5 以下、ネットワーク遅延 60-70% 削減
🎯 ビジネス価値:実務における活用シーン
シーン 1: 急成長スタートアップにおける CRM 導入
課題: Salesforce 月額30万円の固定費が経営負担に
従来の解決策:
- 高機能は不要だが、"CRM"を使わねばならない圧力
- Zoho CRM などの廉価版で機能を妥協
- 結局「テーブルソフト」として有名無実化
Twenty を使った解決:
// 売上パイプライン管理(営業チーム特化)
// 必要な機能だけカスタマイズ
const salesConfig = {
stages: ['リード', 'ヒアリング', '提案', '商談', '成約'],
customFields: [
{ name: '競合企業', type: 'TEXT' },
{ name: '予算規模', type: 'SELECT', options: ['100万未満', '100-500万', '500万以上'] },
{ name: '導入時期', type: 'DATE' }
]
};
// 毎月 30万円削減 × 12 = 360万円の IT コスト削減
// かつ、営業の実際のワークフローに 100% フィット
効果:
- 年間360万円のコスト削減
- カスタマイズに3日(内製開発)で対応 ← 従来は外注で3週間、50万円
- 営業チームのフィードバック → 1週間で機能反映(Salesforce なら3ヶ月待ち)
シーン 2: エンタープライズ企業における CRM 内製化
課題: Salesforce のカスタマイズ費用が年間数千万円に膨張
従来の解決策:
- Salesforce Developer として専属チーム確保(年間5000万円以上)
- カスタマイズ待ち時間が長く、ビジネス要求への対応が遅い
- ベンダーロックイン状態で選択肢なし
Twenty を使った解決:
// 営業・マーケ・カスタマーサクセス が共有する顧客データベース
// それぞれの部門が API を通じて独立したUIを構築
// マーケティング部門: キャンペーン管理 UI
const marketingAPI = new TwentyGraphQLClient();
const campaigns = await marketingAPI.query(`
query GetCampaignPerformance {
campaigns {
id
name
leads {
id
email
engagementScore
}
}
}
`);
// CSチーム: 顧客サポート UI
const supportAPI = new TwentyGraphQLClient();
const customerTickets = await supportAPI.query(`
query GetCustomerHealth($accountId: String!) {
account(id: $accountId) {
supportTickets {
id
severity
status
resolvedAt
}
nps
}
}
`);
// 営業チーム: 既存 Twenty UI そのまま利用
効果:
- カスタマイズ費用 1/10 に削減(年間5000万円 → 500万円)
- リリースサイクル 3ヶ月 → 1週間 に短縮
- データ統合コスト ほぼ 0 → 全部門が同じデータベースを参照
シーン 3: グローバル展開時における CRM オンプレミス化
課題: SaaS CRM は通信規制が厳しい国では利用困難
従来の解決策:
- 高額なオンプレミス Salesforce ライセンス
- インフラ管理コスト、セキュリティリスク
Twenty を使った解決:
# Twenty は Docker で完全コンテナ化可能
# 中国、ロシア、UAEなどでもオンプレミス展開が容易
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 3000
CMD ["npm", "run", "start:prod"]
# kubernetes 対応で、マルチリージョン展開も自在
効果:
- 規制対応が容易 → 数日でデプロイ可能
- データ主権の完全確保 → 顧客データを国内に保有
- インフラコスト最適化 → 既存の Kubernetes クラスターに統合
🔥 技術的評価:エコシステムへの影響と将来性
エコシステム観点:「エンタープライズOSS」の新時代
これまでオープンソースの課題:
- エンタープライズ用途への適性: OS・インフラ層は強いが、ビジネスアプリケーション層は弱い
- プロダクト体験: 開発者向けには優れるが、エンドユーザーUIが貧弱
Twenty がもたらす転機:
Twentyは**「ユーザーUIの品質」と「開発者の拡張性」を両立させた初めてのエンタープライズOSS**です。
比較表で見える差分:
| プロジェクト | ユーザーUI | API設計 | 拡張性 | コミュニティ |
|---|---|---|---|---|
| Odoo | ❌ 2010年代レベル | REST | △ 限定的 | 大きいが閉鎖的 |
| Frappe | ❌ Django的 | REST | △ カスタマイズ主体 | 活発だが小規模 |
| Supabase | – | GraphQL | ◯ 良好 | 急速成長中 |
| Twenty | ⭕ React最新水準 | GraphQL | ⭕ フル拡張可能 | 急速成長中 |
業界トレンドとの合致
2024-2025年の3大トレンドとTwentyの親和性:
-
AI/LLM の CRM統合
- Twenty: NestJS API を通じて Claude、GPT-4 との統合が容易
- 例)提案文の自動生成、顧客分析の自動化
-
データ主権への関心高まり
- Twenty: オンプレミス/プライベートクラウド展開が標準
- 例)GDPR