Skip to content

[codex] app初期化責務の分割(factory/bootstrap/version/platform)#43

Merged
6uclz1 merged 4 commits intomainfrom
codex/reduce-validation-duplication
Feb 22, 2026
Merged

[codex] app初期化責務の分割(factory/bootstrap/version/platform)#43
6uclz1 merged 4 commits intomainfrom
codex/reduce-validation-duplication

Conversation

@6uclz1
Copy link
Owner

@6uclz1 6uclz1 commented Feb 22, 2026

背景とユーザー影響

今回の変更前は、CLI起動の中心である app.py に OS 判定、--version 処理、設定ロードとエラーハンドリング、logging 初期化、runtime 注入、サブコマンド登録が集中していました。機能追加時に単一ファイルへ責務が雪だるま式に増えるため、変更の影響範囲が読みにくくなり、レビュー時に副作用を追跡しづらい状態でした。結果として、新規機能や不具合修正の開発速度と安全性の両方に悪影響が出るリスクがありました。

根本原因

CLI のエントリポイントと初期化処理の境界が曖昧で、アプリ構築・ブートストラップ・プラットフォーム判定・バージョン表示が app.py に同居していたことが根本原因です。責務分離が不足していたため、関心事ごとのテスト設計もしづらく、拡張時に結合度が高まる構造になっていました。

対応内容

app.py の責務を分割し、機能ごとのモジュールへ移しました。

  • src/ableton_cli/app_factory.py
    • create_app()register_commands(app) を配置
    • Typer callback から build_runtime_context(...) を呼び出す構成へ整理
  • src/ableton_cli/bootstrap.py
    • 設定ロード、OS ごとのパス解決、logging 初期化、RuntimeContext 構築を集約
  • src/ableton_cli/platform_detection.py
    • OS 判定と PlatformPaths 構築処理を移動
  • src/ableton_cli/version.py
    • version callback を分離
  • src/ableton_cli/app.py
    • 互換的な薄いエントリポイント(create_app の再エクスポート)に縮小
  • src/ableton_cli/cli.py
    • import 先を app_factory に更新

テストと検証

分割に合わせてテストを追加・更新し、振る舞い維持を確認しました。

  • 追加
    • tests/test_bootstrap.py
    • tests/test_platform_detection.py
    • tests/test_version.py
  • 更新
    • tests/test_app_factory.py
    • tests/test_cli_json_output.py

実行したチェック:

  • uv run python -m ableton_cli.dev_checks
    • 内部で ruff check, ruff format --check, pytest を実行
  • 追加確認として uv run pytest を再実行

上記はすべて成功しています(全 361 テスト通過)。

補足

挙動のフォールバック経路や後方互換用の分岐は追加していません。責務分離のみを目的に、既存の CLI 仕様は維持したまま内部構造を整理しています。

@6uclz1 6uclz1 changed the title codex/reduce validation duplication [codex] app初期化責務の分割(factory/bootstrap/version/platform) Feb 22, 2026
@6uclz1 6uclz1 marked this pull request as ready for review February 22, 2026 17:29
@6uclz1 6uclz1 merged commit d0e297e into main Feb 22, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant