Skip to content

Repository files navigation

WorkLogger

.NET Platform Tests License

日々の業務稼働時間を記録し、Redmine に連携する WPF デスクトップアプリケーション。

開発者: Hexia / バージョン: v1.5.0 / ステータス: 全 Phase 完成 + 安定化・実用化パック 🎉

概要

業務開始から作業ごとの記録、業務終了までを記録し、JSONL 形式で永続化。 集計(月次 / 週次 / 前月比)・Excel エクスポート、タスクトレイ常駐、 グローバルホットキー、記録し忘れ防止、そして Redmine への作業時間自動転記まで対応。 スマホ向け PWA(WorkLogger Mobile)による外出先記録も可能。

主要機能

記録・集計

  • 業務開始 → 作業開始 → 作業終了 → 業務終了 の完全フロー
  • 状態表示 + ボタンの動的切り替え (Idle / Ready / Recording)
  • 経過時間のリアルタイム更新
  • 集計ビュー(3 タブ): 月次集計 / 週次ビュー(月曜始まり・第N週) / 前月比(総計+プロジェクト別)
  • Excel エクスポート (3 シート)
  • JSONL 永続化 (月次分割、追記オンリー、アトミック書き込み)

データ管理 (GUI)

  • 設定画面 (保存先、業務日境界、ホットキー、アイドル通知、Redmine 接続)
  • プロジェクトマスタ編集 (CRUD、論理削除、作業分類)
  • 履歴編集 (過去記録の修正・追加・削除、バックアップ付き)
  • 設定/データのバックアップ・インポート (ZIP、単体 JSON 対応、.bak 自動退避)

常駐・操作 (4 経路)

  • タスクトレイ常駐 (× で格納、明示的に終了)
  • グローバルホットキー (Ctrl+Shift+Alt+S/E/W、設定変更可)
  • トレイメニュー
  • 記録し忘れ防止 (アイドルリマインダー)

Redmine 連携

  • URL は設定ファイル (config) に平文保持、API キーのみ DPAPI で暗号化 (配布時は URL 設定済みで API キー入力のみ)
  • プロジェクト・チケット取得 (作業分類=チケット)
  • チケット階層ドリルダウン選択 (大量チケット対応)
  • 作業時間の送信 (time_entries、日次×チケット合算)

スマホ連携 (PWA)

  • WorkLogger Mobile(Web アプリ / PWA、インストール不要)で外出先記録
  • ホーム画面に追加してアプリのように利用、オフライン動作
  • Teams 経由でテキスト送信 → PC で取り込み
  • 重複検出、プロジェクト・作業分類の手動紐付け

品質・運用

  • 単体テスト (xUnit v3、純粋ロジック中心に 179 テスト)
  • 構造化ログ (Serilog、日次ローテーション)
  • グローバル例外ハンドラ (UI / 非 UI / 未観測 Task の 3 系統)
  • 設定スキーマのバージョニングと起動時マイグレーション

実装状況

  • Phase 1: 動くツール (状態機械、JSONL、リカバリ、深夜跨ぎ、2 重起動禁止)
  • Phase 2: UX 改善 + 集計/Excel + MVVM リファクタ
  • Phase 3: データ管理 GUI (設定、プロジェクト、履歴編集)
  • Phase 4: 常駐化 + グローバルホットキー
  • Phase 5: 記録し忘れ防止 (アイドルリマインダー)
  • Phase 6: Redmine 読み取り連携 (接続、プロジェクト・チケット取得)
  • Phase 7: Redmine 書き込み連携 (time_entries) 🎯 最終ゴール
  • Phase 8: スマホ記録の取り込み (PWA + Teams)
  • Phase 9: チケット階層ドリルダウン (1000 超チケット対応)
  • 品質向上パック (v1.3.0): 単体テスト・ログ基盤・例外処理・バックアップ
  • 安定化・実用化パック (v1.4.0〜v1.5.0): 設定統一・スキーマ移行・Redmine URL 分離・週次/前月比集計

バージョン履歴

  • v1.5.0 (2026-07-23): Redmine URL を config へ分離し API キーのみ暗号化 (SchemaVersion 1→2 移行, ADR-0042)、週次ビュー・前月比集計を追加 (ADR-0043)、主要サービスのテスト拡充 (179 テスト)
  • v1.4.1 (2026-07-17): src/tests のプロジェクト分離
  • v1.4.0 (2026-07-17): config/projects を conf/ へ統一、SchemaVersion 付与、旧位置から起動時自動移行 (ADR-0041)
  • v1.3.1 (2026-07-17): RedmineClient を IRedmineClientFactory で抽象化しテスト可能化 (ADR-0040)
  • v1.3.0 (2026-07-17): 品質向上パック (xUnit テスト、Serilog、例外処理、バックアップ/インポート)
  • v1.2.1 (2026-07-15): スマホ取り込み画面のドリルダウン化
  • v1.2.0 (2026-07-15): Phase 9 チケット階層ドリルダウン
  • v1.1.0 (2026-07-13): Phase 8 スマホ連携
  • v1.0.0 (2026-07-10): 最終ゴール達成、Redmine 連携 (Phase 1-7)

技術スタック

  • フレームワーク: .NET 10.0 (Windows Desktop)
  • UI: WPF (MVVM、CommunityToolkit.Mvvm)
  • 永続化: JSON Lines 形式
  • 外部連携: HttpClient (Redmine REST API)、Win32 P/Invoke (ホットキー・トレイ)
  • 暗号化: DPAPI (API キー保護)
  • ログ: Serilog (ファイル出力・日次ローテーション)
  • テスト: xUnit v3 (Microsoft.Testing.Platform ランナー)
  • 設計: SOLID 原則、依存性注入、関心の分離、判断ロジックの純粋関数化

NuGet パッケージ

パッケージ 用途 ライセンス
ClosedXML Excel ファイル生成 MIT
CommunityToolkit.Mvvm MVVM (ObservableProperty, RelayCommand) MIT
Hardcodet.NotifyIcon.Wpf タスクトレイ MIT
Serilog / Serilog.Sinks.File 構造化ログ Apache-2.0
xunit.v3 (テストのみ) 単体テスト Apache-2.0

各コンポーネントの著作権表示は THIRD-PARTY-NOTICES.txt を参照。

ドキュメント

  • docs/BUILD.md: ビルド・配布手順
  • **docs/USER_MANUAL.Architecture Decision Records、0001〜0043)
  • docs/DESIGN.md: 全体設計文書
  • docs/LEARNING.md: 学習ログ (Day 1〜)

ビルド・実行

必要環境

  • .NET 10 SDK(ビルド用) / .NET 10 Desktop Runtime(実行用)
  • Windows

ビルドとテスト

dotnet build
dotnet test

配布 (Framework-dependent フォルダ配布)

dotnet publish -c Release -r win-x64 --self-contained false

詳細は docs/BUILD.md 参照。

ライセンス

MIT License © 2026 Hexia

本ソフトウェアが利用するサードパーティ製ライブラリのライセンスは THIRD-PARTY-NOTICES.txt を参照してください。

About

A Windows desktop app (WPF / .NET 10) for tracking work hours with Redmine time-entry integration.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages