Cal.diy(calcom/cal.diy)
MIT · Turbo モノレポ · Next.js + tRPC + Prisma — セルフホスト向けスケジューリング
Cal.diy は Cal.com をベースに、エンタープライズ(EE)向け機能を除いたコミュニティ版フォーク。ライセンスは MIT で、ライセンスキーや Cal.com アカウントなしに動かせる。README では個人・非本番のセルフホストを想定しており、ホスト型の公式サービスは提供しない。
主要スタック(README「Built With」): Next.js、tRPC、React、Tailwind CSS、Prisma、Daily.co(ビデオ会議連携の一例)。
| 観点 | Cal.com | Cal.diy |
|---|---|---|
| ライセンス / 提供形態 | Open Core + ホスト型 SaaS | 100% MIT、セルフホストのみ |
| Teams / Organizations | EE 機能あり | 削除 |
| Insights / Workflows / SSO・SAML | EE 中心 | 削除 |
| ライセンスキー | EE 利用時に必要な場合あり | 不要 |
| メンテナンス | Cal.com 社 | コミュニティ(CONTRIBUTING.md) |
Yarn workspaces + Turbo。ルート package.json の workspaces が apps/*・packages/*・埋め込み・プラットフォーム例を束ねる。日常の開発は yarn dev が @calcom/web を起動する。
apps/
web # Next.js メイン UI(:3000)
api # Platform API v2(NestJS)
docs # API ドキュメントサイト
packages/
features # 予約・カレンダー・認証などドメイン
trpc # tRPC ルーター(viewer 等)
prisma # スキーマ・マイグレーション
app-store # カレンダー / 決済 / CRM 連携
embeds # 埋め込み Booker
platform # Atoms・型・Platform API 向け
emails · ui · i18n · …
flowchart TD
subgraph clients["クライアント"]
B[ブラウザ]
E[埋め込み embed.js]
end
subgraph apps["apps"]
W["@calcom/web\nNext.js"]
A["apps/api v2\nPlatform API"]
end
subgraph core["packages"]
T[trpc]
F[features]
P[prisma]
AS[app-store]
end
DB[(PostgreSQL)]
B --> W
E --> W
W --> T
T --> F
F --> P
P --> DB
F --> AS
A --> F
ドメインの置き場(予約まわり)
packages/features/bookings— 新規予約・キャンセル・座席・Webhook 連携packages/features/schedules·availability— 空き枠計算packages/trpc/server/routers/viewer/slots— スロット取得 APIpackages/embeds/embed-core— 外部サイトへの Booker 埋め込み
リポジトリ内 headless-routing-to-booking-flow.md は、ルーティングフォーム経由のヘッドレス導線も含む。ここでは一般的な公開イベントタイプへの予約を要約する。
flowchart TD
U[ゲストが予約ページを開く] --> S[空きスロット表示\nslots / availability]
S --> H[スロット選択\n一時ホールド]
H --> C[確認・入力送信]
C --> V{ホスト空き・\nイベント種別ルール}
V -->|OK| B[Booking 作成\nDB + カレンダー書込]
V -->|NG| X[エラー / 別枠案内]
B --> N[メール・Webhook]
eventType とホスト・チーム割当(RR / Collective 等)がスロット計算の入力になる。
app-store 経由の Google / Microsoft 等と selectedCalendars で busy を反映。
handleNewBooking 系が検証後、EventManager で外部カレンダー・会議 URL・通知をまとめて処理。
apps/api/v2 の Bookings / Event Types / Slots エンドポイントで同ドメインを HTTP からも利用可能(OpenAPI は docs/api-reference)。
README の Prerequisites: Node.js 18+、PostgreSQL 13+、Yarn。統合開発用シード付きの最短経路は Docker 前提の yarn dx。
git clone https://github.com/calcom/cal.diy.git
cd cal.diy
yarn
cp .env.example .env
# NEXTAUTH_SECRET / CALENDSO_ENCRYPTION_KEY を openssl で生成して .env に記載
yarn dx # Docker + Postgres + テストユーザー
yarn dev # http://localhost:3000yarn dx で作られるテストユーザー(README より)
| Password | Role | |
|---|---|---|
free@example.com | free | Free |
pro@example.com | pro | Pro |
admin@example.com | ADMINadmin2022! | Admin |
手動セットアップの要点
DATABASE_URLを.envに設定yarn workspace @calcom/prisma db-migrate(開発)またはdb-deploy(本番)- 開発時メール確認用に MailHog(任意)
yarn dev— メモリ不足時はNODE_OPTIONS=--max-old-space-size=16384を検討
Windows では packages/prisma/.env のシンボリックリンクを実ファイルのコピーに置き換える(README 記載)。
よく使うスクリプト(ルート package.json)
| コマンド | 用途 |
|---|---|
yarn dev | Web アプリ開発サーバー |
yarn dev:api | Web + API プロキシ |
yarn db-studio | Prisma Studio(:5555) |
yarn test-e2e | Playwright E2E(要 NEXTAUTH_URL) |
yarn test | Vitest ユニット |
yarn type-check | Turbo 型チェック |
公式イメージ: calcom/cal.diy(ARM は -arm サフィックス)。README の Docker Compose 手順: リポジトリ clone → .env 準備 → NEXTAUTH_SECRET / CALENDSO_ENCRYPTION_KEY を本番用に必ず生成。
git clone --recursive https://github.com/calcom/cal.diy.git
cd cal.diy
cp .env.example .env
# 秘密鍵を生成して .env を編集
docker compose up -d本番ビルド例: yarn build のあと yarn start(@calcom/web)。アップグレード時は git pull → yarn → Prisma マイグレーション → yarn predev で env 差分確認。
- GitHub: calcom/cal.diy
- リポジトリ内
README.md— セットアップ・Docker・統合 - リポジトリ内
CONTRIBUTING.md·AGENTS.md - リポジトリ内
headless-routing-to-booking-flow.md— ルーティングフォーム付き予約導線 - リポジトリ内
docs/api-reference/v2/openapi.json— Platform API v2