DevInsights
Background and Summary
DevInsights は、コーディングに費やした時間を自動的に追跡し可視化するツールです。Google Cloud Platform (GCP)上で動作し、Discordと統合されており、総コーディング時間をランキング表示することで、どのユーザーが最も作業したかを確認できます!コミットランキングではわからない、個人開発以外にどれくらいメンバーが頑張っているかを確認できます!
🌟 主な機能
- ⏱️ 自動時間追跡: VSCodeでの実際のコーディング時間を自動計測
- 🏆 ランキング機能: Discord上で作業時間ランキングを表示
- 📊 言語別統計: 使用プログラミング言語の詳細分析
- 🏷️ ラベリング機能: プロジェクトやタスクのカテゴリ分け
- ☁️ クラウド対応: GCP Cloud Run + Datastore による高可用性
- 🔄 マルチプロジェクト対応: 複数のGCPプロジェクト間での簡単切り替え
インストール
拡張機能ストアへ移動してください!(ctrl/cmd + shift + x)
「devinsights」を拡張機能ストアで検索する。

Discord Unique ID(またはユーザー名)を入力し、Enter キーを押します。ユーザー名は Discord の @ の後ろの英数字です(サーバーに参加している必要があります)。
(入力欄が表示されない場合は、F1 キーまたは ⌘ + Shift + P を押して「DevInsights Discord ID」などと入力してください。)

Discord Unique ID のコピー方法:
- Discord を開き、ユーザー設定に移動します。

- 「詳細設定」の下で「開発者モード」を有効にします。

- ユーザーリスト内のユーザー名またはプロフィールを右クリックし、「ID をコピー」を選択します。

特徴
使用時間はコーディングをしている時間またはファイルを切り替えた時がカウントされるため、ただエディタを開いているだけでは計測されないので、正確な作業時間がわかります!
ラベル付けを行う機能もあるため、discordのタグを確認してみてください!誰が何を勉強しているかがわかります👍
🔍 作業時間計測アルゴリズム
📊 データ収集の仕組み
DevInsightsは以下の流れで正確な作業時間を計測します:
1. VSCode拡張機能によるイベント検知
- ファイルの切り替え(
onDidChangeActiveTextEditor)
- ファイル内容の変更(
onDidChangeTextDocument。最短30秒間隔で記録)
- ワークスペースの変更
- フォーカスの変化
2. データポイントの生成
各イベントで以下の情報をDatastoreに送信:
{
"discord_id": "ユーザーのDiscord ID",
"timestamp": "2025-09-05T03:15:51Z",
"language": "python"
}
3. 作業時間の計算アルゴリズム
データポイント → 間隔ごとの時間計算 → 言語別集計
時間計算ロジック(セッション分割はしません):
- 各記録は「次の記録までの時間」を持ちます
- 次の記録までの間隔が 15分以内 → その間隔をそのまま作業時間に加算
- 間隔が15分を超える/最後の記録 → 2分 だけ加算(離席や就寝の長い空白は数えません)
- 言語は、その区間の開始側の記録の言語に加算します(言語別の合計 = 総作業時間)
- 15分・2分は環境変数
IDLE_TIMEOUT_MINUTES / HEARTBEAT_CREDIT_MINUTES で変更できます
4. 時間計算の詳細
例: ユーザーAのデータ
09:00 - python
09:05 - python
09:10 - javascript
09:15 - javascript
09:50 - python (35分空いた)
09:55 - python
計算結果:
09:00→09:05 5分 (python)
09:05→09:10 5分 (python)
09:10→09:15 5分 (javascript)
09:15→09:50 35分>15分 → 2分 (javascript)
09:50→09:55 5分 (python)
09:55→(最後) 2分 (python)
合計: python: 12分, javascript: 7分, 総作業時間: 19分
5. ランキング生成プロセス
- データ収集: 過去7日間のデータをDatastoreから取得
- ユーザー別集計: discord_id毎に上記の時間計算を実行
- 言語別統計: 各ユーザーの使用言語と時間を計算
- フィルタリング: 設定された最小時間(デフォルト1時間)以上のユーザーを抽出
- ソート: 総作業時間の降順でランキング化
- Discord送信: フォーマットされたメッセージを指定チャンネルに送信
🎯 精度向上の工夫
- アイドル検出: 15分を超える無活動は2分分しか作業時間に含めない
- ファイルタイプ認識: プログラミング言語の自動判定
- 重複排除: 同一タイミングの複数イベントを統合
- 言語マッピング: JSX→JavaScript, TSX→TypeScript等の統合
📈 統計データの活用
- 個人分析: 言語別の作業時間分布
- チーム分析: メンバー間の作業量比較
- トレンド分析: 週次・月次の作業パターン
- プロジェクト分析: ラベル機能による案件別集計
🚀 GCP設定とデプロイ
前提条件
- Google Cloud Platform アカウント
- gcloud CLI のインストールと認証
環境設定
.env.example をコピーして .env を作成
- Discord Token、Channel ID、Guild ID を設定
- GCP Project ID を設定
プロジェクト切り替えツール
./switch-project.sh
- 開発/本番/カスタム環境の切り替え
- GCPアカウントの変更
- 必要なAPIの自動有効化
デプロイ
# 全サービスのデプロイ
./deploy-multi-project.sh
# または従来のスクリプト
./deploy-to-gcp-free.sh
環境変数設定
| 変数名 |
説明 |
デフォルト |
GCP_PROJECT_ID |
GCPプロジェクトID |
必須 |
DISCORD_TOKEN |
Discordボットトークン |
必須 |
DISCORD_CHANNEL_ID |
ランキング表示チャンネルID |
必須 |
MIN_DISPLAY_HOURS |
ランキング表示最小時間 |
1 |
OTHER_LANGUAGES |
追加対応言語 |
markdown,json,yaml等 |
MERGE_LANGUAGES |
言語マッピング |
jsx:javascript等 |
定期実行の設定
./setup-cloud-scheduler.sh
毎週月曜日の朝9時(JST)に自動実行