auto-commit 2.0.0

AI-powered Git commit message generator - supports OpenAI, DeepSeek, and Gemini
Documentation
# 実装ログ: DeepSeek API統合とモジュール分割

日付: 2025-01-24
実装者: Claude Code

## 実装概要

auto-commitプロジェクトのOpenAI APIからDeepSeek APIへの移行と、モノリシックなmain.rsのモジュール分割を実施。

## 実装方針

- TDD(テスト駆動開発)アプローチ
- t-wada流のRed-Green-Refactorサイクル
- 小さなコミットで段階的に実装

## 実装済みモジュール

### 1. 環境変数読み込みモジュール (src/config/mod.rs)

**機能:**
- 環境変数からDEEPSEEK_API_KEYを読み込み
- .envファイルからの読み込みにも対応
- exportプレフィックスの有無に対応

**テスト:**
- 環境変数からの読み込みテスト
- .envファイルからの読み込みテスト
- キーが存在しない場合のエラーハンドリング

### 2. DeepSeek APIクライアント (src/api/mod.rs)

**機能:**
- DeepSeek Chat APIとの通信
- Git diffからコミットメッセージを生成
- 日本語プロンプトでconventional commit形式を生成

**テスト:**
- 正常系: APIレスポンスからタイトルと説明を抽出
- 異常系: APIエラーのハンドリング
- mockitoを使用したAPIモック

### 3. Git操作モジュール (src/git/mod.rs)

**機能:**
- ステージング済み変更の確認
- ステージング差分の取得
- コミットの作成
- 現在のブランチ名取得

**テスト:**
- tempfileを使用した一時的なGitリポジトリでのテスト
- serial_testで順次実行を保証

## 技術的な決定事項

### 依存関係の変更
- `async-openai`を削除
- `reqwest`(rustls-tls)を追加
- `dotenv`で.envファイル読み込み
- `anyhow``thiserror`でエラーハンドリング

### テスト戦略
- `mockito`でHTTPリクエストをモック
- `tempfile`で一時的なGitリポジトリを作成
- `serial_test`でテストの並列実行による問題を回避

## 実装完了

すべてのモジュールの実装とテストが完了しました。

### 最終的な構成
```
src/
├── main.rs         # 統合されたメインエントリーポイント
├── api/           # DeepSeek API連携
├── cli/           # CLI引数解析(--formatオプション追加)
├── config/        # 環境変数とenvファイル読み込み
├── formatter/     # カスタムフォーマット対応
├── git/           # Git操作
└── lib.rs         # モジュール公開

tests: 27個すべて成功
```

### 主な成果

1. **OpenAIからDeepSeekへの完全移行**
   - reqwestを使用したシンプルな実装
   - 日本語プロンプトで的確なコミットメッセージ生成

2. **モジュール化による保守性向上**
   - 単一ファイル(275行)から6モジュールへ分割
   - 各モジュールに対応するテスト

3. **新機能の追加**
   - `--format`オプションでカスタムフォーマット対応
   - プレースホルダー: {title}, {description}, {prefix}, {emoji}, {scope}
   - src/.envファイルからの設定読み込み

## 学習ポイント

- Rustでのモジュール分割パターン
- TDDによる段階的な実装
- 非同期テストでのmockitoの使い方
- Gitコマンドの自動テスト手法

## install.shの魔改造 (2025-01-24 追加)

### 概要
元のinstall.shはバイナリをダウンロードするだけの簡易版でしたが、GitHubからソースコードをクローンし、ローカルでビルドする完全版に改造しました。

### 新機能

1. **自動Rust環境構築**
   - Rustがインストールされていない場合は自動でrustupをインストール
   - cargo環境を自動で設定

2. **ソースからのビルド**
   - GitHubリポジトリをクローン
   - `cargo build --release`でローカルビルド
   - 最適化されたバイナリを生成

3. **エラーハンドリング強化**
   - 色付きのエラー・成功メッセージ
   - 各ステップでの詳細な進捗表示
   - 失敗時の適切なクリーンアップ

4. **シェル環境対応**
   - bash, zsh, fishに対応
   - PATHへの自動追加
   - 既存のPATH設定を検出

### TDD実践
- シェルスクリプト用のテストフレームワークを作成
- 関数単位でのユニットテスト
- モック関数を使用した統合テスト