◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-04-26中級

Rork Max の SwiftUI 生成は AI 機能とどう連動しているか — 出力品質を左右する 7 つのプロンプト設計

Rork Max の SwiftUI 生成と AI 機能は別々の機能ではなく、同じ AI レイヤーの上で動いています。同じ要件を伝えても出力品質が変わる理由と、私が現場で使っている 7 つのプロンプト設計を実例付きで紹介します。

Rork Max236SwiftUI66AI32プロンプト設計5ネイティブアプリ20アプリ開発76

「Rork Max の SwiftUI 生成機能と AI 機能、どっちを使えばいいんですか?」と聞かれることが増えてきました。答えは「両方を意識したプロンプトを書くと出力品質が変わります」です。この 2 つは別々のメニューに見えても、内部では同じ AI レイヤーの上で動いていて、書き方ひとつで生成される SwiftUI コードの完成度がはっきり変わってきます。私自身、同じ要件を 3 通りの伝え方で投げてみて、レビュー対象になるレベルから「ほぼそのまま本番投入できるレベル」まで差が出た経験があり、その時の知見をまとめておきます。

SwiftUI 生成と AI 機能は分離されていない

Rork Max のドキュメント上は「SwiftUI ネイティブアプリ生成」と「AI capabilities」が並列で説明されていることが多いのですが、実装側から見ると両者は同じ AI モデルが担当しています。SwiftUI コードを吐き出す時にも、画面遷移を提案する時にも、State の構造を決める時にも、内部的には同じ推論パイプラインを通っています。

この前提を理解しておくと、「画面のラフを伝えるとそれっぽい SwiftUI が出てくる」という単純な使い方から一歩進めて、「AI に何を判断させて、何を判断させないか」を意識したプロンプトが書けるようになります。私の体感では、これを意識し始めてから手戻りが半分以下になりました。

AI が「読む」プロンプトと「書く」コードの間にある変換

Rork Max にプロンプトを送ると、AI レイヤーは大まかに 3 段階の処理をしています。1 段目はプロンプトの解釈(要件抽出)、2 段目は内部表現の組み立て(画面構造・State・データフローの設計)、3 段目が SwiftUI コードへの落とし込みです。

出力品質が悪く感じるケースの多くは、2 段目で曖昧な解釈が入って、3 段目で「無難だが浅い」コードに着地してしまうパターンです。逆に言えば、2 段目で AI が迷わなくて済むようなプロンプトを設計できれば、3 段目の SwiftUI コードはかなり安定します。

出力品質を変える 7 つのプロンプト設計

1. 画面の状態を最初に列挙する

「ログイン画面が欲しい」だけだと AI は標準的な実装に流れます。「未入力/入力中/送信中/エラー/ロック中の 5 状態を持つログイン画面」と書くと、@State や enum を使った State パターンに自然に誘導できます。

2. データソースを名指しする

「API から取得」ではなく「AuthService.login(email:password:) async throws -> Session を呼ぶ」と書くと、生成される SwiftUI 側もこの関数シグネチャに合わせた await 呼び出しを書いてきます。型を先に決めると AI は迷いません。

3. 失敗パターンを 1 つだけ具体的に伝える

「エラー処理を入れて」だけだと try-catch の雛形しか出ません。「ネットワーク不通時にはバナーで再試行ボタンを出す」と 1 例だけ具体化すると、Result 型や do-catch を含む実用的なエラーハンドリングが返ってきます。

4. 描画パフォーマンスの制約を伝える

「100 件のリストでスクロールが滑らかに」と書くだけで、LazyVStack と id: の使い方、Equatable 適合の有無まで AI が考慮してくれます。これは内部の AI が iOS 開発の文脈知識を持っているからです。

5. 既存コードの一部を貼り付ける

ゼロから書かせるのではなく、既存の Model や ViewModel を 10〜20 行ほど貼り付けて「これに合わせて Detail 画面を生成」と頼むと、命名規則やプロパティアクセスのスタイルが揃います。プロジェクト全体の一貫性を保ちたい時に効きます。

6. アクセシビリティ要件を最初に書く

VoiceOver 対応を後付けで頼むと差分が大きくなりがちです。最初のプロンプトに「VoiceOver で操作可能、Dynamic Type 対応」と一行入れておくと、.accessibilityLabel や .dynamicTypeSize の付与が自動で組み込まれます。

7. 出力コードのスタイルを宣言する

「SwiftUI のみで書く・UIKit 経由は使わない」「@Observable ではなく ObservableObject を使う」のような方針を最初に宣言しておくと、生成途中でスタイルがブレません。これは AI が「最新ベストプラクティスに引っ張られる」傾向への対策でもあります。

同じ機能でも書き方で変わる実例

タスク追加画面を、雑なプロンプトと設計済みプロンプトの 2 通りで生成した例を比較します。まず雑なプロンプト「タスクを追加する画面を作って」では、おおむね次のようなコードが出てきます。

// 雑なプロンプトでの出力例(簡略化)
struct AddTaskView: View {
    @State private var title: String = ""
 
