We follow Semantic Versioning 2.0.0. Before v1.0.0 (v0.x.y), use the rules below.
- v0.x.0 (Minor update): New features and breaking changes
- v0.x.y (Patch update): Bug fixes, docs, internal performance only
- Major (X.0.0): Breaking changes
- Minor (0.X.0): Backward-compatible features
- Patch (0.0.X): Backward-compatible fixes
Goal: Establish basic pipeline processing and real-time display.
- Core: Stream stdin and process per line
- Logic: In-memory HashMap aggregation
- TUI: Clear screen and render Top N
- CLI: Basic options (
-n,--interval) - Ops: CI (GitHub Actions)
Goal: Make daily use comfortable and flexible.
Priority start: boundary tests for -f/-d and richer --help.
- Full
-f, --fieldimplementation with boundary tests -
-d, --delimiter(CSV/TSV) - Replace invalid UTF-8 bytes during processing
- Enrich
--helpwith defaults and constraints
- Non-blocking key input
-
Space: pause/resume -
r: reset counts -
q: quit - Separate render loop and input handling
- Define state transitions (run/pause/reset/quit)
- Enable/disable terminal raw mode safely
- Stronger error handling (permissions, broken pipes)
- Richer
--help - Color output (bar colors)
- Improved layout for terminal width changes
- Redraw on terminal resize (SIGWINCH)
- Ensure raw mode is restored on unexpected errors
- NO_COLOR support (disable ANSI colors)
- Debounce resize redraws
Goal: Make installation easy for everyone.
- GitHub Releases with binaries (tag-triggered run)
- Multi-platform builds (Linux/macOS/Windows)
- Release workflow added (GitHub Actions)
- Reuse line buffers to reduce per-line allocations
- crates.io metadata prepared (Cargo.toml/README/LICENSE)
- crates.io publish (manual)
- Table-based TUI (rank/count/percent/key)
- Fixed-width table layout (
--width) - ANSI color toggle (
--no-color) - Disable final text output (
--no-final)
- Homebrew tap
-
cargo-binstallsupport
- JSON log parsing (
--json key) (implemented early in v0.5)
Goal: Reliability under heavy load and long-running use.
- Faster hashing (
ahash/fxhash) - Channel optimization (
flumeetc.) - Reduced allocations (zero-copy parsing)
- Count-Min Sketch option
- Security review
- Freeze CLI API
- Long-term support policy
main: always releasabledevelop: optional integration branchfeat/xxx: feature branchesfix/xxx: bug fix branches
- Move "Unreleased" to a version in
CHANGELOG.md cargo testcargo clippy- Manual E2E check on real logs
本プロジェクトは Semantic Versioning 2.0.0 に準拠しますが、v1.0.0 到達前の 初期開発フェーズ (v0.x.y) においては以下のルールを適用します。
- v0.x.0 (Minor Update):
- 新機能の追加、または破壊的変更 (Breaking Changes) を含むリリース。
- CLIオプションの変更や削除はこのタイミングで行う。
- v0.x.y (Patch Update):
- バグ修正、ドキュメント更新、内部パフォーマンス改善のみ。
- 既存のCLIオプションの挙動は変更しない(後方互換性を維持)。
- Major (X.0.0): 破壊的な変更。
- Minor (0.X.0): 後方互換性のある機能追加。
- Patch (0.0.X): 後方互換性のあるバグ修正。
ゴール: パイプライン処理とリアルタイム表示の基本動作を確立する。
- Core: 標準入力からのストリーム読み込みと行単位処理
- Logic: HashMapによるメモリ内集計
- TUI: 画面クリアとTop Nランキングの描画
- CLI: 基本オプション (
-n,--interval) の実装 - Ops: CI (GitHub Actions) の構築
ゴール: 日常的な業務や調査でストレスなく使える柔軟性を持たせる。
優先着手: v0.2.0 の -f/-d 境界値テストと --help の充実化
cut コマンドに頼らず、tally単体でフィールド抽出ができるようにする。
- フィールド指定 (
-f, --field) の完全実装と境界値テスト - 区切り文字指定 (
-d, --delimiter) の実装(CSV/TSV対応) - UTF-8の不正バイトは置換して処理する方針を明記・検証
-
--helpの詳細化(既定値/制約の明記)
流れるログを「止めて見る」「リセットする」対話機能。
- キー入力ハンドリング(非ブロッキング)
-
Space: 一時停止/再開 -
r: カウントのリセット -
q: 即時終了 - 画面描画と入力処理のイベントループを分離
- 主要キー操作の状態遷移(run/pause/reset/quit)を定義
- 端末のraw modeを安全に有効/無効化
- エラーハンドリングの強化(権限エラー、パイプ切断時の挙動改善)
- ヘルプメッセージ (
--help) のリッチ化 - カラー出力対応(バーチャートの色分けなど)
- 端末幅に応じた表示最適化の強化
- 端末リサイズ時の再描画(SIGWINCH)
- 予期せぬエラー時にraw modeを復元
- NO_COLOR対応(ANSIカラー無効化)
- リサイズ再描画のデバウンス
ゴール: 誰でも簡単にインストールして使える状態にする。
- GitHub Releases へのバイナリ自動アップロード(タグ起動)
- マルチプラットフォームビルド (Linux, macOS, Windows)
- GitHub ActionsのリリースWF追加
- 行バッファ再利用によるアロケーション削減
- crates.ioメタデータ準備(Cargo.toml/README/LICENSE)
- crates.io公開(手動)
- テーブル形式UI(順位/件数/割合/キー)
- テーブル幅固定(
--width) - ANSIカラー切替(
--no-color) - EOF後の最終テキスト出力を無効化(
--no-final)
- Homebrew Tap の作成 (
brew install tally) -
cargo-binstall対応
- JSONログのパース対応 (
--json key)(v0.5で先行実装)- 例:
tail -f app.log | tally --json levelでJSON内の特定キーを集計
- 例:
ゴール: 本番環境の高負荷・長時間稼働に耐える信頼性を確立する。
- 高速ハッシュアルゴリズム (
ahash/fxhash) の導入 - ロック競合の最適化(
flumeなどのチャネル検討) - メモリ割り当ての最小化(Zero-copy parsing)
- 近似集計アルゴリズム (Count-Min Sketch) の導入オプション
- メモリ固定で数億ユニークIPなどを扱えるようにする
- 全機能のセキュリティ監査
- CLI APIの固定(これ以降の破壊的変更を禁止)
- 长期サポート方針の策定
main: 常にビルド可能で、リリースタグが打たれるブランチ。develop: 次期バージョンの開発用(必要に応じて作成)。feat/xxx: 機能追加用トピックブランチ。PRを経てマージされる。fix/xxx: バグ修正用。
リリース前には必ず以下を実施する:
CHANGELOG.mdの "Unreleased" をバージョン番号へ移動cargo test全通過を確認cargo clippyの警告ゼロを確認- 実際のログファイルを用いた動作確認(End-to-End)