TrueEffort
開発における「真の努力(Effort)」を計測・可視化する VS Code 拡張機能です。
単なる起動時間ではなく、実働時間と自力でのコーディング割合(手入力 vs AI生成)を明確にします。
機能
- 総滞在時間の計測(このプロジェクトで VS Code を起動していた時間。ウィンドウのフォーカス状態に関わらずカウント)
- 実働時間の計測(カーソル移動・文字入力など操作があった秒だけをカウントし、操作が止まると即座に停止)
- 入力ソース判別(手入力 / ペースト / AI・スニペット)と比率計算
- ステータスバーへのリアルタイム表示
- 例:
⏱ 05:20:00 / 💻 02:45:15 | 🧑 [███████░░░] 72% 🤖
- ダッシュボード(Webview)による日別推移・入力ソース比率の可視化
コマンド
| コマンド |
説明 |
TrueEffort: Show Dashboard |
日別推移と入力ソース比率のダッシュボードを開く |
TrueEffort: Reset Current Project |
現在のプロジェクトの計測データをリセットする |
ステータスバーのアイテムをクリックしてもダッシュボードを開けます。
設定
| 設定キー |
既定値 |
説明 |
trueeffort.aiThresholdChars |
30 |
クリップボード不一致の一括挿入のうち、この文字数以上を AI/スニペットと判定(IME 誤判定回避) |
trueeffort.formatterIgnoreMs |
1500 |
保存直後のこのミリ秒間の変更を自動フォーマットとみなし計測から除外 |
入力ソースの判定ロジック
| 分類 |
判定条件 |
| 手入力 (🧑) |
1〜2文字の単発入力、マルチカーソル編集、または閾値未満の挿入(IME 変換確定など) |
| ペースト (📋) |
挿入文字列がクリップボードの内容と完全一致 |
| AI / スニペット (🤖) |
クリップボード不一致かつ閾値(既定30文字)以上のまとまった挿入 |
ステータスバーのゲージでは、ペーストと AI をまとめて「自力でない入力」(🤖側)として比率表示します。
エッジケース対応
- IME 変換確定: 閾値未満の一括挿入は手入力として扱い、日本語入力を AI と誤判定しません。
- フォーマッタ自動修正: 保存直後の一定時間に発生した変更を計測から除外します。
- Vim 等のカーソル移動: 文字入力を伴わない選択変更も
onDidChangeTextEditorSelection でアクティブとして捕捉します。
- パフォーマンス: UI 更新は1秒周期、永続化は5秒周期のバッチ処理で行い、キーストロークごとの再描画を避けます。
- ウィンドウ非フォーカス時: 計測を停止し、別アプリでの作業を滞在時間に含めません。
開発
npm install # 依存インストール
npm run compile # webpack ビルド
npm run watch # ウォッチビルド
F5(Run Extension)で拡張機能ホストを起動してデバッグできます。
アーキテクチャ
| ファイル |
役割 |
src/model.ts |
データモデル定義・正規化 |
src/store.ts |
インメモリ保持と workspaceState への永続化(スロットリング) |
src/timeTracker.ts |
総時間・実働時間の計測(アイドル / フォーカス判定) |
src/effortClassifier.ts |
入力ソース判別とエッジケース処理 |
src/statusBar.ts |
ステータスバー表示・ゲージ生成 |
src/dashboard.ts |
Webview ダッシュボード |
src/extension.ts |
エントリポイント(配線・コマンド登録) |
| |