gitstack 2.20.0

Git history viewer with insights - Author stats, file heatmap, code ownership
Documentation
# gitstack

[![Crates.io](https://img.shields.io/crates/v/gitstack.svg)](https://crates.io/crates/gitstack)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

> **分析とインサイトに特化したGit履歴ビューア**

<!-- ![hero](assets/hero.gif) -->

## なぜ gitstack?

| ツール | フォーカス | 最適な用途 |
|--------|-----------|-----------|
| lazygit | Git操作 | ステージング、リベース、チェリーピック |
| tig | ログ閲覧 | コミットの素早い確認 |
| keifu | グラフ可視化 | 美しいブランチ表示 |
| **gitstack** | **分析 & インサイト** | **コードベースの理解** |

gitstackはこんな疑問に答えます:
- *「このモジュールは誰が作業してきた?」*
- *「どのファイルが頻繁に変更されている?」*
- *「放置されているブランチはある?」*

## インストール

```bash
cargo install gitstack
```

ソースからビルド:
```bash
git clone https://github.com/Hiro-Chiba/gitstack
cd gitstack
cargo install --path .
```

## 機能

### 分析スイート

<!-- ![analysis](assets/analysis.gif) -->

キー1つで即座にインサイトを取得:

| キー | ビュー | 表示内容 |
|------|--------|----------|
| `A` | 著者統計 | 著者ごとのコミット数、追加/削除行数 |
| `H` | ヒートマップ | 最も頻繁に変更されるファイル |
| `T` | タイムライン | 時間帯/曜日別のコミット活動 |
| `O` | オーナーシップ | ファイル/ディレクトリごとのコード所有者 |
| `I` | Impact Score | コミット影響度スコア(0.0-1.0) |
| `t` | トポロジー | ブランチ健全性と放置ブランチ検出 |

### スマートフィルター

<!-- ![filter](assets/filter.gif) -->

直感的な構文による強力なフィルタリング:

```
/author:john              # 著者でフィルター
/since:7days              # 最近のコミット
/until:2024-01-01         # 指定日以前
/message:fix              # コミットメッセージ検索
/file:src/main.rs         # 特定ファイルに関するコミット
/hash:abc123..def456      # コミット範囲
```

フィルターの組み合わせ: `/author:john since:1week file:*.rs`

### 2ペインレイアウト

<!-- ![2pane](assets/2pane.gif) -->

`v`で切り替えて、グラフと詳細を並べて表示:

```
┌─ グラフ ────────────────┬─ 詳細 ─────────────────────────┐
│ ● abc123 feat: 認証追加 │ Author: John Doe               │
│ │                       │ Date: 2024-01-15 10:30         │
│ ○ def456 fix: バグ修正  │                                │
│ │                       │ feat: 認証機能を追加           │
│ ◆ ghi789 Merge          │                                │
│ │                       │ - ログインエンドポイント追加   │
│ ○ jkl012 init           │ - JWT検証を追加                │
└─────────────────────────┴────────────────────────────────┘
```

### ブランチグラフ

スマートな色割り当てによるカラーコード付きブランチ可視化:
- 隣接レーンは同じ色にならない
- 同じ分岐元からのブランチは異なる色を取得
- 適切な線接続によるクリアなマージ可視化

### CLIモード(非対話)

AIコーディングアシスタント(Claude Codeなど)やスクリプトから利用可能なJSON出力:

```bash
gitstack --stats       # 著者統計
gitstack --heatmap     # ファイル変更頻度
gitstack --impact      # コミット影響度スコア
gitstack --coupling    # ファイル変更結合度
gitstack --log -n 5    # 最新コミット
```

出力例(`--stats`):
```json
{
  "generated_at": "2026-02-03T10:30:00+0900",
  "total_commits": 150,
  "author_count": 3,
  "authors": [
    {"name": "Alice", "commit_count": 80, "insertions": 5000, ...}
  ]
}
```

| オプション | 説明 |
|-----------|------|
| `--stats` | 著者統計をJSON出力 |
| `--heatmap` | ファイルヒートマップをJSON出力 |
| `--impact` | 影響度スコアをJSON出力 |
| `--coupling` | 変更結合度をJSON出力 |
| `--log -n N` | 最新N件のコミットをJSON出力(デフォルト: 10、最大: 10000) |
| `--help` | ヘルプ表示 |
| `--version` | バージョン表示 |

## 比較

| 機能 | gitstack | keifu | lazygit | tig |
|------|:--------:|:-----:|:-------:|:---:|
| 著者統計 |||||
| ファイルヒートマップ |||||
| コードオーナーシップ |||||
| Impact Score |||||
| ブランチ健全性/トポロジー |||||
| スマートフィルター構文 |||||
| 2ペインレイアウト |||||
| コミット範囲フィルター |||||
| ブランチグラフ |||||
| ステージング/コミット |||||
| Pull/Push |||||
| ブランチ作成/削除 |||||
| インタラクティブリベース |||||
| CLI/JSON出力 |||||

## キーバインド

### ナビゲーション
| キー | 操作 |
|------|------|
| `j` / `` | 下へ移動 |
| `k` / `` | 上へ移動 |
| `g` | 先頭へ |
| `G` | 末尾へ |
| `Ctrl+d` | ページダウン |
| `Ctrl+u` | ページアップ |

### ビュー
| キー | 操作 |
|------|------|
| `Enter` | コミット詳細/diff表示 |
| `P` | ファイルパッチ表示(詳細ビュー内) |
| `v` | 2ペインレイアウト切替 |
| `A` | 著者統計 |
| `H` | ファイルヒートマップ |
| `T` | コミットタイムライン |
| `O` | コードオーナーシップ |
| `I` | Impact Score |
| `t` | ブランチトポロジー |

### アクション
| キー | 操作 |
|------|------|
| `/` | フィルターを開く |
| `Esc` | フィルターをクリア/ビューを閉じる |
| `y` | コミットハッシュをコピー |
| `b` | Blameビューを表示 |
| `s` | ステータスビューを開く |
| `F` | リモートからフェッチ |
| `?` | ヘルプを表示 |
| `q` | 終了 |

### ステータスビュー (s)
| キー | 操作 |
|------|------|
| `Space` | ファイルをステージ/アンステージ |
| `a` | すべてステージ |
| `A` | すべてアンステージ |
| `c` | コミット |
| `l` | リモートからプル |
| `p` | リモートへプッシュ |

### ブランチ選択 (b)
| キー | 操作 |
|------|------|
| `Enter` | ブランチをチェックアウト |
| `n` | 新しいブランチを作成 |
| `d` | ブランチを削除 |

## 設定

設定ファイル: `~/.config/gitstack/config.toml`

```toml
[display]
date_format = "relative"  # または "absolute"
show_stats = true

[keybindings]
quit = "q"
help = "?"
```

## ライセンス

MIT

---

[English](README.md) · [設計書](docs/DESIGN.md)