Gitリポジトリのコミット履歴とreflogを分析して、開発習慣を可視化するツールです。
このツールは、Gitリポジトリのコミット履歴とreflogを解析し、以下のような開発習慣をグラフ化したHTMLレポートを生成します:
- 時間帯別・曜日別のコミット頻度 - あなたは朝型?夜型?
- コミットメッセージ分析 - よく使う単語、Conventional Commits準拠率
- 作業習慣(reflog分析) - よく使うGitコマンド、やり直し率
https://github.com/rails/rails の解析結果(抜粋)です
- Ruby 2.7以降
- Git
- MeCab(日本語形態素解析用)
- モダンなWebブラウザ(レポート表示用)
git clone https://github.com/everyleaf/hc2025_yoshihara.git
cd hc2025_yoshihara
# MeCabのインストール(macOS)
brew install mecab
# Rubyの依存gemをインストール
bundle install現在のディレクトリのGitリポジトリを分析:
ruby analyze.rbレポートが output/report.html に生成されます。ブラウザで開いて確認してください:
open output/report.htmlruby analyze.rb /path/to/repositoryruby analyze.rb --author="your-name"ruby analyze.rb --since="2025-01-01" --until="2025-12-31"ruby analyze.rb --author="f-yoshihara" --since="2025-10-01"注意: --author を指定した場合、reflog分析はスキップされます(reflogはローカルのみで他人の作業履歴を取得できないため)。
- 時間帯別コミット頻度: 0〜23時の各時間帯のコミット数
- 曜日別コミット頻度: 月〜日のコミット数
- コミットメッセージでよく使う単語 TOP10: 頻出単語を可視化(日本語・英語対応)
- MeCab形態素解析により、日本語の名詞・動詞・形容詞を抽出
- 英語の単語も同時に抽出
- ストップワードフィルタリングで意味のある単語だけを表示
- Conventional Commits準拠率:
fix:,feat:などの使用率 - 平均メッセージ長: コミットメッセージの平均文字数
- ファイル拡張子別の編集頻度 TOP10: どの種類のファイルをよく編集しているか
- よく変更されるファイル TOP10: ホットスポットの特定
- コミットサイズの分布: tiny/small/medium/large/huge の分布と平均変更行数
- よく使うGitコマンド: commit, checkout, merge, reset などの頻度
- やり直し率: reset/revert の割合
- よく切り替えるブランチ TOP5: checkout頻度の高いブランチ
コミットメッセージが Conventional Commits のフォーマットに従っている割合です。
fix:- バグ修正feat:- 新機能追加chore:- 雑務(ビルド設定など)docs:- ドキュメント更新refactor:- リファクタリング
など、コミットの種類をプレフィックスで明示する規約です。準拠率が高いほど、コミット履歴が構造化されていて読みやすくなります。
Gitの内部ログで、HEAD の移動履歴を記録しています。通常の git log ではコミット履歴しか見えませんが、reflogを見ると:
- ブランチ切り替え(checkout)
- コミットの取り消し(reset)
- リベース(rebase)
- その他のGit操作
など、あなたが実際に行った全ての操作が記録されています。このツールではreflogを分析することで、実際の作業習慣を可視化しています。
reflogに記録された全操作のうち、git reset や git revert などの「やり直し」系コマンドが占める割合です。
- 低い(5%未満): 慎重にコミットしている、または経験豊富
- 中程度(5〜15%): 適度に試行錯誤しながら開発
- 高い(15%以上): 実験的な開発スタイル、または複雑な作業が多い
「やり直し」が多いことは必ずしも悪いことではありません。試行錯誤しながら最適な実装を探る過程の表れとも言えます。
git reset コマンドを使った回数です。git reset は以下のような場面で使います:
- コミットを取り消して修正したい
- ステージング(
git add)を取り消したい - 誤ったコミットを履歴から削除したい
reset回数が多いと、「コミット後に考え直すことが多い」傾向を示します。
- Ruby: データ解析ロジック
- MeCab + natto gem: 日本語形態素解析
- Chart.js: グラフ描画
- ERB: HTMLテンプレート
.
├── analyze.rb # メインスクリプト
├── lib/
│ ├── commit_analyzer.rb # コミット履歴解析(日本語対応)
│ └── reflog_analyzer.rb # reflog解析
├── template.html.erb # HTMLレポートテンプレート
├── Gemfile # Ruby依存関係
├── output/ # 生成されたレポート(gitignore対象)
└── README.md
このツールは2025年10月10日のハッカソンで開発されました。
- テーマ: Claude Codeを活用した開発
- 開発時間: 約4時間
- 目的: Gitの内部データ構造を深掘りしつつ、実用的な可視化ツールを作成
MeCabによる形態素解析を使用して、日本語のコミットメッセージから意味のある単語を抽出します。単純な文字列分割では難しい「工程」「修正」「追加」といった単語を正確に抽出できます。
実行時に内部で使用しているGitコマンドを標準出力に表示します:
$ cd . && git log --author='f-yoshihara' --no-merges --format="%aI|%s"
$ cd . && git log --author='f-yoshihara' --no-merges --name-only --format="%H"
$ cd . && git log --author='f-yoshihara' --no-merges --numstat --format="%H"
これにより:
- 透明性の向上(何が実行されているか明確)
- デバッグの容易性
- 手動でのコマンド再現が可能
--no-merges オプションにより、自動生成されたマージコミットを除外し、実際の開発作業のみを分析します。
このプロジェクトでは以下の場面でClaude Codeを活用しました:
- 設計フェーズ: 複数の実装案の検討とメリット・デメリットの整理
- 実装フェーズ:
- Git解析ロジックの実装
- 日本語形態素解析の統合(MeCab + natto)
- Chart.jsのグラフ描画コード生成
- ERBテンプレートの作成
- リファクタリング: コードの構造化と機能追加
- デバッグ: パフォーマンス測定と最適化判断
MIT License
吉原(@f-yoshihara)
🤖 Developed with Claude Code