DevInsight - コーディング時間追跡 & Discord ランキングシステム
📋 概要
DevInsightは、開発者のコーディング時間を自動追跡し、週次でDiscordにランキングを投稿するシステムです。VSCode拡張機能とGCP Cloud Runサービスで構成され、完全無料枠内で運用可能です。
🏗️ アーキテクチャ
┌─────────────────┐
│ VSCode Editor │
│ [Extension] │
└────────┬────────┘
│ HTTP POST (coding data)
↓
┌─────────────────┐ ┌──────────────┐
│ Cloud Run │────→│ Datastore │
│ (Ingestion) │ │ (NoSQL) │
└─────────────────┘ └──────┬───────┘
│
┌─────────────────────────┼─────────────────────┐
│ │ │
↓ ↓ ↓
┌──────────┐ ┌──────────┐ ┌──────────┐
│Cloud Run │ │Cloud Run │ │Cloud Run │
│(Ranking) │ │ (Label) │ │ (Delete) │
└────┬─────┘ └────┬─────┘ └──────────┘
│ │
↓ ↓
┌──────────────────────────────┐
│ Discord Server │
│ ・Weekly Rankings │
│ ・Role Labels │
└──────────────────────────────┘
⏰ Cloud Scheduler
- 毎週月曜 4:00 AM: ランキング生成
- 毎週月曜 4:15 AM: ラベル付与
🚀 GCP サービス構成
サービス |
説明 |
エンドポイント |
Ingestion Service |
VSCodeからのデータ受信 |
https://devinsight-ingestion-*.run.app |
Ranking Service |
週次ランキング生成 |
https://devinsight-ranking-*.run.app |
Label Service |
Discordロール管理 |
https://devinsight-label-*.run.app |
Delete Service |
古いデータ削除 |
https://devinsight-delete-*.run.app |
使用技術
- Cloud Run: サーバーレスコンテナ実行環境
- Datastore: NoSQLデータベース(無料枠)
- Cloud Scheduler: 定期実行ジョブ
- Cloud Build: 自動ビルド・デプロイ
📦 VSCode 拡張機能
インストール方法
Marketplaceから(推奨)
- VSCode拡張機能ストアを開く(
Ctrl/Cmd + Shift + X
)
- 「DevInsights」を検索
- インストールボタンをクリック
VSIXファイルから
code --install-extension vscode-DevInsights-27.0.0.vsix
初期設定
Discord IDを設定
- コマンドパレット(
Cmd+Shift+P
)
- 「DevInsights: Input Discord unique Id」を選択
- Discord IDを入力(18-19桁の数字)
Discord IDの取得方法:
- Discord設定 → 詳細設定 → 開発者モードを有効化
- ユーザー名を右クリック → 「IDをコピー」
🛠️ デプロイ・管理スクリプト
1. deploy-to-gcp-free.sh
完全無料デプロイスクリプト - Container Registryを使用せずにデプロイ
# プロジェクトIDを設定してデプロイ
export GCP_PROJECT_ID=your-project-id
./deploy-to-gcp-free.sh
特徴:
--source
フラグでソースから直接デプロイ
- Container Registry不要(料金発生なし)
- すべてのサービスを一括デプロイ
2. env-manager.sh
環境変数管理ツール - .envファイルとCloud Runサービスの環境変数を同期
# .envファイルから環境変数をアップロード
./env-manager.sh upload
# 現在の環境変数を表示
./env-manager.sh show
# Cloud Runから環境変数をダウンロード
./env-manager.sh download
3. setup-cloud-scheduler.sh
Cloud Scheduler設定 - 週次実行ジョブを設定
./setup-cloud-scheduler.sh
設定内容:
- ランキング: 毎週月曜 4:00 AM JST
- ラベル付与: 毎週月曜 4:15 AM JST
4. deploy-ingestion.sh
データ取り込みサービス専用デプロイ - VSCode拡張機能用エンドポイント
./deploy-ingestion.sh
⚙️ セットアップ手順
前提条件
- GCPプロジェクト作成済み
- gcloud CLI インストール済み
- Discord Bot作成済み
1. 環境変数の設定
.env
ファイルを作成(.env.example
を参考):
cp .env.example .env
# エディタで.envを編集
必要な環境変数:
DISCORD_TOKEN
: Discord Botトークン
DISCORD_CHANNEL_ID
: 投稿先チャンネルID
DISCORD_GUILD_ID
: サーバーID
GCP_PROJECT_ID
: GCPプロジェクトID
2. GCP認証とプロジェクト設定
# GCPにログイン
gcloud auth login
# プロジェクト設定
gcloud config set project your-project-id
# 必要なAPIを有効化
gcloud services enable run.googleapis.com
gcloud services enable firestore.googleapis.com
gcloud services enable cloudscheduler.googleapis.com
3. Datastoreデータベース作成
gcloud firestore databases create \
--location asia-northeast1 \
--type=datastore-mode
4. サービスのデプロイ
# すべてのサービスをデプロイ
./deploy-to-gcp-free.sh
# 環境変数をアップロード
./env-manager.sh upload
# スケジューラーを設定
./setup-cloud-scheduler.sh
5. 動作確認
# ヘルスチェック
curl https://your-ranking-service.run.app/health
# 手動実行テスト
gcloud scheduler jobs run devinsight-ranking-schedule \
--location=asia-northeast1
📊 データフロー
データ収集
- VSCode拡張機能がコーディング時間を検出
- 5分ごとにIngestion ServiceへHTTP POST
データ保存
- Ingestion ServiceがDatastoreに保存
- スキーマ:
discord_id
, timestamp
, language
週次処理
- Cloud Schedulerが月曜4時に起動
- 過去1週間のデータを集計
- Discordにランキング投稿
🎯 特徴
- ✅ 完全無料運用 - GCP無料枠内で動作
- ✅ 自動化 - Cloud Schedulerで完全自動実行
- ✅ 言語別集計 - プログラミング言語ごとの時間追跡
- ✅ リアルタイム - コーディング中に自動でデータ送信
- ✅ セキュア - 環境変数でトークン管理
- ✅ スケーラブル - Cloud Runの自動スケーリング
💰 コスト
すべてGCP無料枠内:
- Cloud Run: 200万リクエスト/月まで無料
- Datastore: 1GB/日まで無料
- Cloud Scheduler: 3ジョブまで無料
- Cloud Build: 120分/日まで無料
予算アラート設定済み($1上限)
🔒 セキュリティ
- Discord トークンは環境変数で管理
.env
ファイルはGitignoreに追加
- Cloud Run サービスは認証不要(public)
🐛 トラブルシューティング
Discord認証エラー
# エラー: websocket: close 4004: Authentication failed
# 解決: Discord Botトークンを再生成して更新
./env-manager.sh upload
デプロイエラー
# Cloud Build権限エラーの場合
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com" \
--role="roles/run.developer"
ログの確認
# サービスログ
gcloud run services logs read SERVICE_NAME \
--region asia-northeast1 \
--limit 50
# Scheduler実行履歴
gcloud scheduler jobs describe JOB_NAME \
--location asia-northeast1
📝 ライセンス
MIT License
🤝 コントリビューション
Issue や Pull Request 歓迎です!
📧 サポート
問題が発生した場合は、Issues でお知らせください。