予約・スケジュール管理を自社でホストできる、Calendlyに代わるオープンソースのスケジューリングツールです。
・企業:社内外のミーティング予約を一元管理し、ホワイトラベル(自社ブランド)で運用したい情報システム部門や営業チームに最適です。Google CalendarやZoomとの連携にも対応しています。 ・スタートアップ:顧客との商談やオンボーディング面談の予約を効率化でき、Docker Composeで手軽にセルフホストできるため、有料サービスの月額課金を避けながらブランドに合わせたカスタマイズが可能です。 ・個人事業主・フリーランス:コンサルティングやコーチングの予約ページを無料で運用でき、Stripe決済連携やワークフロー自動化にも対応しているため、一人でも本格的な予約管理ができます。
Calendlyは無料プランだと1種類のイベントのみで、チーム機能やブランドカスタマイズには月額10ドル以上の有料プランが必要です。Cal.comはセルフホストで完全無料、イベント数やメンバー数に制限がなく、ソースコードを自由に改変できるため、データ管理もカスタマイズも自社で完結できます。
プロジェクトについて
あらゆる人のためのスケジューリングインフラストラクチャ
オープンソースの Calendly 後継ツール。あなたが自分のデータ、ワークフロー、外観を完全にコントロールできます。
Calendly やその他のスケジューリングツールは素晴らしいです。私たちの生活を大幅に楽にしてくれました。ビジネスミーティング、セミナー、ヨガクラス、さらには家族との通話にも使っています。しかし、ほとんどのツールはコントロールやカスタマイズの点で非常に限られています。
そこで Cal.com の出番です。セルフホストまたは私たちがホスト。デザインからホワイトラベル対応。API 駆動で、あなた自身のドメインにデプロイ可能。イベントとデータを完全にコントロールできます。
受賞歴
Hacker News
Product Hunt
このプロジェクトは BrowserStack でテストされています
使用技術
お問い合わせ
商用のお問い合わせは営業チームにご連絡ください。
最新情報をお届け
Cal.com は 2021年9月15日に v.1.0 として公式ローンチし、これまでに大きな進歩を遂げました。このリポジトリの releases をウォッチして、今後のアップデート情報を受け取りましょう:

