← 資料一覧

Cal.diy(calcom/cal.diy)

MIT · Turbo モノレポ · Next.js + tRPC + Prisma — セルフホスト向けスケジューリング

1 — 概要

Cal.diy は Cal.com をベースに、エンタープライズ(EE)向け機能を除いたコミュニティ版フォーク。ライセンスは MIT で、ライセンスキーや Cal.com アカウントなしに動かせる。README では個人・非本番のセルフホストを想定しており、ホスト型の公式サービスは提供しない。

MITライセンス
3apps(web / api / docs)
20+packages ワークスペース
Node 18+実行要件
本番利用の注意: README の警告どおり、DB 運用・秘密情報・カレンダー連携の管理は自己責任。商用・エンタープライズ向けのホスト型は Cal.com を参照。

主要スタック(README「Built With」): Next.js、tRPC、React、Tailwind CSS、Prisma、Daily.co(ビデオ会議連携の一例)。

2 — Cal.com との差分
観点Cal.comCal.diy
ライセンス / 提供形態 Open Core + ホスト型 SaaS 100% MIT、セルフホストのみ
Teams / Organizations EE 機能あり 削除
Insights / Workflows / SSO・SAML EE 中心 削除
ライセンスキー EE 利用時に必要な場合あり 不要
メンテナンス Cal.com 社 コミュニティ(CONTRIBUTING.md)
3 — モノレポ構成

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 — スロット取得 API
  • packages/embeds/embed-core — 外部サイトへの Booker 埋め込み
4 — 予約フロー

リポジトリ内 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]
        
STEP 1
イベントタイプとホスト

eventType とホスト・チーム割当(RR / Collective 等)がスロット計算の入力になる。

STEP 2
カレンダー同期

app-store 経由の Google / Microsoft 等と selectedCalendars で busy を反映。

STEP 3
確定処理

handleNewBooking 系が検証後、EventManager で外部カレンダー・会議 URL・通知をまとめて処理。

STEP 4
Platform API

apps/api/v2 の Bookings / Event Types / Slots エンドポイントで同ドメインを HTTP からも利用可能(OpenAPI は docs/api-reference)。

5 — ローカル開発

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:3000

yarn dx で作られるテストユーザー(README より)

EmailPasswordRole
free@example.comfreeFree
pro@example.comproPro
admin@example.comADMINadmin2022!Admin

手動セットアップの要点

  1. DATABASE_URL を .env に設定
  2. yarn workspace @calcom/prisma db-migrate(開発)または db-deploy(本番)
  3. 開発時メール確認用に MailHog(任意)
  4. yarn dev — メモリ不足時は NODE_OPTIONS=--max-old-space-size=16384 を検討

Windows では packages/prisma/.env のシンボリックリンクを実ファイルのコピーに置き換える(README 記載)。

よく使うスクリプト(ルート package.json)

コマンド用途
yarn devWeb アプリ開発サーバー
yarn dev:apiWeb + API プロキシ
yarn db-studioPrisma Studio(:5555)
yarn test-e2ePlaywright E2E(要 NEXTAUTH_URL)
yarn testVitest ユニット
yarn type-checkTurbo 型チェック
6 — デプロイ

公式イメージ: 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