Skip to content

Repository files navigation

toggle

概要

  • コードは FastAPI と LINE Bot、そして Toggl API を連携させたボット実装です。ユーザー登録、作業開始/停止、状態確認、レポート取得の機能に加え、バックグラウンドタスクで長時間稼働中のエントリーをチェックし、LINE でプッシュ通知する仕組みとなっています。

変更点

v2→v3

  1. 非同期ファイル操作の導入
  • 変更前:
    • 同期的なファイル入出力を使用し、jsonモジュールと通常の open 関数でデータの読み書きを実施。
  • 変更後:
    • aiofiles を利用した非同期 I/O に変更。AsyncFileLock クラスを実装し、ファイルロックを非同期で管理することで、複数のタスクが同時に同じファイルへアクセスする際の競合を防止。
  • メリット:
    • 非同期環境下でのブロッキングを回避し、パフォーマンスの向上が期待できる。
  1. TogglClient の改善
  • 変更前: 各リクエスト毎に新しい aiohttp.ClientSession を作成していたため、セッションの再利用ができず、オーバーヘッドが発生する可能性があった。
  • 変更後: コンテキストマネージャー (aenter / aexit) を用い、セッションを初期化して再利用する設計に変更。 エラーハンドリングを強化し、レスポンスエラー時には詳細なエラーログ(HTTPレスポンスの内容)を出力。 start_time_entry 時に、説明文やユーザー名の文字数制限(例: 255文字、50文字)を実施し、入力検証を強化。
  • メリット: セッションの再利用により、API リクエストのパフォーマンス向上。 入力検証・文字数制限により、予期せぬデータ不整合の可能性を低減。
  1. ファイル入出力の排他制御
  • 変更前: 排他制御なしにファイルを読み書きしていたため、並行実行時にデータ競合が発生するリスクがあった。
  • 変更後: fcntl を利用したファイルロック機構を導入(同期版の safe_load_json / safe_save_json と、非同期版の AsyncFileLock を実装)。
  • メリット: 複数のプロセス・タスクによる同時アクセス時の安全性が向上。
  1. ロギングと環境変数の管理
  • 変更前: ロギングはコンソール出力のみで、設定も比較的シンプル。 ポート番号などがハードコーディングされ、ポート競合時のリトライ機構も実装していた。
  • 変更後: ログ出力先をファイル(bot.log)と標準出力の両方に設定し、ログフォーマットも改善。 ポートやデバッグモードの設定を環境変数から取得するシンプルな実装に変更。
  • メリット: 運用環境への対応(環境変数による設定変更)が容易になる。 注意点: ポート競合時の自動リトライ機構がなくなっているため、運用時にポートの固定化に注意が必要。
  1. コマンド処理の改善
  • 変更前: コマンド処理の各関数がほぼ同じ設計で、登録、開始、停止、状態確認、レポート取得が実装されていた。 asyncio.run を同期関数内で呼び出すなど、実行タイミングの面でやや改善の余地あり。
  • 変更後: コマンドの各ハンドラーにおいて、入力の検証(例: ワークスペースIDが数値かどうか)を追加。 コマンドごとにエラーハンドリングのロギングを強化し、エラーメッセージも明示的に返す実装に。 コマンド「help」の対応も明示的に追加。

v3→v4 ローカル開発ver

  • _request の URL 組み立て修正 path が "http" で始まる場合はそのまま使用し、そうでなければ BASE_URL を連結するようにしました。 これにより、レポート取得時に正しい URL が使用されます。

About

Achieves standardization of team progress reporting, automation of time management, and seamless GitHub integration in a single Discord Bot. Supports team daily operations comprehensively through automatic attendance management via Toggl API, report format suggestions and attendance evaluation

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages