- 概要
- プロジェクト構造
- 必要条件
- セットアップ
- データベースの設定(ad-server)
- Clerk の初期設定 (ui)
- 開発
- ビルド
- リンティングとフォーマット
- テスト
- デプロイ
- 貢献
- ライセンス
このプロジェクトは、ビデオ広告ネットワークのためのマイクロサービスアーキテクチャを採用したシステムです。広告配信サーバー、管理用UI、SDKなどの機能を提供します。主要コンポーネントには、Cloudflare Workers上で動作する広告配信サーバー、Remix製の管理用UI、そしてクライアント側で使用する広告SDKが含まれます。
video-ad-network/
├── apps/
│ └── ad-server/ # Cloudflare Workers 上の広告配信サーバー
│ └── ui/ # 管理用UI
├── packages/
│ └── ad-sdk/ # クライアント側の広告 SDK
│ └── db/ # データベース関連
└── README.md # このファイル
- Node.js (バージョン 20 以上)
- pnpm (バージョン 9.11.0 以上)
- Cloudflare アカウント (ad-server, ui用)
- Turso アカウント (データベース用)
- Clerk アカウント (認証用)
-
リポジトリをクローンします:
git clone https://github.com/coji/video-ad-network.git cd video-ad-network
-
依存関係をインストールします:
pnpm install
-
各コンポーネントの設定を行います(以下のセクションを参照)。
ad-serverアプリケーションでは、Tursoデータベースを使用しています。
-
Turso CLI をインストールします:
curl -sSfL https://get.tur.so/install.sh | bash
-
Tursoにログインします:
turso auth login
-
データベースを作成します:
turso db create video-ad-network
-
データベースのURLとトークンを取得します:
turso db show video-ad-network --url turso db tokens create video-ad-network
-
apps/ad-server/.dev.vars.example
をapps/ad-server/.dev.vars
にリネームし、取得したURLとトークンを設定します:TURSO_DATABASE_URL = "取得したURL" TURSO_AUTH_TOKEN = "取得したトークン"
-
本番環境用のデータベースを作成します。(本番環境用は別のリージョンのデータベースにするのがお勧めです)
turso db create video-ad-network-prod --region nrt
-
本番環境用のデータベースのURLとトークンを取得します。
turso db show video-ad-network-prod --url turso db tokens create video-ad-network-prod
-
取得したURLとトークンを
apps/ad-server/wrangler.toml
に設定します。[vars] TRACKER_ORIGIN = "https://ad-server.van.techtalk.jp" TURSO_DATABASE_URL = "<your_production_database_url>" # ここ TURSO_AUTH_TOKEN = "<your_production_auth_token>" # ここ
-
マイグレーションを実行します:
pnpm --filter @video-ad-network/ad-server run db:migration:local
-
シードデータを挿入します:
pnpm --filter @video-ad-network/ad-server run db:seed:local
注意: 本番環境にデプロイする際は、以下のコマンドを使用してください:
pnpm --filter @video-ad-network/ad-server run db:migration:remote
pnpm --filter @video-ad-network/ad-server run db:seed:remote
uiアプリケーションでは、認証にClerkを使用しています。以下の手順でClerkの初期設定を行ってください:
-
Clerkのアカウントを作成し、アプリケーションを作成します。
-
アプリケーションダッシュボードから、
Publishable Key
とSecret Key
を取得します。 -
apps/ui/.dev.vars.example
をapps/ui/.dev.vars
にリネームし、取得したキーを設定します。CLERK_PUBLISHABLE_KEY="取得したPublishable Key" CLERK_SECRET_KEY="取得したSecret Key"
-
apps/ui/wrangler.toml
に本番用のキーを設定します。[vars] TRACKER_ORIGIN = "https://ad-server.van.techtalk.jp" CLERK_PUBLISHABLE_KEY = "<your_production_publishable_key>" # ここ CLERK_SECRET_KEY = "<your_production_secret_key>" # ここ TURSO_DATABASE_URL = "<your_production_database_url>" TURSO_AUTH_TOKEN = "<your_production_auth_token>"
プロジェクト全体の開発サーバーを起動するには、以下のコマンドを実行します:
pnpm run dev
これにより、Turboを使用して全てのアプリケーションの開発サーバーが並行して起動されます。
各アプリケーションの開発サーバーを個別に起動する場合は、以下のコマンドを使用します:
pnpm --filter @video-ad-network/ad-server run dev
pnpm --filter @video-ad-network/ui run dev
pnpm --filter @video-ad-network/ad-sdk run dev
プロジェクト全体をビルドするには、以下のコマンドを実行します:
pnpm run build
これにより、Turboを使用して全てのアプリケーションがビルドされます。
各アプリケーションを個別にビルドする場合は、以下のコマンドを使用します:
pnpm --filter @video-ad-network/ad-server run build
pnpm --filter @video-ad-network/ui run build
pnpm --filter @video-ad-network/ad-sdk run build
コードのリンティングとフォーマットを行うには、以下のコマンドを実行します:
pnpm run lint
pnpm run format
これらのコマンドは、Turboを使用してすべてのパッケージとアプリケーションに対してリンティングとフォーマットを実行します。
プロジェクト全体のテストを実行するには、以下のコマンドを使用します:
pnpm run test
これにより、Turboを使用して全てのアプリケーションのテストが実行されます。
各アプリケーションのテストを個別に実行する場合は、以下のコマンドを使用します:
pnpm --filter @video-ad-network/ad-server run test
pnpm --filter @video-ad-network/ui run test
pnpm --filter @video-ad-network/ad-sdk run test
プロジェクト全体をデプロイするには、以下のコマンドを実行します:
pnpm run deploy
これにより、ad-server
とui
の両方が順番にデプロイされます。
個別のアプリケーションをデプロイする場合は、以下のコマンドを使用します:
pnpm run deploy:ad-server
このコマンドは、Cloudflare Workers に ad-server をデプロイします。デプロイ前に、Cloudflare の認証情報が正しく設定されていることを確認してください。
pnpm run deploy:ui
このコマンドは、Cloudflare Workers に ui をデプロイします。デプロイ前に、Cloudflare の認証情報が正しく設定されていることを確認してください。
注意: 初回デプロイ時や設定変更時には、追加の手順や確認が必要な場合があります。各プラットフォーム(Cloudflare Workers)のドキュメントを参照してください。
プロジェクトへの貢献は大歓迎です。以下の手順に従ってください:
- このリポジトリをフォークします。
- 新しいブランチを作成します(
git checkout -b feature/AmazingFeature
)。 - 変更をコミットします(
git commit -m 'Add some AmazingFeature'
)。
このプロジェクトはMITライセンスのもとで公開されています。詳細はLICENSEファイルを参照してください。