
2026/04/22 2:58
cal.diy: cal.com のオープンソース・コミュニティ版です。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Cal.diy は、商用生産環境で使用するための企業が求める機能を含んでおらず、個人プロジェクトおよび開発用途に限定されることを意図した、MIT ライセンス付きのオープンソース系フォークとして Cal.com に特化しています。完全にオープンソースであるものの、セルフホスティングには高度なサーバー管理スキルと特定の技術的プリレクヅィット(Node.js (>=18.x)、PostgreSQL (>=13.x)、Yarn など)が必要です。本プラットフォームは、暗号鍵 (
NEXTAUTH_SECRET、CALENDSO_ENCRYPTION_KEY) や Web Push 通知認証情報 (NEXT_PUBLIC_VAPID_PUBLIC_KEY、VAPID_PRIVATE_KEY) などの重要な環境変数を手動で生成しない限り、生産環境では機能しません。Google Calendar、Microsoft Graph、Zoom、HubSpot などの主要サービスとの統合は API クレデンシャル経由でサポートされていますが、プロフェッショナルなスケジューリングニーズを有する組織には、公式の Cal.com プラットフォームの利用が強く推奨されます。標準的なオープンソースエコシステムのようにコントリビューションが中央のリポジトリに反映されるのではなく、Cal.diy 向けのアップデートや修正はその独自のリポジトリ内で孤立して行われます。また、より早期バージョンからのアップグレードにはデータベースミグレーションの適用が必要です。デプロイは Docker Compose、Railway、Render、Northflank などを含む多种プラットフォーム経由で行うことが可能ですが、この開発者向けツールの複雑な手動設定を試みる場合、深い技術的専門知識が不足していると不安定状態を引き起こす可能性があります。本文
警告
ご自身の責任でのご使用となります。
Cal.diy は、Cal.com のオープンソース・コミュニティエディションです。自前の Cal.diy インスタンスをホストしたいユーザー向けに用意されています。個人利用かつ非本番環境における利用が強く推奨されます。インストールおよび設定手順はすべてよくご確認ください。サーバー管理、データベース管理、機密データの保護に関する高度な知識がないと自己ホスティングは実行できません。これらの責任を負うことが可能ですか?
商用代替案
商用および企業導入向けのスケジューリングインフラについては、Cal.com(Cal.diy ではありません)をご利用ください。ホストされた環境へのアクセスまたはオンプレミス・エンタープライズ版への招待はこちらから:https://cal.com/sales
Cal.diy について
Cal.diy は、コミュニティが主導する完全なオープンソースのスケジューリングプラットフォームです。Cal.com から企業用/商用コードをすべて取り除いたフォーク(派生版)です。
- ライセンス: 「エンタープライズエディション」機能は一切なく、100% MIT ライセンスに基づいています。
- ターゲット層: 商用依存関係を持たず、スケジューリングインフラに対する完全なコントロールを希望する個人や自己ホスター向けに設計されています。
Cal.com とは異なる点は何ですか?
- エンタープライズ機能なし: チーム、組織、Insights(分析)、ワークフロー、SSO/SAML、および EE 専用の他の機能すべてが削除されています。
- ライセンスキー不要: ボックスドロップで使用可能です。Cal.com アカウントやライセンスは不要です。
- 100% オープンソース: コード全体が MIT ライセンスで利用可能(「オープンコア」的な分裂はありません)。
- コミュニティによるメンテナンス: 寄稿を歓迎しており、それらはすべてこのプロジェクトに直接反映されます(詳細は CONTRIBUTING.md を参照)。
注意: Cal.diy は自己ホスト型のプロジェクトです。ホスト済み/マネージド版はありません。独自のインフラストラクチャ上で実行します。
技術スタック
- Next.js
- tRPC
- React.js
- Tailwind CSS
- Prisma.io
- Daily.co
始め方
ローカル環境で動作させるためのサンプルを取得するには、以下の手順に従ってください。
前提条件
Cal.diy を実行するための必要なものは以下の通りです:
- Node.js(バージョン:>=18.x)
- PostgreSQL(バージョン:>=13.x)
- Yarn(推奨)
利用可能な統合機能を有効化したい場合は、それぞれ追加の認証情報が必要になる場合があります。詳細は下の Integrations セクションをご覧ください。
開発環境のセットアップ
1. リポジトリのクローン
git clone https://github.com/calcom/cal.diy.git
Windows で実行している場合は、管理者権限を持つ Git Bash で次のコマンドを実行してください:
git clone -c core.symlinks=true https://github.com/calcom/cal.diy.git
2. プロジェクトフォルダへの移動とパッケージのインストール
プロジェクトフォルダに移動し、Yarn を使用して依存関係をインストールします:
yarn install
3. .env
ファイルの作成
.env
をコピーして.env.example
にリネームします。.env
の鍵を生成します:NEXTAUTH_SECRET
生成された値をopenssl rand -base64 32
ファイル内の.env
パラメータの下に追加します。NEXTAUTH_SECRET
の鍵を生成します:CALENDSO_ENCRYPTION_KEY
生成された値をopenssl rand -base64 24
ファイル内の.env
パラメータの下に追加します。CALENDSO_ENCRYPTION_KEY
Windows ユーザー向け注意: Prisma エラー(「変数名に / が含まれています」などの予期せぬ文字)を防ぐため、パッケージまたは prisma/.env のシンクを実際のコピーに置き換えてください:
rm packages/prisma/.env && cp .env packages/prisma/.env
yarn dx
を使用したクイックスタート
yarn dxDocker と Docker Compose のインストールが完了している必要があります。ローカル Postgres インスタンスおよび数人のテストユーザー(認証情報はコンソールに表示されます)を起動します。
デフォルトで作成された認証情報
| メールアドレス | パスワード | ロール |
|---|---|---|
| free@example.com | free | 一般ユーザー |
| pro@example.com | pro | プロユーザー |
| trial@example.com | trial | 試用版ユーザー |
| admin@example.com | ADMINadmin2022! | 管理者ユーザー |
| onboarding@example.com | onboarding | オンボーディング未完了 |
これらのいずれかの認証情報を使用して
http://localhost:3000 でサインインできます。
ヒント: シード(初期データ)された全ユーザー一覧とその詳細を表示するには、
yarn db-studio を実行し、http://localhost:5555 を訪れましょう。
開発に関するヒント
メモリ制限の増加
アプリを起動する前に、シェルスクリプトに以下の記述を追加します:
export NODE_OPTIONS="--max-old-space-size=16384"
alternatively(代替案)として、「16384」の部分を割り当てたいメモリの量に置き換えてください。
ログの出力レベルの制御
.env ファイルに NEXT_PUBLIC_LOGGER_LEVEL={level} を追加します。レベルは以下の通りです:
- 0: silly(きわめて細かく)
- 1: trace
- 2: debug
- 3: info
- 4: warn
- 5: error
- 6: fatal
例:
info レベル以上のログを有効にするには、次のように実行します:
echo 'NEXT_PUBLIC_LOGGER_LEVEL=3' >> .env
Gitpod セットアップ
下のボタンをクリックして、Gitpod でこのプロジェクトを開きましょう。ブラウザ上で完全構成済みのワークスペースが開き、必要な依存関係はすべて既にインストールされています。
[Gitpod で開く] (ボタンのプレースホルダー)
手動セッティング(ローカル DB)
- 環境変数の設定:
ファイル内の.env
,<user>
,<pass>
, および<db-host>
にそれぞれ適した値を代入します:<db-port>DATABASE_URL='postgresql://<user>:<pass>@<db-host>:<db-port>' - PostgreSQL のダウンロードとインストール: すでにない場合はローカルで実行します。
- 独自のローカル DB の作成:
を実行します。createdb <DB name> - psql シェルの起動:
psql -h localhost -U postgres -d <DB name> - 情報の抽出: psql シェル内で
を実行し、ホスト、ポート、ユーザー名、パスワード、データベース名の情報を抽出します。\conninfo - DATABASE_URL の更新: フォーマットは
と似ています。postgresql://postgres:postgres@localhost:5432/Your-DB-Name
あるいは、Railway.app、Northflank、または Render などのサービスを利用することをお勧めします。
Railway/Northflank/Render を使用した手動セッティング
- サービスの指示に従って PostgreSQL データベースをセットアップします。
- ダッシュボードから
をコピーして、DATABASE_URL
ファイルに貼り付けます。.env - Prisma スキーマ(
)を使用してデータベースを設定します。packages/prisma/schema.prisma
- 開発:
yarn workspace @calcom/prisma db-migrate - 本番:
yarn workspace @calcom/prisma db-deploy
Mailhog の実行(E2E テスト用)
E2E_TEST_MAILHOG_ENABLED が「1」である場合に必要です。
docker pull mailhog/mailhog docker run -d -p 8025:8025 -p 1025:1025 mailhog/mailhog
アプリケーションの実行
最初のユーザーを設定する
アプローチ 1: Prisma Studio
- データベースの内容を確認または修正するために、Prisma Studio を開きます。
- User モデルをクリックして新しいユーザーレコードを追加します。
- フィールドに情報を入力します:
、email
、username
(パスワードは BCrypt で暗号化するのを忘れずに)、そしてpassword
をmetadata
に設定します。{} - Save 1 Recordをクリックします。
- 新しいユーザーはデフォルトで TRIAL プランに設定されます。この動作を調整したい場合は、
で設定してください。packages/prisma/schema.prisma - ブラウザを
に開き、最初のユーザーでログインします。http://localhost:3000
アプローチ 2: ローカル DB のシード(初期化)
ローカル DB にダミーユーザーを追加するには、以下のコマンドを実行します:
cd packages/prisma yarn db-seed
E2E テスト
環境変数
NEXTAUTH_URL を正しい値に設定することを確認してください(例:ローカルで動作中は http://localhost:3000)。
- テストの実行:
yarn test-e2e - レポートの表示:
yarn playwright show-report test-results/reports/playwright-html-report
E2E テスト用ブラウザがインストールされていない場合の問題解決
テスト用ブラウザをダウンロードするには、次のコマンドを実行します:
npx playwright install
以前のバージョンからのアップグレード
- 最新バージョンを Pull します。
- 依存関係が追加/更新/削除されたか確認します(
)。yarn - データベースマイグレーションを適用:
- Dev:
(注意:これは開発用データベースの内容をクリアする可能性があります)。yarn workspace @calcom/prisma db-migrate - Prod:
。yarn workspace @calcom/prisma db-deploy
- Dev:
変数の変更があるか確認します。.env- サーバーを起動します。
- 新しいバージョンを楽しんでください。
デプロイメント
Docker Hub イメージ
Docker イメージは https://hub.docker.com/r/calcom/cal.diy で入手できます。
ARM ユーザー向け注意:
サフィックスを使用してください(例:{version}-arm)。docker pull calcom/cal.diy:v5.6.19-arm
要件
- Docker と Docker Compose がインストールされています。
注意:Docker ドキュメントによると、
(ハイフンなし)が主要な方法です。docker compose
Docker Compose を使用して実行
- リポジトリをリカーシブクローンします:
。git clone --recursive https://github.com/calcom/cal.diy.git - ディレクトリに移動します。
- 設定を準備します:
を.env.example
にリネームし、内容を更新します。.env - 必須シークレット鍵: スタートする前に、
とNEXTAUTH_SECRET
の値を生成してください(下の「重要な実行時変数」を参照)。CALENDSO_ENCRYPTION_KEY
重要な実行時変数
| 変数名 | 説明 | 必須 | デフォルト値 |
|---|---|---|---|
| 認証情報を含むデータベース URL | はい | 例を参照 |
サイトのベースURL | いいえ | | |
| 認証サーバーの場所 | いいえ | |
| クッキー暗号化鍵(32 バイト) | はい | |
| 認証暗号化鍵(24 バイト) | はい | |
プッシュ通知 (VAPID キー)
Error: No key set vapidDetails.publicKey のエラーが表示された場合は、VAPID キーを生成してください:
npx web-push generate-vapid-keys
.env を更新します:
NEXT_PUBLIC_VAPID_PUBLIC_KEY=<your_public_key>VAPID_PRIVATE_KEY=<your_private_key>
Cal.diy の起動
- 完全なスタック(ローカル DB):
docker compose up -d calcom studio - リモートデータベース:
がリモート DB 用に設定されていることを確認後、実行します:DATABASE_URLdocker compose up -d calcom studio - Web アプリのみ:
docker compose up -d calcom
初回セットアップ: セットアップウィザードが初期化されます。「カレンダーを接続」をスキップしたい場合は、
に移動して省略できます。<NEXT_PUBLIC_WEBAPP_URL>/event-types
Cal.diy の更新(Docker)
- スタックを停止:
。docker compose down - 最新の_changes_ を Pull:
。git pull - 必要に応じて
変数を更新します。.env - 再起動:
。docker compose up -d
ソースコードからのビルド(Docker 使用)
- リポジトリをクローンします(ビルドコンテキストのため、非リカーシブ)。
を.env.example
にリネームし、内容を更新します。.env- イメージのビルド:
DOCKER_BUILDKIT=0 docker compose build calcom - 「Docker Compose を使用して実行」セクションの手順に従って起動します。
設定(ビルド時変数)
もし自分でイメージをビルドする場合は、ビルド時に以下の情報を提供してください:
| 変数名 | 説明 | 必須 | デフォルト値 |
|---|---|---|---|
| DB URL | はい | |
| Nodejs/NPM ビルドオプション | はい | |
| クッキー暗号化鍵 | はい | |
| 認証暗号化鍵 | はい | |
| スタティックファイルに注入されるベースURL | いいえ | |
| カスタム利用規約 URL | いいえ | - |
| プライバシーポリシー URL | いいえ | - |
| テレメトリを無効化(1 に設定) | いいえ | False |
注意: アプリケーションの設定要件により、ビルドプロセス中にも利用可能なデータベースが必要です。
で.envを設定するか、DATABASE_URLを実行してローカル DB を起動してください。docker compose up -d database
トラブルシューティング
SSL エッジターミネーション
ロードバランサーで SSL の処理を担当している場合、以下の記述を追加します:
NODE_TLS_REJECT_UNAUTHORIZED=0
※この設定は、信頼できるサービスやロードバランサーの場合에만行ってください。
無効な 'prisma.user.create()'(空のメタデータ)
metadata フィールドに空の JSON オブジェクト {} を使用することで、この問題を解決できます。id フィールドは自動で増加します。
CLIENT_FETCH_ERROR
request to http://testing.localhost:3000/api/auth/session failed のエラーが発生する場合は、NEXTAUTH_URL を設定してください:
NEXTAUTH_URL=http://localhost:3000/api/auth
インテグレーション
Google API 認証情報の入手方法
- Google Cloud Console にアクセスし、必要に応じてプロジェクトを作成します。
- API を有効化: "Calendar API"を検索して有効化します。
- OAuth 同意画面:
- アプリの種類(内部/外部)を選択し、詳細を入力します。
- スコープ: スコープを追加または削除します。
と.../auth/calendar.events
を選択します。.../auth/calendar.readonly - "Test Users" にあなたの Google アカウントを追加します。
- 認証情報: OAuth クライアント ID -> Web アプリケーションを作成します。
- リダイレクト URI:
および<Cal.diy URL>/api/integrations/googlecalendar/callback
の両方を追加します。<Cal.diy URL>/api/auth/callback/google - JSON をダウンロードし、内容を
に.env
として貼り付けます。GOOGLE_API_CREDENTIALS
アプリストアでの有効化:
を実行します。cd packages/prisma && yarn seed-app-store- 追加のリダイレクト URI:
を設定します。<Cal.diy URL>/api/auth/callback/google - "OAuth 同意画面"の下で、**「PUBLISH APP」**をクリックします。
他のインテグレーション
(同様の OAuth セットアップ手順に従ってください)
Microsoft Graph (Office 365)
- Azure App Registration で登録します。
- Web リダイレクト URI:
。<Cal.diy URL>/api/integrations/office365calendar/callback
を設定し、MS_GRAPH_CLIENT_ID
のシークレットを生成します。MS_GRAPH_CLIENT_SECRET
Zoom
- Zoom マーケットプレイス -> Develop -> Build App (General App) にアクセスします。
- クライアント ID/シークレットを
にコピー(.env
,ZOOM_CLIENT_ID
)。ZOOM_CLIENT_SECRET - OAuth リダイレクト URI:
。<Cal.diy URL>/api/integrations/zoomvideo/callback - "Subdomain check" を有効化します。
- スコープ:
とMeeting (meeting:write:meeting)
。User (user:read:settings)
Daily.co
- Daily.co でアカウントを作成します。
- API キーを
にコピー(.env
)。DAILY_API_KEY - オプション:ビデオ記録機能のために
を設定します。DAILY_SCALE_PLAN=true
Basecamp (37 Signals)
- インテグレーションダッシュボードへアクセスし、アプリケーションを登録します。
- 製品: Basecamp 4。
- リダイレクト URI:
。<Cal.diy URL>/api/integrations/basecamp3/callback - クライアント ID/シークレットを
/BASECAMP3_CLIENT_ID
にコピーします。BASECAMP3_CLIENT_SECRET - シークレット形式を設定:
。{your_domain} ({support_email})
HubSpot
- HubSpot Developer -> Manage apps -> Create legacy app (public) にアクセスします。
- 認証スコープ:
,crm.objects.contacts
(読み取りと書き込み)。crm.lists - リダイレクト URI:
。<Cal.diy URL>/api/integrations/hubspot/callback
Zoho CRM
- API コンソール -> アプリケーション -> Add Client (Server-based) を実行します。
- リダイレクト URI:
。<Cal.diy URL>/api/integrations/zohocrm/callback - オプション:同じ DC 間で共有する OAuth のために "Multi-DC" チェックボックスをオンにします。
Zoho Calendar / Bigin / Pipedrive
それぞれのベンダーのドキュメントに従ってください(リンクは主に README に記載されています)。
Unkey を使用したレート制限(オプション)
レート制限を有効化したい場合は:
- unkey.com で登録します。
とratelimit.create_namespace
の許可を持つルートキーを作成します。ratelimit.limit- ルートキーを
に.env
としてコピーします。UNKEY_ROOT_KEY
コントリビュート
私たちがコントリビューションを歓迎します!誤字の修正、ドキュメントの改善、新機能の開発など、あなたの助けは Cal.diy をより良くします。
重要: Cal.diy はコミュニティによるフォークです。このリポジトリへのコントリビュートは、Cal.com の本番プラットフォームに反映されません。詳細については CONTRIBUTING.md を参照してください。
- コントリビュートガイドをご覧ください。
- GitHub Discussions で議論に参加しましょう。
- コーディング基準とコミットメッセージの慣習に従ってください。
- Good First Issues: スコープの限定的なバグや機能を持つ、始めたばかりの方におすすめの課題です。
翻訳
コーディングをせずともコントリビュートしたいですか?Discussions に参加し、Cal.diy をあなたの言語に翻訳しましょう。
謝辞
Cal.diy は Cal.com と多くの貢献者によって築かれた基盤の上に構築されています。特別感謝申し上げます:
- Vercel
- Next.js
- Day.js
- Tailwind CSS
- Prisma