diff --git a/CLAUDE.md b/CLAUDE.md index a82ae12..43f233c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -85,6 +85,37 @@ ros run --eval "(push #p\"./\" asdf:*central-registry*)" \ ## 開発ガイドライン +### ブランチ運用とワークフロー + +#### mainブランチ保護 +- **mainブランチは保護されており、直接コミットできません** +- すべての作業は専用のfeatureブランチで行う必要があります +- 変更はPull Request経由でのみmainにマージ可能です + +#### 推奨ワークフロー +```bash +# 1. mainから最新を取得 +git checkout main && git pull origin main + +# 2. 作業用ブランチを作成(命名規則例) +git checkout -b feature/新機能名 +git checkout -b fix/バグ修正名 +git checkout -b docs/ドキュメント更新名 +git checkout -b refactor/リファクタリング内容 + +# 3. 作業・コミット・プッシュ +git add . && git commit -m "適切なコミットメッセージ" +git push -u origin ブランチ名 + +# 4. GitHub でPull Request作成 +gh pr create --title "タイトル" --body "説明" +``` + +#### 段階的開発の原則 +- **小さな変更を積み重ねる**: 大きな変更は複数のPRに分割 +- **各PR毎にテスト実行**: `make test`で既存機能への影響を確認 +- **バイナリビルド確認**: `ros build visp.ros`で実行可能性を検証 + ### 関数名の重複チェック 新しい関数を定義する際は、既存の関数名との重複を避けるため以下を確認してください: @@ -99,51 +130,8 @@ Common Lispでは同じパッケージ内で同名関数を再定義すると警 ### 高優先度 -#### 出力ファイル名生成関数の引数統一 ✅ **完了** -出力ファイル名生成関数の引数を統一し、APIの一貫性を向上: - -**実施内容:** -- `generate-gif-output-filename`の引数を`(input &optional opts)`から`(opts)`に変更 -- `main.lisp`のGIFモードでの呼び出し方法を修正 -- 関連するテストケースを更新 -- パッケージエクスポートの追加(`visp-options-output`, `safe-parse-float`) - -**結果:** -すべての出力ファイル名生成関数が`opts`を第一引数として受け取るAPIに統一され、 -テストスイートでの検証とバイナリビルドでの動作確認も完了。 - -#### GIFモードのオプション制限強化 ✅ **完了** -GIFモードで`--input`オプションとの組み合わせエラーが適切に処理されていない問題を修正: - -**問題:** -- `visp --input test.mp4 --gif --dry-run`でオプション解析が競合し、入力ファイルが空文字列になる -- GIFモードは`visp --gif `の構文のみを受け付けるべきだが、`--input`オプションが禁止リストに含まれていない - -**解決策:** -1. `validate-gif-mode`関数の禁止オプションリストに`visp-options-input`を追加 -2. GIFモードでは`--gif [--output ] [--dry-run]`の構文のみを許可 -3. 不正な構文でのエラーメッセージを改善 - -**影響範囲:** -- `src/validate.lisp`: GIFモードバリデーションの強化 -- `t/test-validate.lisp`: 関連テストケースの追加 - -#### 関数名重複問題の解決 -`util.lisp`と`validate.lisp`で類似のパース関数が重複している問題を統合する: - -**問題:** -- `util.lisp:3-10`: `parse-float`関数 -- `util.lisp:12-18`: `safe-parse-float`関数(parse-floatのラッパー) -- `validate.lisp:284-288`: `parse-speed-float`関数(独自実装) -- `video.lisp:28`: `safe-parse-float`を参照しているが定義場所が曖昧 - -**解決策:** -1. 共通のパース関数を`util.lisp`に統合 -2. エラーハンドリングを統一 -3. 全ての呼び出し箇所を統一された関数に修正 - #### ffmpeg実行エラーハンドリング強化 -`ffmpeg.lisp:14`の`run-cmd`関数でエラーハンドリングが不十分: +`ffmpeg.lisp:3`の`run-cmd`関数でエラーハンドリングが不十分: **現在の問題:** - ffmpeg実行失敗時のエラー情報が不十分 @@ -175,7 +163,7 @@ visp --input video.mp4 --quality low # 高圧縮(ファイルサイズ優 ``` #### コード品質改善 -- `validate.lisp`の`validate-merge-files`関数(110行)を小さな関数に分割 +- `validate.lisp`の`validate-merge-files`関数(41行目、約70行)を小さな関数に分割 - マジックナンバーの定数化(`ffmpeg.lisp:20`のGIF fps計算など) - エラーメッセージの日英統一 - 関数レベルdocstringの追加 @@ -185,7 +173,7 @@ visp --input video.mp4 --quality low # 高圧縮(ファイルサイズ優 - エラーケースの異常系テスト - バッチ処理でのファイル競合テスト -#### テストコード全体の改修とエラーケーステストの追加 +#### エラーケーステストの改善 現在のテストスイートは成功ケースのみをカバーしており、`(uiop:quit 1)`を呼ぶエラーケースがテストできない問題がある: **現在の問題:** @@ -193,17 +181,13 @@ visp --input video.mp4 --quality low # 高圧縮(ファイルサイズ優 - `(uiop:quit 1)`によるプロセス終了がテストフレームワークと非互換 - テストカバレッジが不十分で潜在的バグの発見が困難 -**改善策:** -1. バリデーション関数のアーキテクチャを例外ベースに変更 -2. カスタム例外クラス(`visp-validation-error`)の導入 -3. main.lispでの例外ハンドリングと適切なプロセス終了 -4. 全validate系関数のエラーケーステストを追加 -5. テストカバレッジの向上とリグレッション防止の強化 +**改善アプローチ(段階的実装推奨):** +1. 1つの関数から例外ベースに段階的変更 +2. 各段階でのバイナリビルド動作確認 +3. エラーケーステストの段階的追加 +4. リグレッション防止の強化 -**影響範囲:** -- `src/validate.lisp`: 全validation関数の例外ベース化 -- `src/main.lisp`: 例外ハンドリングロジック追加 -- `t/test-validate.lisp`: 包括的なエラーケーステスト追加 +**注意:** 大規模な一括変更は避け、小さな改善を積み重ねる方式を採用する。 ### 低優先度 @@ -254,6 +238,7 @@ visp --input video.mp4 --filters "blur=3,sharpen=1,fade=in:0:30" - 変数名の統一(キャメルケース vs ケバブケース) #### 国際化対応 + - 日本語コメントの英語化 - エラーメッセージの多言語対応 -- ヘルプメッセージの国際化 \ No newline at end of file +- ヘルプメッセージの国際化