Toggl Track の非公式 CLI ツール tgltrk を作りました
tl;dr
- Toggl Track をコマンドラインから操作できる Rust 製の CLI ツールを作りました
- タイマー操作、タイムエントリ・プロジェクト・クライアント・タグの管理ができます
- Claude Code のスキルとして登録すると、コーディング中の時間管理を雑に頼めます
https://crates.io/crates/tgltrk
Toggl Track とは
Toggl Track はタイムトラッキングサービスで、作業時間の記録・集計ができるやつです。 Web UI やモバイルアプリがあって、タイマーを開始/停止するだけで作業ログが残る。 プロジェクトやタグで分類できるので、何にどれくらい時間を使ったかを振り返れる系のあれ。
背景
Toggl Trackで主だった作業時間とかを記録しようと努めてるんだけど、まあうっかり開始し忘れたり、並行して複数のことをしたりするわけですよ。 あと、Claude Codeの作業時間とかもざっくり記録してるんだけど、なあなかなかうっかりしがち。 そういう時に、こんな感じで記録しておいて、ってAIの人にお願いして対応しておいて欲しい気持ちがあるんだけど、現状だとなかなか難しい。 Toggl TrackにはAPIがあるのでcurlベースでやってはくれるんだけど、わりと試行錯誤するし、APIトークンが思いっきりログに残りまくるのもなーという感じがありました。
Toggl Track の MCP サーバ(非公式)とかは存在するんだけど、MCP はちょっと仰々しいので、SKILLで簡単にできるといいなあという気持ちで、ひとまずCLIを作ろうと思ったのでした。
なにこれ
tgltrk は Toggl Track の非公式 CLI ツールです。
タイマー操作からプロジェクト管理まで、Web UI でできることの大部分をコマンドラインからできます。
$ tgltrk timer current #12345678 Code review 01:23:45 [running] $ tgltrk timer start -d "Code review" -p 12345 -t bug,review ✓ Timer started $ tgltrk timer stop ✓ Timer stopped
できること
- タイマー: 開始・停止・確認
- タイムエントリ: 一覧・作成・編集・削除・続行
- プロジェクト・クライアント・タグ: CRUD
- ワークスペース: 一覧・取得
- 全コマンドで
--json対応なので jq と組み合わせたりスクリプトに組み込める - レスポンスキャッシュ: プロジェクト一覧とかの変更頻度が低いデータはキャッシュから返すので API 呼び出しを節約できる
AI エージェント連携
--help-skill で SKILL.md を出力できるので、Claude Code のスキルとして登録可能。
mkdir -p ~/.claude/skills/tgltrk && tgltrk --help-skill > ~/.claude/skills/tgltrk/SKILL.md
登録すると「今日の作業時間出して」とか「さっきのタイマー止めて」みたいなのを雑に頼める、はず。
--json を適切に使い分けてくれるように SKILL.md を書いてあるので、割とうまくやってくれるはず。
ProjectとかClientも取得できるので、然るべきものを選んでエントリに設定してくれます(というか確認してくれる)。
なので、わりとざっくり依頼するだけでよしなにやってくれます。
認証
$ tgltrk auth login API token: ********
トークンは OS のキーリング(macOS Keychain / Windows Credential Manager / Linux Secret Service)に保存されます。 macOS版のリリースバイナリは公証と署名が行われているので、多分初回にパスフレーズ聞かれたらあとは大丈夫だと思う。 Crates 版とかは自前ビルドになるので、バージョンアップデートごとにパスフレーズを聞かれるかもしれません。 それはKeychainの挙動なので、CLIとしては関知していませんし、取得もしていません。
代替手段として環境変数 TOGGL_API_TOKEN が設定されている場合はそちらが用いられます。
インストール
cargo install tgltrk
ビルド済みバイナリも GitHub Releases に置いてあります(Linux, Windows, macOS Apple Silicon(署名済み))。うまくビルドできないのでIntelMacは諦めました。
技術的なこと
- Rust 製、MSRV 1.85(edition 2024)
- Toggl Track API v9
- テスト 175 個、行カバレッジ 92.75%
- 独自のTTL付きローカルファイルキャッシュ / src/cache.rs
toggl-cli:
もともと、toggl-cliというRustベースのツールがあって、それを使えばいいかなあと思ってたんですけど、2025/11月が最終更新で、かついくつか問題がありました。
- API 呼び出しの非効率
- get_entities() が毎回5つのエンドポイントを並列呼び出し(time_entries, projects, tasks, clients, workspaces)
- toggl running(実行中タイマー確認)だけで5リクエスト消費。
- 無料プラン(30リクエスト/時)で4〜5回操作するだけで枯渇する可能性がある
- テストの薄さ
- フォーク元の時点ではテストが auth コマンドの4件のみ
- それ以外のAPIなどについては一切テストがない
- 非推奨・古い依存クレート
- structopt 0.3: 公式が非推奨とアナウンス。後継は clap v4
- lazy_static: std::sync::OnceLock(Rust 1.80+ で安定化)で代替可能
- エラーハンドリングの不備 1.一部の API エンドポイントが不正確
特に1とかは抜本的なレベルの問題なので、変に直すよりも作り直した方がいいなと判断しました。
かんそう
今回もClaude Code に大変にお世話になりました。ありがとう Claude Code。 所要時間は 2日間で大体17時間くらい。
Toggl Track の API は素直な REST なので、特に致命的な問題はなかったです。 強いて言えばレートリミットが 30req/h ってどういうことなん…という気持ち。しかも、有料にしてもそんなに使えるわけではないし。 なので、複雑になることを甘受してキャッシュ機構をつけたんだけど、管理画面では使用実績が増えないのだがどういうことなんだろう?
ともあれ、Claude Codeに雑に記録を頼むをちゃんと書いてくれるのでむっちゃ便利。 「コミットログのタイムスタンプ見て、大体の作業時間を推定して、15分単位くらいで記録しておいて」みたいな感じで頼んでいます。便利!
リンク
- GitHub: https://github.com/dominion525/tgltrk
- crates.io: https://crates.io/crates/tgltrk
- GitHub Releases: https://github.com/dominion525/tgltrk/releases/tag/v0.1.0
- Toggl Track API: https://engineering.toggl.com/docs/