For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
メインナビゲーション
Theme
Codex

Codex use case

SwiftUI 画面のリファクタリング

Codex を使って、動作やレイアウトを保ったまま、大きくなりすぎた SwiftUI 画面を小さなサブビューに分割します。

Difficulty Advanced
Time horizon 1h

Codex と Build iOS Apps プラグインを使って、長くなった SwiftUI ビューをセクションごとの専用ビューに分割します。副作用を body の外に移し、状態の管理と Observation による変更の追跡を安定させます。MV を基本とし、ビューモデルは必要な場合にだけ導入します。

Best for

  • 1 画面分の `body` にレイアウト、条件分岐、非同期処理、アクションの実装が混在し、レビューが難しくなった大規模な SwiftUI ファイル
  • 見た目と動作を変えずに内部実装を保守しやすくしたい既存の iOS 機能
  • `some View` を返す計算プロパティやオプショナルのビューモデル、状態の受け渡しがあり、サブビューの入力とコールバックを明示して実装を簡素化したい画面

Contents

    ← All use cases

    SwiftUI 画面のリファクタリング

    Codex を使って、動作やレイアウトを保ったまま、大きくなりすぎた SwiftUI 画面を小さなサブビューに分割します。

    Codex と Build iOS Apps プラグインを使って、長くなった SwiftUI ビューをセクションごとの専用ビューに分割します。副作用を body の外に移し、状態の管理と Observation による変更の追跡を安定させます。MV を基本とし、ビューモデルは必要な場合にだけ導入します。

    Advanced
    1h

    Codex と Build iOS Apps プラグインを使って、長くなった SwiftUI ビューをセクションごとの専用ビューに分割します。副作用を body の外に移し、状態の管理と Observation による変更の追跡を安定させます。MV を基本とし、ビューモデルは必要な場合にだけ導入します。

    Advanced
    1h

    Best for

    • 1 画面分の `body` にレイアウト、条件分岐、非同期処理、アクションの実装が混在し、レビューが難しくなった大規模な SwiftUI ファイル
    • 見た目と動作を変えずに内部実装を保守しやすくしたい既存の iOS 機能
    • `some View` を返す計算プロパティやオプショナルのビューモデル、状態の受け渡しがあり、サブビューの入力とコールバックを明示して実装を簡素化したい画面

    Skills & Plugins

    • Codex で大規模な SwiftUI 画面を編集するときは、SwiftUI ビューのリファクタリングスキルを使います。画面の動作とデータの流れを保ちながら、専用のサブビューを切り出し、Observation を使った実装を簡素化できます。
    Skill Why use it
    Build iOS Apps Codex で大規模な SwiftUI 画面を編集するときは、SwiftUI ビューのリファクタリングスキルを使います。画面の動作とデータの流れを保ちながら、専用のサブビューを切り出し、Observation を使った実装を簡素化できます。

    Starter prompt

    Build iOS Apps プラグインに含まれる SwiftUI ビューのリファクタリングスキルを使って、画面の動作や見た目を変えずに [NameOfScreen.swift] の実装を整理してください。 制約 - 動作、レイアウト、ナビゲーション、ビジネスロジックを維持してください。ただし、バグが見つかった場合は別途指摘してください。 - MVVM ではなく MV を基本としてください。新しいビューモデルを導入する前に、`@State`、`@Environment`、`@Query`、`.task`、`.task(id:)`、`onChange` を優先して使い、ビューモデルはこの機能に明らかに必要な場合だけ残してください。 - ビュー内の定義を、格納プロパティ、計算で求める状態、`init`、`body`、ビュー用のヘルパー、ヘルパーメソッドの順に並べ、上から追いやすくしてください。 - 役割のまとまりごとにセクションを専用の `View` 型に切り出し、必要最小限の入力、`@Binding`、コールバックを明示してください。巨大な `body` を、`some View` を返す大きな計算プロパティの集まりに置き換えないでください。 - 複雑なボタンアクションや副作用は `body` から小さなメソッドに移し、ビジネスロジックはサービスやモデルに移してください。 - ルートのビュー階層を安定させてください。一部のセクションの表示を条件で切り替えたり、モディファイアを使ったりすれば済む場合は、最上位の `if/else` 分岐で画面全体を切り替えないでください。 - リファクタリングの際には、Observation の対象となるモデルの所有関係も整理してください。iOS 17 以降では、ルートの `@Observable` モデルを `@State` で保持してください。UI がそのような状態を必要とする場合を除き、ビューモデルをオプショナルにしたり、初期化を遅らせたりしないでください。 - サブビューを切り出すたびに、画面の動作が変わっていないことを確認できる最小限のビルドまたはテストを実行してください。 提出物 - リファクタリング後の画面と、切り出したすべてのサブビュー - サブビューをどこで分けたか、データがどう流れるかについての簡潔な説明 - 意図的にビューモデルを残した箇所とその理由 - 動作が変わっていないことを確かめるために実施した検証の内容
    Build iOS Apps プラグインに含まれる SwiftUI ビューのリファクタリングスキルを使って、画面の動作や見た目を変えずに [NameOfScreen.swift] の実装を整理してください。 制約 - 動作、レイアウト、ナビゲーション、ビジネスロジックを維持してください。ただし、バグが見つかった場合は別途指摘してください。 - MVVM ではなく MV を基本としてください。新しいビューモデルを導入する前に、`@State`、`@Environment`、`@Query`、`.task`、`.task(id:)`、`onChange` を優先して使い、ビューモデルはこの機能に明らかに必要な場合だけ残してください。 - ビュー内の定義を、格納プロパティ、計算で求める状態、`init`、`body`、ビュー用のヘルパー、ヘルパーメソッドの順に並べ、上から追いやすくしてください。 - 役割のまとまりごとにセクションを専用の `View` 型に切り出し、必要最小限の入力、`@Binding`、コールバックを明示してください。巨大な `body` を、`some View` を返す大きな計算プロパティの集まりに置き換えないでください。 - 複雑なボタンアクションや副作用は `body` から小さなメソッドに移し、ビジネスロジックはサービスやモデルに移してください。 - ルートのビュー階層を安定させてください。一部のセクションの表示を条件で切り替えたり、モディファイアを使ったりすれば済む場合は、最上位の `if/else` 分岐で画面全体を切り替えないでください。 - リファクタリングの際には、Observation の対象となるモデルの所有関係も整理してください。iOS 17 以降では、ルートの `@Observable` モデルを `@State` で保持してください。UI がそのような状態を必要とする場合を除き、ビューモデルをオプショナルにしたり、初期化を遅らせたりしないでください。 - サブビューを切り出すたびに、画面の動作が変わっていないことを確認できる最小限のビルドまたはテストを実行してください。 提出物 - リファクタリング後の画面と、切り出したすべてのサブビュー - サブビューをどこで分けたか、データがどう流れるかについての簡潔な説明 - 意図的にビューモデルを残した箇所とその理由 - 動作が変わっていないことを確かめるために実施した検証の内容

    挙動を保ったまま行う単一画面のリファクタリング

    SwiftUI で画面全体の実装が 1 つのファイルに膨らみ、少し手を加えるだけでも影響が心配になるときに使える方法です。機能の再設計や新しいアーキテクチャの導入は目的ではありません。画面の挙動とレイアウトを維持しながら、データの流れが明確な小さなサブビューに分割するよう Codex に依頼します。こうしておくと、次の変更をレビューしやすくなります。

    このような整理には、Build iOS Apps プラグインを使います。このプラグインの SwiftUI ビュー向けリファクタリングスキルには、明確な設計方針があります。原則として MVVM よりも MV を優先し、ビジネスロジックはサービスやモデルに置きます。まずはビューのローカルな状態と環境から取得できる依存関係を使い、その機能に明らかに必要な場合に限ってビューモデルを残します。

    Codex への依頼内容

    まず対象の画面ファイルを 1 つ指定し、挙動を維持しながら構造を改善するよう Codex に依頼します。プロンプトには、次のリファクタリング方針を明記するとよいでしょう。

    • 環境から取得する依存関係、格納プロパティ、ビュー以外の状態を表す計算プロパティ、init、body、ビューを組み立てるヘルパー、ヘルパーメソッドの順に並べ、ファイルを上から読み進めやすくします。
    • 意味のあるまとまりごとに専用の View 型として切り出し、必要最小限の入力値、@Binding、コールバックを明示します。
    • some View を返す計算プロパティは必要な箇所に限り、短く保ちます。大きな画面を細切れにして、非公開の計算プロパティをいくつも並べる構成は避けます。
    • ボタンを押したときの複雑な処理や副作用は body の外に出し、ビジネスロジックはサービスやモデルに移します。
    • ルートのビュー階層は安定させます。最上位の if/else 分岐で画面全体を切り替えるよりも、セクションやモディファイアの中で必要な部分だけを条件分岐させます。
    • リファクタリングに合わせて、Observation を使うモデルの所有関係に問題があれば修正します。iOS 17 以降では、ルートの @Observable モデルを所有するビューが、そのモデルを @State に保持します。従来の監視用プロパティラッパーは、デプロイ対象の OS バージョンで必要な場合に限って使います。

    切り出しごとの小さな検証

    挙動を維持するリファクタリングでは、実際に挙動が保たれていることを確かめます。ひとまとまりのビューを切り出すたびに、ビルド、プレビュー、テスト、シミュレータでの動作確認のうち、その画面を検証できる最小限のものを実行するよう Codex に依頼します。そのうえで、構造上の変更点と、意図して維持した点をまとめてもらいます。

    実践のヒント

    アーキテクチャの検討に先立つ画面分割

    画面の実装が大きすぎる場合は、新しい抽象化レイヤーを導入する前に、セクションごとにビューを切り出すよう Codex に依頼します。ビュー階層がコンパクトになり、構造が明確になるだけで、ビューモデルを追加する必要がなくなることもよくあります。

    各サブビューに渡すインターフェースの最小化

    すべての子ビューに親のモデル全体を渡すのは避け、let で受け取る値、@Binding、用途を 1 つに絞ったコールバックを優先します。切り出したセクションを個別にプレビューしやすくなり、意図せず画面全体に再び依存することも防ぎやすくなります。

    意図して維持した点の明示

    リファクタリングを安全に進めるには、ビジネスルール、画面遷移の挙動、データの永続化、分析用データが表す意味、ユーザーに見えるレイアウトなど、変更しなかった点を Codex に明示してもらうと効果的です。レビューにかかる時間を大幅に短縮できます。

    Tech stack

    Need

    UI アーキテクチャ

    Default options

    MV を基本に、@State、@Environment、用途ごとの小さな View 型で役割を分ける SwiftUI の構成

    Why it's needed

    大規模な画面では、ビューモデルの層を追加する前に Codex でビュー階層と状態の流れを整理すると、多くの場合、保守しやすくなります。

    Need

    リファクタリングの進め方

    Why it's needed

    プラグインに含まれる SwiftUI ビューのリファクタリングスキルは、画面の動作を保ちながらサブビューを切り出す方法、Observation の扱い方、副作用の整理方法を Codex に具体的に示します。

    Need

    検証

    Default options

    xcodebuild、プレビュー、対象を絞った UI の確認

    Why it's needed

    ワンショットで画面全体を書き直す場合に比べ、サブビューを切り出すたびにビルドやシミュレータで変更箇所を確認する方が、画面の動作を保てているか判断しやすくなります。

    Need Default options Why it's needed
    UI アーキテクチャ MV を基本に、 @State 、 @Environment 、用途ごとの小さな View 型で役割を分ける SwiftUI の構成 大規模な画面では、ビューモデルの層を追加する前に Codex でビュー階層と状態の流れを整理すると、多くの場合、保守しやすくなります。
    リファクタリングの進め方 Build iOS Apps プラグイン プラグインに含まれる SwiftUI ビューのリファクタリングスキルは、画面の動作を保ちながらサブビューを切り出す方法、Observation の扱い方、副作用の整理方法を Codex に具体的に示します。
    検証 xcodebuild 、プレビュー、対象を絞った UI の確認 ワンショットで画面全体を書き直す場合に比べ、サブビューを切り出すたびにビルドやシミュレータで変更箇所を確認する方が、画面の動作を保てているか判断しやすくなります。

    Related use cases