30分ごとに作業の評価を自動収集し、Notionに記録するタイムトラッキング・評価システム
定期的にSlackへ評価リクエストを送信し、ユーザーがボタンをクリックするだけで作業評価をNotionデータベースに自動記録します。作業の中断を最小限に抑えながら、継続的な自己評価とデータ蓄積を実現します。
- 30分間隔の自動通知: cronスケジューラーで定期的にSlackへ評価リクエストを送信
- 4段階評価システム: Best / Better / Needs Improvement / Worst から選択
- Notion自動記録: 評価結果を日時・コメントと共にNotionデータベースへ保存
- ngrokトンネル: ローカル環境でもSlackからのコールバックを受信可能
- Backend: TypeScript, Express.js
- 外部連携: Notion API, Slack Webhook, ngrok
- スケジューリング: node-cron
- テンプレート: EJS
- インフラ: Docker, Docker Compose
-
Notionデータベース
- 以下のプロパティを持つデータベースを作成:
名前(タイトル型)日時(日付型)単位(セレクト型) - オプション:30分評価(セレクト型) - オプション:Best,Better,Needs Improvement,Worstコメント(テキスト型)
- Notion APIキーを取得し、データベースへのアクセス権限を付与
- 以下のプロパティを持つデータベースを作成:
-
Slack Webhook
- Slack AppでIncoming Webhookを有効化
- Webhook URLを取得
-
ngrok
- ngrokでアカウント登録
- 認証トークンを取得
.envファイルを作成(.env.sampleを参考):
NOTION_API_KEY=your_notion_api_key
NOTION_DATABASE_ID=your_database_id
SLACK_WEBHOOK_URL=your_slack_webhook_url
NGROK_AUTHTOKEN=your_ngrok_authtoken
DATABASE_URL=file:local.dbmake up
# または
docker compose up --buildnpm install
npm start- サーバーを起動すると、初回のSlackメッセージが送信されます
- 30分ごとに「30分間の評価を入力してください」というメッセージがSlackに届きます
- 評価ボタン(Best / Better / Needs Improvement / Worst)をクリック
- 評価が自動的にNotionデータベースに記録されます
- 完了画面が表示されます
起動
↓
ngrokトンネル確立(公開URL取得)
↓
初回Slackメッセージ送信
↓
Expressサーバー起動(ポート3003)
↓
cronスケジューラー開始(30分間隔)
[Cron Scheduler] --30分ごと--> [Slack Webhook]
↓
[ユーザーボタンクリック]
↓
[GET /slack/actions?evaluation={評価}]
↓
[slackHandler] --> [notionService] --> [Notion Database]
↓
[完了画面表示]
src/
├── config/ # 環境変数の読み込み
├── handlers/ # ビジネスロジック
├── scheduler/ # cron定期実行
├── server/ # Expressルーティング
├── services/ # 外部API連携(Notion/Slack)
├── types/ # TypeScript型定義
├── utils/ # ngrok管理ユーティリティ
├── views/ # EJSテンプレート
└── index.ts # エントリーポイント
- 無料プランでは同時接続数が3つまで
- 本プロジェクトではngrok URLをキャッシュすることで、セッション切断を防止
- Dockerコンテナを再起動すると新しいngrok URLが生成されるため、Slackボタンが一時的に動作しなくなる可能性あり
- サーバー再起動時は初回Slackメッセージで新しい公開URLが送信される
- コンソールログに詳細なデバッグ情報が出力される
- Notionデータベースのプロパティ名は日本語で定義されている
ngrok接続エラー
NGROK_AUTHTOKENが正しく設定されているか確認- ngrokの同時接続数制限に達していないか確認
Slackメッセージが届かない
SLACK_WEBHOOK_URLが正しいか確認- Incoming Webhookが有効になっているか確認
Notionへの記録が失敗する
NOTION_API_KEYとデータベースの権限を確認- データベースのプロパティ名と型が一致しているか確認
このプロジェクトは個人利用を想定しています。