はじめに
ローカルコピーを立ち上げて実行するには、以下の簡単な手順に従ってください。
前提条件
Cal.com を実行するために必要なもの:
- Node.js(バージョン: >=18.x)
- PostgreSQL(バージョン: >=13.x)
- Yarn (推奨)
利用可能なインテグレーションのいずれかを有効にしたい場合は、それぞれの追加認証情報の取得が必要になる場合があります。詳細は下記のインテグレーションセクションをご覧ください。
開発
セットアップ
-
リポジトリをクローン(またはフォーク https://github.com/calcom/cal.com/fork)。コードは AGPLv3 でライセンスされており、ネットワーク経由でソフトウェアとやり取りするユーザーにソースコードを提供する必要があります。これらの要件なしで商用利用するには、商用ライセンスを取得してください。
git clone https://github.com/calcom/cal.com.gitWindows をお使いの場合は、管理者権限で
gitbashで以下のコマンドを実行してください: >git clone -c core.symlinks=true https://github.com/calcom/cal.com.git詳細はドキュメントをご覧ください。 -
プロジェクトフォルダに移動
cd cal.com -
yarn でパッケージをインストール
yarn -
.envファイルをセットアップ.env.exampleを.envにコピーopenssl rand -base64 32でキーを生成し、.envファイルのNEXTAUTH_SECRETに追加openssl rand -base64 24でキーを生成し、.envファイルのCALENDSO_ENCRYPTION_KEYに追加
Windows ユーザー: Prisma エラー(
unexpected character / in variable name)を回避するために、packages/prisma/.envシンボリックリンクを実際のコピーに置き換えてください:# Git Bash / WSL rm packages/prisma/.env && cp .env packages/prisma/.env
-
Node のセットアップ Node のバージョンがドキュメントで指定されたプロジェクト要件を満たさない場合、"nvm"(Node Version Manager)を使用してプロジェクトが必要とするバージョンの Node を使用できます:
nvm use最初に特定のバージョンをインストールしてから使用する必要がある場合があります:
nvm install && nvm usenvm はこちらからインストールできます。
yarn dx でクイックスタート
- Docker と Docker Compose のインストールが必要
- いくつかのテストユーザーを含むローカル Postgres インスタンスが起動されます - 認証情報はコンソールに表示されます
yarn dx
作成されるデフォルトの認証情報:
| メール | パスワード | ロール |
|---|---|---|
free@example.com |
free |
無料ユーザー |
pro@example.com |
pro |
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"を追加して、Node プロセスのメモリ制限を増やします。代わりに、アプリを実行する前にターミナルでこれを実行することもできます。16384 を Node プロセスに割り当てたい RAM の量に置き換えてください。 -
.envファイルにNEXT_PUBLIC_LOGGER_LEVEL={level}を追加して、すべての tRPC クエリとミューテーションのログの詳細度を制御します。 {level} は以下のいずれかです:0silly
1trace
2debug
3info
4warn
5error
6fatal.envファイルでNEXT_PUBLIC_LOGGER_LEVEL={level}を設定すると、そのレベル以上のログが有効になります。仕組みは以下の通りです:ロガーは指定されたレベル以上のすべてのログを含みます。例えば:
NEXT_PUBLIC_LOGGER_LEVEL=2に設定すると、レベル 2(debug)以上、つまりレベル 2(debug)、3(info)、4(warn)、5(error)、6(fatal)がログに記録されます。NEXT_PUBLIC_LOGGER_LEVEL=3に設定すると、レベル 3(info)以上、つまりレベル 3(info)、4(warn)、5(error)、6(fatal)がログに記録されますが、レベル 2(debug)とレベル 1(trace)は無視されます。
echo 'NEXT_PUBLIC_LOGGER_LEVEL=3' >> .env
例えば、ログレベルを info に設定する場合。
Gitpod セットアップ
-
下のボタンをクリックして、このプロジェクトを Gitpod で開きます。
-
必要な依存関係がすべてインストールされた完全に設定されたワークスペースがブラウザで開きます。
手動セットアップ
-
.envファイルで環境変数を設定します。<user>、<pass>、<db-host>、<db-port>をそれぞれの値に置き換えてください。DATABASE_URL='postgresql://<user>:<pass>@<db-host>:<db-port>'-
ダウンロードしてローカルに PostgreSQL をインストールします(まだの場合)。
-
createDB <DB名>を実行して独自のローカル DB を作成します。 -
作成した DB で psql シェルを開きます:
psql -h localhost -U postgres -d <DB名> -
psql シェル内で
\conninfoを実行します。以下の情報が表示されます。
-
すべての情報を抽出して DATABASE_URL に追加します。URL は
postgresql://postgres:postgres@localhost:5432/Your-DB-Nameのようになります。ポートは設定可能で、必ずしも 5432 である必要はありません。
ローカル DB を作成したくない場合は、railway.app、Northflank、render などのサービスの利用も検討できます。
-
-
.envのDATABASE_URLをコピーして.env.appStoreに貼り付けます。 -
Prisma スキーマ(
packages/prisma/schema.prismaにあります)を使用してデータベースをセットアップ開発環境では以下を実行:
yarn workspace @calcom/prisma db-migrate本番環境では以下を実行:
yarn workspace @calcom/prisma db-deploy -
mailhog を実行して開発中に送信されたメールを確認
注意:
E2E_TEST_MAILHOG_ENABLEDが "1" の場合に必要docker pull mailhog/mailhog docker run -d -p 8025:8025 -p 1025:1025 mailhog/mailhog -
実行(開発モード)
yarn dev
最初のユーザーのセットアップ
アプローチ1
-
Prisma Studio を開いてデータベースの内容を確認または変更:
yarn db-studio -
Userモデルをクリックして新しいユーザーレコードを追加。 -
email、username、passwordフィールドを入力し、metadataを空の{}に設定します(BCrypt でパスワードを暗号化することを忘れずに)。Save 1 Recordをクリックして最初のユーザーを作成します。新しいユーザーはデフォルトで
TRIALプランに設定されます。必要に応じてpackages/prisma/schema.prismaファイルでこの動作を調整できます。 -
ブラウザで http://localhost:3000 を開き、作成したユーザーでログインします。
アプローチ2
以下を実行してローカル DB をシード
cd packages/prisma
yarn db-seed
上記のコマンドでローカル DB にダミーユーザーが追加されます。
E2E テスト
環境変数 NEXTAUTH_URL が正しい値に設定されていることを確認してください。ローカルで実行する場合、.env.example 内のドキュメントにあるように、値は http://localhost:3000 にする必要があります。
# ターミナルで実行:
yarn test-e2e
# 最後の HTML レポートを開く:
yarn playwright show-report test-results/reports/playwright-html-report
問題の解決
E2E テストブラウザがインストールされていない
npx playwright install を実行してテストブラウザをダウンロードし、yarn test-e2e 実行時の以下のエラーを解決します:
Executable doesn't exist at /Users/alice/Library/Caches/ms-playwright/chromium-1048/chrome-mac/Chromium.app/Contents/MacOS/Chromium
以前のバージョンからのアップグレード
-
最新バージョンをプル:
git pull -
依存関係の追加/更新/削除を確認
yarn -
以下のコマンドのいずれか1つを実行してデータベースマイグレーションを適用:
開発環境では以下を実行:
yarn workspace @calcom/prisma db-migrate(これは場合によっては開発データベースをクリアする可能性があります)
本番環境では以下を実行:
yarn workspace @calcom/prisma db-deploy -
.env変数の変更を確認yarn predev -
サーバーを起動。開発環境では:
yarn dev本番ビルドの場合は、例えば:
yarn build yarn start -
新しいバージョンをお楽しみください。
AI アシスト開発
このリポジトリには AI コーディングアシスタントの設定が含まれています。すべての AI 設定は agents/ ディレクトリに単一の情報源として格納されています。
構造
agents/
├── rules/ # モジュール化されたエンジニアリングルール
├── skills/ # 再利用可能なスキル/プロンプト
├── commands.md # コマンドリファレンス
└── knowledge-base.md # ドメイン知識
AGENTS.md # メインのエージェント指示
ツール設定
シンボリックリンクを使用してツール間で設定を共有しています:
.claude/
├── rules -> ../agents/rules
└── skills -> ../agents/skills
.cursor/
├── rules -> ../agents/rules
└── skills -> ../agents/skills
他のツールの使用
他の AI ツール(Windsurf、Goose、OpenCode など)をお好みの場合、独自のドットフォルダを作成して git から除外できます:
# .git/info/exclude に追加(ローカルのみ、コミットされません)
.windsurf/
.goose/
.opencode/
これにより、個人的なツールの好みを許容しながらリポジトリをクリーンに保てます。
デプロイメント
Docker
公式サポート: チームはこのリポジトリの Dockerfile と docker-compose リソースを公式にサポートします。
重要: Cal.com はこれらの Docker リソースを使用したインストールをサポートしません。Docker 設定を提供・維持していますが、Docker ベースのインストールのサポートはユーザーの責任です。
このイメージは DockerHub の https://hub.docker.com/r/calcom/cal.com で見つかります。
ARM ユーザーへの注意: イメージのプルには {version}-arm サフィックスを使用してください。例:docker pull calcom/cal.com:v5.6.19-arm
要件
サーバー/システムに docker と docker compose がインストールされていることを確認してください。両方とも Docker Desktop や Rancher Desktop を含むほとんどの Docker ユーティリティによってインストールされます。
注意:Docker のドキュメントによると、ハイフンなしの docker compose が docker-compose を使用する主要な方法になっています。
(ほとんどのユーザー向け)Docker Compose で Cal.com を実行
Cal.com を評価中、または最小限の変更で実行する場合は、このオプションが適しています。
-
calcom/cal.com をクローン
git clone --recursive https://github.com/calcom/cal.com.git -
ディレクトリに移動
cd cal.com -
設定を準備:
.env.exampleを.envにリネームして.envを更新cp .env.example .envほとんどの設定はそのままで構いませんが、設定オプションについては下記の重要な実行時変数をご覧ください。
必須のシークレットキー
開始前に、
NEXTAUTH_SECRETとCALENDSO_ENCRYPTION_KEYのセキュアな値を生成する必要があります。本番環境でデフォルトのsecretプレースホルダーを使用することはセキュリティリスクです。NEXTAUTH_SECRET(Cookie 暗号化キー)を生成:openssl rand -base64 32CALENDSO_ENCRYPTION_KEY(AES256 用に 32 バイトが必要)を生成:openssl rand -base64 24.envファイルをこれらの値で更新:NEXTAUTH_SECRET=<your_generated_secret> CALENDSO_ENCRYPTION_KEY=<your_generated_key>プッシュ通知(VAPID キー) 以下のようなエラーが表示される場合:
Error: No key set vapidDetails.publicKeyWeb Push の環境変数が不足しています。
NEXT_PUBLIC_VAPID_PUBLIC_KEYとVAPID_PRIVATE_KEYを生成して設定する必要があります。以下で生成:
npx web-push generate-vapid-keys.envファイルを更新:NEXT_PUBLIC_VAPID_PUBLIC_KEY=your_public_key_here VAPID_PRIVATE_KEY=your_private_key_here.env.exampleには実際のキーではなくプレースホルダーのみをコミットしてください。.env ファイルの適切な値を更新してから続行します。
-
(オプション)以下のコマンドでイメージをプリプル:
docker compose pullこれは docker-compose.yaml ファイルの
image:で指定されたデフォルトのイメージロケーションを使用します。注意:サポートのために、デフォルトでは Scarf.sh がダウンロードメトリクスのレジストリプロキシとして使用されます。
-
docker compose で Cal.com を起動
(ほとんどのユーザーおよび初回実行時)ローカル PostgreSQL データベース、Cal.com Web アプリ、Prisma Studio を含む完全なスタックを実行するには:
docker compose up -dリモートデータベースに対して Cal.com Web アプリと Prisma Studio を実行するには、DATABASE_URL が利用可能なデータベース用に設定されていることを確認して実行:
docker compose up -d calcom studioCal.com Web アプリのみを実行するには、DATABASE_URL が利用可能なデータベース用に設定されていることを確認して実行:
docker compose up -d calcom注意:デバッグのためにアタッチモードで実行するには、実行コマンドから
-dを削除してください。 -
ブラウザで http://localhost:3000 またはあなたが定義した NEXT_PUBLIC_WEBAPP_URL を開きます。初回 Cal.com 実行時にセットアップウィザードが初期化されます。最初のユーザーを定義すれば、使用開始です!
初回セットアップの注意(カレンダー統合): セットアップウィザード中に、必須に見える「カレンダーを接続」ステップに遭遇する場合があります。この時点でカレンダーを接続したくない場合は、
<NEXT_PUBLIC_WEBAPP_URL>/event-typesに直接ナビゲートしてこのステップをスキップできます。カレンダー統合は後から設定 > インテグレーションページから追加できます。
Cal.com のアップデート
-
Cal.com スタックを停止
docker compose down -
最新の変更をプル
docker compose pull -
必要に応じて env 変数を更新。
-
Cal.com スタックを再起動
docker compose up -d
(上級ユーザー向け)Cal.com のビルドと実行
-
calcom/cal.com をクローン
git clone https://github.com/calcom/cal.com.git -
ディレクトリに移動
cd cal.com -
.env.exampleを.envにリネームして.envを更新設定オプションについては下記のビルド時変数をご覧ください。.env ファイルの適切な値を更新してから続行します。
-
Cal.com Docker イメージをビルド:
注意:アプリケーション設定の要件により、現在ビルドプロセス中に利用可能なデータベースが必要です。
a) 別の場所でホスティングする場合は、.env ファイルで
DATABASE_URLを設定し、次のステップをスキップb) ローカルまたは一時的なデータベースが必要な場合は、docker compose でローカルデータベースを起動
docker compose up -d database -
docker compose で Cal.com をビルド(ビルド時にネットワークブリッジの使用を許可するために DOCKER_BUILDKIT=0 を指定する必要があります。この要件は将来削除されます)
DOCKER_BUILDKIT=0 docker compose build calcom -
docker compose で Cal.com を起動
(ほとんどのユーザーおよび初回実行時)ローカル PostgreSQL データベース、Cal.com Web アプリ、Prisma Studio を含む完全なスタックを実行するには:
docker compose up -dリモートデータベースに対して Cal.com Web アプリと Prisma Studio を実行するには、DATABASE_URL が利用可能なデータベース用に設定されていることを確認して実行:
docker compose up -d calcom studioCal.com Web アプリのみを実行するには、DATABASE_URL が利用可能なデータベース用に設定されていることを確認して実行:
docker compose up -d calcom注意:デバッグのためにアタッチモードで実行するには、実行コマンドから
-dを削除してください。 -
ブラウザで http://localhost:3000 またはあなたが定義した NEXT_PUBLIC_WEBAPP_URL を開きます。初回 Cal.com 実行時にセットアップウィザードが初期化されます。最初のユーザーを定義すれば、使用開始です!
設定
重要な実行時変数
これらの変数は実行時にも提供する必要があります
| 変数 | 説明 | 必須 | デフォルト |
|---|---|---|---|
| DATABASE_URL | 認証情報付きのデータベース URL - コネクションプーラーを使用する場合はそちらを指定 | 必須 | postgresql://unicorn_user:magical_password@database:5432/calendso |
| CALCOM_LICENSE_KEY | Enterprise ライセンスキー | オプション | |
| NEXT_PUBLIC_WEBAPP_URL | サイトのベース URL。注意:この値がビルド時の値と異なる場合、コンテナ起動時にわずかな遅延が発生します(静的ビルドファイルの更新のため)。 | オプション | http://localhost:3000 |
| NEXTAUTH_URL | 認証サーバーの場所。デフォルトでは Cal.com Docker インスタンス自体。 | オプション | {NEXT_PUBLIC_WEBAPP_URL}/api/auth |
| NEXTAUTH_SECRET | Cookie 暗号化キー。ビルド変数と一致する必要があります。生成: openssl rand -base64 32 |
必須 | secret |
| CALENDSO_ENCRYPTION_KEY | 認証暗号化キー(AES256 用に 32 バイト)。ビルド変数と一致する必要があります。生成: openssl rand -base64 24 |
必須 | secret |
ビルド時変数
イメージを自分でビルドする場合、これらの変数は Docker ビルド時に提供する必要があり、.env ファイルの更新で提供できます。現在、これらの変数の変更が必要な場合は、自分のイメージをビルドして公開する手順に従う必要があります。
これらの変数の更新は評価には必要ありませんが、本番運用には必要です。変数の生成手順は Cal.com の手順をご覧ください。
| 変数 | 説明 | 必須 | デフォルト |
|---|---|---|---|
| DATABASE_URL | 認証情報付きのデータベース URL - コネクションプーラーを使用する場合はそちらを指定 | 必須 | postgresql://unicorn_user:magical_password@database:5432/calendso |
| MAX_OLD_SPACE_SIZE | Nodejs/NPM ビルドオプションに必要 | 必須 | 4096 |
| NEXT_PUBLIC_LICENSE_CONSENT | ライセンス同意 - true/false | 必須 | |
| NEXTAUTH_SECRET | Cookie 暗号化キー | 必須 | secret |
| CALENDSO_ENCRYPTION_KEY | 認証暗号化キー | 必須 | secret |
| NEXT_PUBLIC_WEBAPP_URL | 静的ファイルに注入されるベース URL | オプション | http://localhost:3000 |
| NEXT_PUBLIC_WEBSITE_TERMS_URL | 利用規約ウェブサイトのカスタム URL | オプション | https://cal.com/terms |
| NEXT_PUBLIC_WEBSITE_PRIVACY_POLICY_URL | プライバシーポリシーウェブサイトのカスタム URL | オプション | https://cal.com/privacy |
| NEXT_PUBLIC_API_V2_URL | v2 API の URL。Cal.com Platform を使用したカスタムインテグレーションまたはカスタム予約体験の場合のみ必要 | オプション | |
| CALCOM_TELEMETRY_DISABLED | Cal.com による匿名使用データの収集を許可(1 に設定で無効化) |
オプション | |
| NEXT_PUBLIC_SINGLE_ORG_SLUG | ORGANIZATIONS_ENABLED が true の場合に必須 | オプション | |
| ORGANIZATIONS_ENABLED | Enterprise または Organizations プランに使用 | オプション |
トラブルシューティング
SSL エッジ終端
SSL 証明書を処理するロードバランサーの背後で実行する場合、リクエストが拒否されないように環境変数 NODE_TLS_REJECT_UNAUTHORIZED=0 を追加する必要があります。これは何をしているか理解しており、サービスへのトラフィックを転送するサービス/ロードバランサーを信頼できる場合にのみ行ってください。
Failed to commit changes: Invalid 'prisma.user.create()'
特定のバージョンでは、metadata フィールドが空の場合にユーザー作成に問題が発生する場合があります。空の json オブジェクト {} をフィールド値として使用すると、この問題が解決するはずです。また、id フィールドは自動インクリメントされるため、id の値を空にすることも試してみてください。
CLIENT_FETCH_ERROR
このエラーが発生した場合、サーバーのデフォルトの Auth コールバックが WEBAPP_URL をベース URL として使用している方法に原因がある可能性があります。コンテナはローカルマシンと同じ DNS にアクセスできるとは限らないため、自身に解決するように設定する必要があります。NEXTAUTH_URL=http://localhost:3000/api/auth を設定してバックエンドが自身にループバックするようにすることで修正できる場合があります。
Railway
上のボタンを使用して Railway に Cal.com をデプロイできます。Railway チームも Cal.com のプラットフォームへのデプロイに関する詳細なブログ記事を公開しています。
Northflank
上のボタンを使用して Northflank に Cal.com をデプロイできます。Northflank チームも Cal.com のプラットフォームへのデプロイに関する詳細なブログ記事を公開しています。
Vercel
現在、このアプリケーションを Vercel でデプロイするには、無料プランのサーバーレス関数数の制限により Vercel Pro プランが必要です。
Render
Elestio
ロードマップ
提案された機能(および既知の問題)のリストはロードマッププロジェクトをご覧ください。計画されたタグ付きリリースを確認するためにビューを変更できます。
ライセンス
Cal.com, Inc. は商用オープンソース企業であり、このオープンソースリポジトリの一部には商用ライセンスが必要です。このコンセプトは「Open Core」と呼ばれ、コア技術(99%)は AGPLv3 の下で完全にオープンソースであり、残りの 1% は商用ライセンス("/ee" Enterprise Edition)でカバーされています。エンタープライズ機能を必要とする大規模な組織にのみ関連するものと考えています。エンタープライズ機能は Cal.com, Inc. のフルタイム雇用のコアエンジニアリングチームによって構築されています。報酬については https://cal.com/open をご覧ください。
[!NOTE] 私たちの哲学はシンプルです。すべての「シングルプレイヤー API」は AGPLv3 の下でオープンソースです。すべての商用「マルチプレイヤー API」は商用ライセンスの下にあります。
| AGPLv3 | EE | |
|---|---|---|
| 商用目的でのセルフホスト | ✅ | ✅ |
| プライベートにクローン | ✅ | ✅ |
| 公開フォーク | ✅ | ✅ |
| CLA 必要 | ✅ | ✅ |
| 公式サポート | ❌ | ✅ |
| プライベートな派生物 | ❌ | ✅ |
| SSO | ❌ | ✅ |
| 管理パネル | ❌ | ✅ |
| なりすまし | ❌ | ✅ |
| マネージドイベントタイプ | ❌ | ✅ |
| Organizations | ❌ | ✅ |
| 支払い | ❌ | ✅ |
| プラットフォーム | ❌ | ✅ |
| チーム | ❌ | ✅ |
| ユーザー | ❌ | ✅ |
| ビデオ | ❌ | ✅ |
| ワークフロー | ❌ | ✅ |
[!TIP] 私たちはコミュニティと密に連携し、何をオープンにし何を商用にすべきかについて常にフィードバックを求めています。このリストは固定されたものではなく、過去に商用からオープンに移行したものもあります。何か問題があると感じたらディスカッションを開いてください。
リポジトリアクティビティ
コントリビュート
コントリビュートを歓迎します!タイポの修正、ドキュメントの改善、新機能の構築など、あなたの助けが Cal.com をより良くします。
- 詳細な手順は コントリビューティングガイドをご確認ください。
- GitHub ディスカッションやコミュニティチャンネルでディスカッションに参加してください。
- プロジェクトの一貫性を保つため、コーディング標準とコミットメッセージの規約に従ってください。
小さな改善でも重要です - ご協力ありがとうございます!
Good First Issues
help wanted ラベルのイシューには、比較的限られたスコープの小さな機能やバグが含まれています。ここから始めて経験を積み、コントリビューションプロセスに慣れるのに最適な場所です。
バウンティ
コントリビューター
翻訳
コードは書けないけどコントリビュートしたい場合は、ディスカッションに参加して #Translate チャンネルで翻訳したい言語をお知らせください。
コンテンツセキュリティポリシーの有効化
- CSP_POLICY="non-strict" 環境変数を設定すると、style-src の unsafe-inline を除く Strict CSP が有効になります。インスタンスにカスタム変更がある場合、インスタンスを CSP 互換にするためにコードの変更が必要になる場合があります。現在、ログインページでのみ strict CSP が有効で、他の SSR ページではレポートのみモードで有効化されて潜在的な問題を検出しています。SSG ページではまだサポートされていません。
シングル組織モード
詳細なドキュメント(スクリーンショット付き)についてはこちらのドキュメントを参照してください。
インテグレーション
Google API 認証情報の取得
- Google API Console を開きます。Google Cloud サブスクリプションにプロジェクトがない場合は、先に進む前に作成する必要があります。ダッシュボードペインで「API とサービスを有効にする」を選択します。
- 検索ボックスに「calendar」と入力し、Google Calendar API の検索結果を選択します。
- 選択した API を有効にします。
- 次に、サイドペインから OAuth 同意画面に移動します。アプリタイプ(内部または外部)を選択し、最初のページで基本的なアプリの詳細を入力します。
- スコープの2ページ目で「スコープを追加または削除」を選択します。Calendar.event を検索し、スコープ値
.../auth/calendar.events、.../auth/calendar.readonlyのスコープを選択して「更新」を選択します。 - 3ページ目(テストユーザー)で、使用する Google アカウントを追加します。ウィザードの最後のページで詳細が正しいことを確認し、同意画面が設定されます。
- サイドペインから認証情報を選択し、「認証情報を作成」を選択します。OAuth クライアント ID オプションを選択します。
- アプリケーションタイプとして「ウェブアプリケーション」を選択します。
- 承認済みリダイレクト URI の下で「URI を追加」を選択し、
<Cal.com URL>/api/integrations/googlecalendar/callbackと<Cal.com URL>/api/auth/callback/googleの URI を追加します(Cal.com URL をアプリケーションが実行される URI に置き換えてください)。 - キーが作成され、認証情報ページにリダイレクトされます。OAuth 2.0 クライアント ID の下にある新しく生成されたクライアント ID を選択します。
- 「JSON をダウンロード」を選択します。このファイルの内容をコピーして、
.envファイルのGOOGLE_API_CREDENTIALSキーの値として JSON 文字列全体を貼り付けます。
Cal.com アプリストアに Google カレンダーを追加
Google 認証情報を追加した後、Google Calendar アプリをアプリストアに追加できます。 以下を実行してアプリストアを再構築できます
cd packages/prisma
yarn seed-app-store
Google Calendar アプリを有効にするにはさらにいくつかのステップを完了する必要があります。 「Google API 認証情報の取得」セクションを完了していることを確認してから、以下を実行してください
- リダイレクト URL
<Cal.com URL>/api/auth/callback/googleを追加 - 「OAuth 同意画面」の下で「アプリを公開」をクリック
Microsoft Graph クライアント ID とシークレットの取得
- Azure アプリ登録を開き、「新規登録」を選択
- アプリケーションに名前を付ける
- このアプリケーションを使用できるユーザーまたはアクセスできる API を 任意の組織ディレクトリ内のアカウント(任意の Azure AD ディレクトリ - マルチテナント) に設定
- Web リダイレクト URI を
<Cal.com URL>/api/integrations/office365calendar/callbackに設定(Cal.com URL をアプリケーションが実行される URI に置き換え) - アプリケーション(クライアント)ID を .env の MS_GRAPH_CLIENT_ID 属性値として使用
- 証明書とシークレットをクリックして新しいクライアントシークレットを作成し、その値を MS_GRAPH_CLIENT_SECRET 属性として使用
Zoom クライアント ID とシークレットの取得
- Zoom Marketplace を開き、Zoom アカウントでサインイン。
- 右上の「Develop」=>「Build App」をクリック。
- 「General App」を選択し、「Create」をクリック。
- アプリに名前を付ける。
- 「アプリの管理方法を選択」で「User-managed app」を選択。
- Zoom App Marketplace にアプリを公開するオプションが表示された場合は、選択を解除。
- Client ID と Client Secret を
.envファイルのZOOM_CLIENT_IDとZOOM_CLIENT_SECRETフィールドにコピー。 - 「OAuth Information」の「OAuth Redirect URL」を
<Cal.com URL>/api/integrations/zoomvideo/callbackに設定(Cal.com URL をアプリケーションが実行される URI に置き換え)。 - 上記のリダイレクト URL を許可リスト URL としても追加し、「Subdomain check」を有効にします。フォームの下に「saved」と表示されていることを確認。
- アプリの基本情報を提供する必要はありません。代わりに「Scopes」をクリックし、「+ Add Scopes」をクリック。左側で、
- 「Meeting」カテゴリをクリックし、スコープ
meeting:write:meetingをチェック。 - 「User」カテゴリをクリックし、スコープ
user:read:settingsをチェック。
- 「Meeting」カテゴリをクリックし、スコープ
- 「Done」をクリック。
- これで完了です。Cal.com の設定で簡単に Zoom インテグレーションを追加できます。
Daily API 認証情報の取得
- Daily.co パートナーシップフォームにアクセスして情報を入力
- ダッシュボード内で developers タブに移動
- API キーをコピー
.envファイルのDAILY_API_KEYフィールドに API キーを貼り付け- Daily Scale Plan をお持ちの場合は、ビデオ録画などの機能を使用するために
DAILY_SCALE_PLAN変数をtrueに設定
Basecamp クライアント ID とシークレットの取得
- 37 Signals Integrations Dashboard にアクセスしてサインイン。
- 「Register one now」リンクをクリックして新しいアプリケーションを登録。
- 会社の詳細を入力。
- 統合する製品として Basecamp 4 を選択。
- OAuth のリダイレクト URL を
<Cal.com URL>/api/integrations/basecamp3/callbackに設定(Cal.com URL をアプリケーションが実行される URI に置き換え)。 - 完了をクリックし、Client ID とシークレットを
BASECAMP3_CLIENT_IDとBASECAMP3_CLIENT_SECRETフィールドにコピー。 BASECAMP3_CLIENT_SECRET環境変数を{your_domain} ({support_email})に設定。 例:Cal.com (support@cal.com)。
HubSpot クライアント ID とシークレットの取得
- HubSpot Developer を開き、アカウントにサインインするか新規作成。
- Developer アカウントページのホームから「Manage apps」に移動。
- 右上の「Create legacy app」ボタンをクリックして public app を選択。
- 「App info」タブに任意の情報を入力
- 「Auth」タブに移動
- Client ID と Client Secret を
.envファイルのHUBSPOT_CLIENT_IDとHUBSPOT_CLIENT_SECRETフィールドにコピー。 - OAuth のリダイレクト URL を
<Cal.com URL>/api/integrations/hubspot/callbackに設定(Cal.com URL をアプリケーションが実行される URI に置き換え)。 - ページ下部の「Scopes」セクションで、
crm.objects.contactsとcrm.listsのスコープの「Read」と「Write」を選択。 - 下部フッターの「Save」ボタンをクリック。
- これで完了です。Cal.com で作成された予約が HubSpot のコンタクトのミーティングとして表示されます。
Webex クライアント ID とシークレットの取得
ZohoCRM クライアント ID とシークレットの取得
- Zoho API Console を開き、アカウントにサインインするか新規作成。
- API コンソールページから「Applications」に移動。
- 右上の「ADD CLIENT」ボタンをクリックして「Server-based Applications」を選択。
- 「Client Details」タブに任意の情報を入力
- 「Client Secret」タブに移動。
- Client ID と Client Secret を
.envファイルのZOHOCRM_CLIENT_IDとZOHOCRM_CLIENT_SECRETフィールドにコピー。 - OAuth のリダイレクト URL を
<Cal.com URL>/api/integrations/zohocrm/callbackに設定(Cal.com URL をアプリケーションが実行される URI に置き換え)。 - 「Settings」セクションで、すべてのデータセンターで同じ OAuth 認証情報を使用する場合は「Multi-DC」オプションをチェック。
- 下部フッターの「Save」/「UPDATE」ボタンをクリック。
- これで完了です。Cal.com の設定で簡単に ZohoCRM インテグレーションを追加できます。
Zoho Calendar クライアント ID とシークレットの取得
Zoho Bigin クライアント ID とシークレットの取得
Pipedrive クライアント ID とシークレットの取得
Unkey によるレート制限
Cal.com はレート制限に Unkey を使用しています。これはオプション機能であり、テストやセルフホスティングには必須ではありません。
レート制限を有効にしたい場合:
- unkey.com でアカウントにサインアップ
ratelimit.create_namespaceとratelimit.limitの権限を持つ Root キーを作成.envファイルのUNKEY_ROOT_KEYフィールドに Root キーをコピー
注意:Unkey を設定しない場合、Cal.com はレート制限なしで通常通り動作します。
ワークフロー
メールリマインダー用の SendGrid のセットアップ
- SendGrid アカウントを作成 (https://signup.sendgrid.com/)
- Settings -> API keys に移動して API キーを作成
.envファイルのSENDGRID_API_KEYフィールドに API キーをコピー- Settings -> Sender Authentication に移動してシングルセンダーを認証
.envファイルのSENDGRID_EMAILフィールドに認証済みメールアドレスをコピー.envファイルのNEXT_PUBLIC_SENDGRID_SENDER_NAMEフィールドにカスタム送信者名を追加(フォールバックは Cal.com)
SMS リマインダー用の Twilio のセットアップ
- Twilio アカウントを作成 (https://twilio.com/try-twilio)
- 「Get a Twilio phone number」をクリック
.envファイルのTWILIO_SIDフィールドに Account SID をコピー.envファイルのTWILIO_TOKENフィールドに Auth Token をコピー.envファイルのTWILIO_PHONE_NUMBERフィールドに Twilio 電話番号をコピー.envファイルのNEXT_PUBLIC_SENDER_IDフィールドに独自の送信者 ID を追加(フォールバックは Cal.com)- メッセージングサービスを作成(Develop -> Messaging -> Services)
- メッセージングサービスに任意の名前を付ける
- 「Add Senders」をクリック
- 送信者タイプとして電話番号を選択
- リストされた電話番号を追加
- 他のフィールドはそのまま
- セットアップを完了し、「View my new Messaging Service」をクリック
.envファイルのTWILIO_MESSAGING_SIDフィールドに Messaging Service SID をコピー- 認証サービスを作成
.envファイルのTWILIO_VERIFY_SIDフィールドに Verify Service SID をコピー
Changesets
changesets を使用してチェンジログの生成と公開パッケージの公開を行っています(private: true のパッケージは無視されます)。
良い readme の例は atoms readme です。すべての公開パッケージは:
- changesets を使用する際にセマンティックバージョニングに従う必要があります。
- 破壊的変更を
❗️Breaking changeでマークする必要があります。
謝辞
Cal.com を支える素晴らしいプロジェクトに特別な感謝を:
Cal.com はオープンスタートアップであり、Jitsu(オープンソースの Segment 代替)がほとんどの使用メトリクスの追跡を支援しています。
