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

Codex use case

Mac アプリシェルの構築

Codex を使って、サイドバー、詳細ペイン、インスペクタ、コマンド、設定を備えた Mac ネイティブの SwiftUI アプリシェルを構築します。

Difficulty 上級
Time horizon 1時間

Codex と Build macOS Apps プラグインを使って、アプリのアイデアをデスクトップネイティブの NavigationSplitView アプリに仕立て、サイドバーの選択状態を安定して維持し、メニュー、ツールバー、キーボードショートカットを追加して、環境設定を専用の Settings シーンに移します。

最適な用途

  • 永続的なナビゲーション、メニュー、ツールバー、キーボードショートカットを備えた本格的なデスクトップシェルを必要とする、新しい Mac アプリのアイデアや iPad ファースト、Web ファーストのコンセプト
  • サイドバーの選択に応じて詳細ペインが切り替わり、インスペクタに補助的なメタデータやアクションが表示されるエディター、ライブラリ、管理、レビュー用のツール
  • 設定をメインコンテンツスタックに追加でプッシュ表示する画面ではなく、専用の環境設定ウィンドウに配置する Mac アプリ

Contents

    ← すべてのユースケース

    Mac アプリシェルの構築

    Codex を使って、サイドバー、詳細ペイン、インスペクタ、コマンド、設定を備えた Mac ネイティブの SwiftUI アプリシェルを構築します。

    Codex と Build macOS Apps プラグインを使って、アプリのアイデアをデスクトップネイティブの NavigationSplitView アプリに仕立て、サイドバーの選択状態を安定して維持し、メニュー、ツールバー、キーボードショートカットを追加して、環境設定を専用の Settings シーンに移します。

    上級
    1時間

    Codex と Build macOS Apps プラグインを使って、アプリのアイデアをデスクトップネイティブの NavigationSplitView アプリに仕立て、サイドバーの選択状態を安定して維持し、メニュー、ツールバー、キーボードショートカットを追加して、環境設定を専用の Settings シーンに移します。

    上級
    1時間

    最適な用途

    • 永続的なナビゲーション、メニュー、ツールバー、キーボードショートカットを備えた本格的なデスクトップシェルを必要とする、新しい Mac アプリのアイデアや iPad ファースト、Web ファーストのコンセプト
    • サイドバーの選択に応じて詳細ペインが切り替わり、インスペクタに補助的なメタデータやアクションが表示されるエディター、ライブラリ、管理、レビュー用のツール
    • 設定をメインコンテンツスタックに追加でプッシュ表示する画面ではなく、専用の環境設定ウィンドウに配置する Mac アプリ

    スキルとプラグイン

    • macOS SwiftUI パターン、ウィンドウ管理、AppKit 相互運用、ビルド/実行スキルを使って、サイドバー・詳細・インスペクタのレイアウトを作成し、メニューと設定を連携させ、シェルを起点とするループでアプリを検証します。
    Skill Why use it
    Build macOS Apps macOS SwiftUI パターン、ウィンドウ管理、AppKit 相互運用、ビルド/実行スキルを使って、サイドバー・詳細・インスペクタのレイアウトを作成し、メニューと設定を連携させ、シェルを起点とするループでアプリを検証します。

    開始用プロンプト

    Build macOS Apps プラグインを使って、[describe your app idea] を、サイドバー、詳細ペイン、インスペクタ、コマンド、設定を備えた Mac ネイティブの SwiftUI アプリシェルに仕立ててください。 制約: - 最初にシーンモデルを選択してください。メインウィンドウには `WindowGroup` を優先し、環境設定用に専用の `Settings` シーンを追加してください。 - メイン UI は `NavigationSplitView` を中心に構築し、明示的な選択状態、ネイティブの `.sidebar` リスト、詳細表示領域、補助的なメタデータやコントロール用の `inspector(isPresented:)` パネルを用意してください。 - サイドバーの行は軽量でネイティブにし、アイコン 1 つ、タイトル 1 行、短い補足行を多くても 1 行にしてください。プロダクト上の明確な理由がない限り、各行を大きなカスタムカードで囲まないでください。 - 重要なアクションは、シーンレベルの `commands`、`CommandMenu`、ツールバーボタン、キーボードショートカットから実行できるようにしてください。重要なアクションへの唯一の経路をジェスチャーの背後に隠さないでください。 - ウィンドウ単位の UI 状態には `@SceneStorage`、環境設定には `@AppStorage`、sidebar/detail の連携には親が所有する明示的な選択バインディングを使用してください。 - システムのマテリアル、セマンティックカラー、標準のサイドバー背景を優先してください。必要な場合に限り、詳細またはインスペクタのコンテンツカードにカスタムスタイルを追加してください。 - AppKit ブリッジは、SwiftUI で特定のデスクトップ動作を適切に表現できない場合に限り、最小限のものを使用してください。 - `script/build_and_run.sh` を作成または更新し、実用上必要な最小限の build/run チェックを実行して、使用したコマンドを正確に示してください。 成果物: - シーン構造と主要な sidebar/detail/inspector ビュー - メニュー、ツールバー、キーボードショートカットの接続 - 設定シーンと環境設定の状態モデル - 追加した AppKit ブリッジと、それが必要だった理由 - build/run の検証手順と、推奨するデスクトップ UX の追加対応
    Build macOS Apps プラグインを使って、[describe your app idea] を、サイドバー、詳細ペイン、インスペクタ、コマンド、設定を備えた Mac ネイティブの SwiftUI アプリシェルに仕立ててください。 制約: - 最初にシーンモデルを選択してください。メインウィンドウには `WindowGroup` を優先し、環境設定用に専用の `Settings` シーンを追加してください。 - メイン UI は `NavigationSplitView` を中心に構築し、明示的な選択状態、ネイティブの `.sidebar` リスト、詳細表示領域、補助的なメタデータやコントロール用の `inspector(isPresented:)` パネルを用意してください。 - サイドバーの行は軽量でネイティブにし、アイコン 1 つ、タイトル 1 行、短い補足行を多くても 1 行にしてください。プロダクト上の明確な理由がない限り、各行を大きなカスタムカードで囲まないでください。 - 重要なアクションは、シーンレベルの `commands`、`CommandMenu`、ツールバーボタン、キーボードショートカットから実行できるようにしてください。重要なアクションへの唯一の経路をジェスチャーの背後に隠さないでください。 - ウィンドウ単位の UI 状態には `@SceneStorage`、環境設定には `@AppStorage`、sidebar/detail の連携には親が所有する明示的な選択バインディングを使用してください。 - システムのマテリアル、セマンティックカラー、標準のサイドバー背景を優先してください。必要な場合に限り、詳細またはインスペクタのコンテンツカードにカスタムスタイルを追加してください。 - AppKit ブリッジは、SwiftUI で特定のデスクトップ動作を適切に表現できない場合に限り、最小限のものを使用してください。 - `script/build_and_run.sh` を作成または更新し、実用上必要な最小限の build/run チェックを実行して、使用したコマンドを正確に示してください。 成果物: - シーン構造と主要な sidebar/detail/inspector ビュー - メニュー、ツールバー、キーボードショートカットの接続 - 設定シーンと環境設定の状態モデル - 追加した AppKit ブリッジと、それが必要だった理由 - build/run の検証手順と、推奨するデスクトップ UX の追加対応

    Mac のシーンモデルから開始

    このユースケースでは、タッチ操作優先のスタックをそのまま引き延ばすのではなく、デスクトップ向けに設計されたと感じられる Mac アプリシェルへアプリのアイデアを発展させます。まず Codex にシーンモデルを選ばせ、次に、安定したサイドバー選択、詳細表示領域、補助的なコントロールやメタデータ用のインスペクタを中心にメインウィンドウを設計するよう依頼します。

    サイドバーで項目が選択され、詳細ペインにコンテンツが表示された Mac ネイティブのサイドバー/詳細アプリシェル

    Codex にこのデスクトップ構造を適用させ、ビルド/実行ループをシェル起点で進めたい場合は、Build macOS Apps プラグイン を使用します。同プラグインの macOS SwiftUI パターンスキルは、シーン設計、サイドバー、インスペクタ、コマンド、設定のほか、SwiftUI だけでは Mac 固有の動作を実現しきれない場合の小規模な AppKit ブリッジにも適しています。

    サイドバー、詳細ペイン、インスペクタの構築

    永続的なナビゲーションと安定した選択項目が適している機能では、NavigationSplitView を優先します。サイドバーの行はネイティブかつ軽量に保ち、サイドバーにはシステム標準の背景を使用し、カスタムカードや密度の高いメタデータは詳細ペインまたはインスペクタに配置します。

    struct LibraryRootView: View {
      @SceneStorage("LibraryRootView.selection") private var selection: Item.ID?
      @SceneStorage("LibraryRootView.showInspector") private var showInspector = true
    
      var body: some View {
        NavigationSplitView {
          List(selection: $selection) {
            ForEach(items) { item in
              Label(item.title, systemImage: item.systemImage)
                .tag(item.id)
            }
          }
          .listStyle(.sidebar)
          .navigationTitle("Library")
        } detail: {
          ItemDetailView(selection: selection)
            .inspector(isPresented: $showInspector) {
              ItemInspectorView(selection: selection)
            }
        }
      }
    }

    アプリで分割ビューの特殊なサイズ調整、低レベルのウィンドウ連携、レスポンダーチェーンの独自動作が必要な場合は、SwiftUI シェルをそのまま維持し、その不足を補うために必要な最小限の AppKit ブリッジだけを追加するよう Codex に依頼します。

    デスクトップ層へのコマンド、ツールバー、ショートカットの配置

    Mac ユーザーが重要なアクションをメニューバー、ツールバー、キーボードショートカットから見つけられるようにします。デスクトップユーザーがジェスチャーでしか使えないコントロールを探し回らずに済むよう、シーンレベルの commands、状況に応じたメニュー項目、ツールバーボタンのいずれからも同じアプリアクションを呼び出せるよう Codex に依頼します。

    @main
    struct LibraryApp: App {
      var body: some Scene {
        WindowGroup {
          LibraryRootView()
        }
        .commands {
          CommandMenu("Library") {
            Button("New Item") {
              // Create a new item.
            }
            .keyboardShortcut("n")
    
            Button("Toggle Inspector") {
              // Route this command to the focused window or selected item state.
            }
            .keyboardShortcut("i", modifiers: [.command, .option])
          }
        }
    
        Settings {
          LibrarySettingsView()
        }
      }
    }

    コマンドを現在の詳細項目に適用する必要がある場合は、FocusedValue、シーン状態、または明示的な選択状態を使用します。ショートカットが複数の場所で登録される場合は、アプリ内のコマンド経路を 1 つに明確化できるよう、管理主体を集約するよう Codex に依頼します。

    環境設定は Settings で管理

    アプリの環境設定には専用の Settings シーンを使用し、継続的に保持するユーザー設定は @AppStorage で永続化します。通常は、メインコンテンツウィンドウ内に設定画面をプッシュ表示するより、この方が Mac に適しています。

    struct LibrarySettingsView: View {
      @AppStorage("showItemMetadata") private var showItemMetadata = true
    
      var body: some View {
        TabView {
          Form {
            Toggle("Show Item Metadata", isOn: $showItemMetadata)
          }
          .tabItem { Label("General", systemImage: "gearshape") }
        }
        .frame(width: 460, height: 260)
        .scenePadding()
      }
    }

    アプリのコンセプトを提示してからシェルを検証

    このページは、プロンプトにアプリのコンセプト、主要なコンテンツオブジェクト、主要なアクションを明記し、そのワークフローを軸にデスクトップシェルを先に構築するよう Codex に依頼すると、最も効果的です。エージェントには小規模なビルド/実行チェックを行わせ、シーン構造、コマンドの接続、状態の所有関係、AppKit で補完した箇所を要約させます。

    実践的なヒント

    サイドバーをネイティブに維持

    サイドバーの各行は、アイコン 1 つ、タイトル 1 行、短い補足行を多くても 1 行にします。情報量の多いカード、カウンター、メタデータは詳細ペインかインスペクタに移し、サイドバーのリストを見渡しやすく保ちます。

    メインスタック内への設定の埋め込みを回避

    ユーザー設定がアプリ全体に影響する場合は、別の設定画面をプッシュ表示するのではなく、そのコントロールを Settings に配置して @AppStorage で永続化し、アプリメニューから開けるよう Codex に依頼します。

    デスクトップ固有の不足だけを AppKit で補完

    機能に開く/保存パネル、ファーストレスポンダーの制御、カスタム NSView が必要な場合は、ウィンドウ全体を AppKit で書き直すのではなく、SwiftUI が所有する状態モデルの境界部分だけを補う小規模な手段として AppKit を使用します。

    Tech stack

    Need

    分割ビューのアプリシェル

    Default options

    NavigationSplitView.sidebar リスト、inspector(isPresented:)

    Why it's needed

    永続的なサイドバー、詳細ペイン、インスペクタは、タッチ操作優先のプッシュナビゲーションよりも一般的な Mac アプリのレイアウトに適しています。

    Need

    デスクトップのアクションと設定

    Default options

    commandsCommandMenu、キーボードショートカット、Settings シーン

    Why it's needed

    メニューバーのアクション、ショートカット、専用の設定ウィンドウがあることで、デスクトップ向けに引き延ばした iOS 画面ではなく、本格的な Mac アプリらしくなります。

    Need

    状態の所有関係

    Default options

    @State@SceneStorage@AppStorage、明示的な選択バインディング

    Why it's needed

    Codex は、むやみにビューモデルを追加することなく、サイドバーの選択、インスペクタの表示状態、ユーザー設定を予測可能に管理できます。

    Need

    ネイティブ機能を使うためのエスケープハッチ

    Default options

    限定的な NSViewRepresentable または NSWindow ブリッジを介した AppKit

    Why it's needed

    SwiftUI では適切に表現できないプラットフォーム動作にのみ AppKit を使用し、シーンと選択状態については SwiftUI を信頼できる唯一の情報源として維持します。

    Need Default options Why it's needed
    分割ビューのアプリシェル NavigationSplitView .sidebar リスト、 inspector(isPresented:) 永続的なサイドバー、詳細ペイン、インスペクタは、タッチ操作優先のプッシュナビゲーションよりも一般的な Mac アプリのレイアウトに適しています。
    デスクトップのアクションと設定 commands CommandMenu 、キーボードショートカット、 Settings シーン メニューバーのアクション、ショートカット、専用の設定ウィンドウがあることで、デスクトップ向けに引き延ばした iOS 画面ではなく、本格的な Mac アプリらしくなります。
    状態の所有関係 @State @SceneStorage @AppStorage 、明示的な選択バインディング Codex は、むやみにビューモデルを追加することなく、サイドバーの選択、インスペクタの表示状態、ユーザー設定を予測可能に管理できます。
    ネイティブ機能を使うためのエスケープハッチ 限定的な NSViewRepresentable または NSWindow ブリッジを介した AppKit SwiftUI では適切に表現できないプラットフォーム動作にのみ AppKit を使用し、シーンと選択状態については SwiftUI を信頼できる唯一の情報源として維持します。

    関連するユースケース