Skip to content

everyleaf/hc2025_yoshihara

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Git Commit Habit Analyzer

Gitリポジトリのコミット履歴とreflogを分析して、開発習慣を可視化するツールです。

概要

このツールは、Gitリポジトリのコミット履歴とreflogを解析し、以下のような開発習慣をグラフ化したHTMLレポートを生成します:

  • 時間帯別・曜日別のコミット頻度 - あなたは朝型?夜型?
  • コミットメッセージ分析 - よく使う単語、Conventional Commits準拠率
  • 作業習慣(reflog分析) - よく使うGitコマンド、やり直し率

デモ

https://github.com/rails/rails の解析結果(抜粋)です

image image

必要要件

  • 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.html

別のリポジトリを分析

ruby analyze.rb /path/to/repository

特定のユーザーを分析

ruby 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 の分布と平均変更行数

作業習慣分析(reflog)

  • よく使うGitコマンド: commit, checkout, merge, reset などの頻度
  • やり直し率: reset/revert の割合
  • よく切り替えるブランチ TOP5: checkout頻度の高いブランチ

用語解説

Conventional Commits準拠率

コミットメッセージが Conventional Commits のフォーマットに従っている割合です。

  • fix: - バグ修正
  • feat: - 新機能追加
  • chore: - 雑務(ビルド設定など)
  • docs: - ドキュメント更新
  • refactor: - リファクタリング

など、コミットの種類をプレフィックスで明示する規約です。準拠率が高いほど、コミット履歴が構造化されていて読みやすくなります。

reflog(リフログ)

Gitの内部ログで、HEAD の移動履歴を記録しています。通常の git log ではコミット履歴しか見えませんが、reflogを見ると:

  • ブランチ切り替え(checkout)
  • コミットの取り消し(reset)
  • リベース(rebase)
  • その他のGit操作

など、あなたが実際に行った全ての操作が記録されています。このツールではreflogを分析することで、実際の作業習慣を可視化しています。

やり直し率

reflogに記録された全操作のうち、git resetgit revert などの「やり直し」系コマンドが占める割合です。

  • 低い(5%未満): 慎重にコミットしている、または経験豊富
  • 中程度(5〜15%): 適度に試行錯誤しながら開発
  • 高い(15%以上): 実験的な開発スタイル、または複雑な作業が多い

「やり直し」が多いことは必ずしも悪いことではありません。試行錯誤しながら最適な実装を探る過程の表れとも言えます。

reset回数

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活用ポイント

このプロジェクトでは以下の場面でClaude Codeを活用しました:

  1. 設計フェーズ: 複数の実装案の検討とメリット・デメリットの整理
  2. 実装フェーズ:
    • Git解析ロジックの実装
    • 日本語形態素解析の統合(MeCab + natto)
    • Chart.jsのグラフ描画コード生成
    • ERBテンプレートの作成
  3. リファクタリング: コードの構造化と機能追加
  4. デバッグ: パフォーマンス測定と最適化判断

ライセンス

MIT License

作者

吉原(@f-yoshihara

🤖 Developed with Claude Code

About

ハッカソン用のリポジトリ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published