NotionのHabitsデータベースからTodoを自動生成してTodosデータベースに挿入するWebhookサーバー。
このアプリケーションは、Notionの習慣追跡システムを自動化するWebhookサーバーです。外部からのHTTPリクエストをトリガーとして、以下の処理を実行します:
- Habits データベースからデータを取得
- 習慣データをTodoアイテムに変換
- Todosデータベースに自動挿入
レイヤードアーキテクチャと依存性注入パターンに基づいて設計されています:
- Presentation層:
WebhookServer- HTTPリクエストの処理 - Domain層:
OrchestrationService- ビジネスロジックの統合 - Repository層: データアクセスとキャッシュ管理
- Service層: 外部API(Notion)との連携
詳細は .cursorrules/architecture.md を参照してください。
- Docker & Docker Compose
- Dev Container CLI または VSCode 拡張機能(開発時)
git clone <repo-url> notion-automatic-habits-insert
cd notion-automatic-habits-insertdocker-compose.example.ymlをコピーしてdocker-compose.ymlを作成:
cp app/docker-compose.example.yml app/docker-compose.yml必要な環境変数を設定:
environment:
- INTEGRATION_SECRET=your_notion_api_key
- HABITS_DATABASE_ID=your_habits_database_id
- TODOS_DATABASE_ID=your_todos_database_id
- PORT=8080
- WEBHOOK_PATH=/webhook
- WEBHOOK_SECRET=your_webhook_secret
- NODE_ENV=development
- LOG_LEVEL=DEBUGcd app
docker compose up --buildサーバーは http://localhost:8080 で起動します。
注意: デフォルトでは開発環境(target: development)で起動します。本番環境で使用する場合は、docker-compose.ymlのtargetをproductionに変更してください。
| 名前 | 説明 | 必須 | デフォルト |
|---|---|---|---|
INTEGRATION_SECRET |
Notion APIの統合シークレット | ✓ | - |
HABITS_DATABASE_ID |
HabitsデータベースのID | ✓ | - |
TODOS_DATABASE_ID |
TodosデータベースのID | ✓ | - |
PORT |
サーバーのポート番号 | - | 8080 |
WEBHOOK_PATH |
Webhookのエンドポイントパス | - | /webhook |
WEBHOOK_SECRET |
Webhook認証用のシークレット | - | - |
NODE_ENV |
実行環境(development/production) | - | development |
LOG_LEVEL |
ログレベル(DEBUG/INFO/WARN/ERROR) | - | 環境に応じて自動設定 |
GET /healthレスポンス:
{
"status": "ok",
"timestamp": "2025-10-15T12:00:00.000Z"
}GET /レスポンス:
{
"message": "Notion Automatic Habits Insert Webhook Server",
"version": "1.0.0",
"endpoints": {
"health": "/health",
"webhook": "/webhook"
}
}POST /webhookヘッダー:
Content-Type: application/json
X-Webhook-Secret: your_webhook_secret
レスポンス(成功時):
{
"success": true,
"habitCount": 10,
"todoCount": 15,
"linkedCount": 15,
"executionTime": 2500,
"responseTime": 2505,
"timestamp": "2025-10-15T12:00:00.000Z"
}レスポンス(エラー時):
{
"success": false,
"error": "エラーメッセージ",
"executionTime": 1200,
"responseTime": 1205,
"timestamp": "2025-10-15T12:00:00.000Z"
}# Webhook を実行
curl -X POST http://localhost:8080/webhook \
-H "Content-Type: application/json" \
-H "X-Webhook-Secret: your_webhook_secret"
# ヘルスチェック
curl http://localhost:8080/health- name: Trigger Notion Habits Update
run: |
curl -X POST ${{ secrets.WEBHOOK_URL }}/webhook \
-H "Content-Type: application/json" \
-H "X-Webhook-Secret: ${{ secrets.WEBHOOK_SECRET }}"Notionの自動化機能やZapier、Make.comなどのツールから、指定したURLにPOSTリクエストを送信することで、自動的にHabitsからTodosへの変換・挿入が実行されます。
devcontainer.example.jsonをコピーしてdevcontainer.jsonを作成- VSCodeでDev Containerを起動
devcontainer up --workspace-folder .cd app
npm install
npm run devcd app
npm run type-checkcd app
npm run lint # 自動修正
npm run lint:check # チェックのみcd app
npm run format # 自動フォーマット
npm run format:check # チェックのみapp/
├── src/
│ ├── domain/ # ドメインロジック
│ │ ├── fetch/ # Habits取得
│ │ ├── convert/ # Habits→Todo変換
│ │ ├── insert/ # Todos挿入
│ │ └── orchestration/# 全体のフロー管理
│ ├── presentation/ # HTTPサーバー
│ ├── shared/ # 共通ユーティリティ
│ │ ├── cache/ # キャッシュ管理
│ │ ├── config/ # 設定管理
│ │ ├── di/ # 依存性注入
│ │ ├── errors/ # エラーハンドリング
│ │ ├── factories/ # ファクトリーパターン
│ │ ├── logger/ # ロガー
│ │ ├── retry/ # リトライ機構
│ │ └── validation/ # バリデーション
│ └── main.ts # エントリーポイント
├── Dockerfile
├── docker-compose.yml
├── package.json
└── tsconfig.json
アプリケーションは環境に応じて自動的にログレベルを設定します:
| 環境 | ログレベル | 出力されるログ |
|---|---|---|
development |
DEBUG |
すべてのログ(DEBUG, INFO, WARN, ERROR) |
production |
WARN |
WARN以上のみ(WARN, ERROR) |
test |
ERROR |
ERRORのみ |
環境変数 LOG_LEVEL でログレベルを上書きできます:
# 本番環境でもDEBUGログを出力したい場合
LOG_LEVEL=DEBUG
# 開発環境でもWARN以上のみにしたい場合
LOG_LEVEL=WARNenvironment:
- NODE_ENV=development # 開発環境
- LOG_LEVEL=DEBUG # 開発環境ではDEBUG以上本番環境での設定例:
environment:
- NODE_ENV=production
- LOG_LEVEL=WARN # 本番環境ではWARN以上のみ# ポート8080を使用しているプロセスを確認
lsof -i :8080
# または別のポートを使用
PORT=3001 docker compose upINTEGRATION_SECRETが正しく設定されているか確認- NotionのIntegrationがHabitsとTodosデータベースにアクセス権限を持っているか確認
コンテナを再構築:
cd app
docker compose down
docker compose up --buildまたは、ローカル開発時:
cd app
npm run devISC