    var body: some View {
        Form {
            TextField("タイトル", text: $title)
            Button("追加") {
                // TODO: save
            }
        }
    }
}
// 期待出力: フォームは表示されるが、保存処理・バリデーション・閉じる処理が空

次に設計済みプロンプトを使います。「タイトル必須・1〜80 文字、保存中はボタンを無効化、保存成功で dismiss、TaskRepository.add(_:) async throws を呼ぶ」と要件を明示すると、次のようなコードが返ってきます。

// 設計済みプロンプトでの出力例
struct AddTaskView: View {
    @Environment(\.dismiss) private var dismiss
    @State private var title: String = ""
    @State private var isSaving: Bool = false
    @State private var errorMessage: String?
 
    private var isValid: Bool {
        let trimmed = title.trimmingCharacters(in: .whitespaces)
        return (1...80).contains(trimmed.count)
    }
 
    let repository: TaskRepository
 
    var body: some View {
        Form {
            Section {
                TextField("タイトル", text: $title)
                    .disabled(isSaving)
            } footer: {
                if let errorMessage {
                    Text(errorMessage).foregroundStyle(.red)
                }
            }
 
            Button {
                Task { await save() }
            } label: {
                if isSaving { ProgressView() } else { Text("追加") }
            }
            .disabled(!isValid || isSaving)
        }
    }
 
    private func save() async {
        isSaving = true
        defer { isSaving = false }
        do {
            try await repository.add(title.trimmingCharacters(in: .whitespaces))
            dismiss()
        } catch {
            errorMessage = "保存に失敗しました。もう一度お試しください。"
        }
    }
}
// 期待出力: バリデーション・保存中UI・エラー表示・dismissまで揃ったレビュー対象コード

差分は数十行ですが、レビュー前にやる手直しの量が大きく違います。同じ AI が同じモデルで動いているのに、入力情報の密度で出力が変わる典型例です。

私が現場で守っている運用ルール

Rork Max を 30 本以上のアプリ試作で使ってきて、最終的に落ち着いた運用ルールをいくつか挙げておきます。

ひとつ目は「画面ごとに 1 度の生成で完成させようとしない」こと。雛形生成 → 必要箇所の差分指示 → リファクタリングという 3 段階に分けたほうが、トータルの試行回数は少なく済みます。最初から完璧を狙うほど、AI は無難に逃げます。

ふたつ目は「プロジェクト全体の前提を毎回プロンプトの先頭に貼る」こと。状態管理ライブラリ・命名規則・最低 iOS バージョンなどを定型化しておくと、複数の画面を生成しても全体のトーンが揃います。これは Rork Max SwiftUI 機能の総合ガイド でも触れられている考え方ですが、実際にやってみると効果が大きい工夫です。

みっつ目は「AI の判断結果を必ずログに残す」こと。生成されたコードと一緒に「なぜその実装にしたか」を AI に説明させておくと、後から読み返した時に意図を追えます。これは Rork Max の AI コスト最適化ガイド で書いたコスト管理とも繋がる話で、ログ残しは無駄なリトライを減らす副次効果もあります。

AI に丸投げする前に「自分が読めるコード」を増やしておくと、生成結果の良し悪しが自分で判断できるようになり、結果的にプロンプトの精度も上がります。


ここまで紹介した内容は、すぐに試せるものばかりです。次に Rork Max を開く時、まずは「画面の状態を最初に列挙する」だけでも入れてみてください。同じ機能の生成でも、出てくるコードの粒度が変わるはずです。そこから 7 つの設計を 1 つずつ自分のスタイルに馴染ませていくと、Rork Max が「下書き生成器」から「実装の相棒」に変わっていきます。

シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

⬡ 開発ツール2026-05-17
Rork Max の SwiftUI 機能を壁紙アプリ開発で検証した結果 — 実際に動いた機能と手を入れた機能
運用中の壁紙アプリの本番コードを基準に、Rork Max の SwiftUI ネイティブ生成を検証しました。そのまま使えた機能、手を入れた機能、生成を諦めた機能を、動くコードと実機での計測値とともにお伝えします。
⬡ 開発ツール2026-07-18
文字サイズ最大とドイツ語で、生成された画面は静かに詰まる — Rork Max の SwiftUI にレイアウト耐性の検証を通した記録
Rork Max が生成した SwiftUI 画面を疑似ローカライズと最大文字サイズに通し、どこから詰まるかを機械的に洗い出した記録です。ViewThatFits・ScaledMetric・layoutPriority の使いどころと、再生成のたびに回帰を捕まえるスナップショット検証を、実際の数値とともにまとめました。
⬡ 開発ツール2026-05-12
Rork Max で複数アプリ共通UIライブラリを Swift Package Manager で構築する実践ガイド
複数アプリを運営する個人開発者向けに、Swift Package Managerで共通UIライブラリを構築してRork Max生成コードの重複を排除する手順です。パッケージ構成の設計、テーマシステムとカードコンポーネント、アニメーションプリセットの共通化、テストまで詳解します。