SwiftUI
概要
SwiftUI は、単一の共有ツールキットですべての Apple プラットフォーム向けのインターフェースを構築するための、Apple の宣言的 UI フレームワークです。命令的にビューを変更するのではなく、与えられた状態に対して UI がどう見えるべきかを記述すると、フレームワークが状態の変化に合わせて画面を同期させ続けます。Xcode のライブプレビューキャンバス上で動作するため、入力しながら変更を確認できます。
強み
- 宣言的で簡潔 — 旧来の UIKit/AppKit のアプローチよりはるかに少ないボイラープレート。
@State、@Binding、observation を介した、状態駆動の自動更新。- ライブプレビューによって、レイアウトの反復を高速かつ視覚的に行える。
- 1つのフレームワークが、共有コードで iPhone、iPad、Mac、Watch、TV を対象にできる。
- アニメーション、アクセシビリティ、ダークモード、動的タイプの組み込みサポート。
トレードオフ
- 新しい API は新しい OS バージョンを必要とし、古いデバイスをサポートしなければならない場合に問題になりうる。
- 深くカスタムな、あるいは特殊な UI では、UIKit/AppKit との相互運用に戻ることがある。
- 一部の挙動は不透明で、レイアウトや状態の問題のデバッグはもどかしくなりうる。
- 進化が速いため、サンプルは OS リリース間で古くなることがある。
最適な用途
SwiftUI は、速く動き、コードベースを小さく保ち、現行の OS バージョンを対象にしたい新しい Apple プラットフォームアプリには最適な選択肢です。Swift の値型や並行処理と自然に組み合わさります。
バイブコーディングとの相性
SwiftUI は AI 支援の構築に向いています。ビューが小さく、組み合わせ可能で、自己完結しているため、モデルが生成しやすく、プレビューキャンバスで検証しやすいからです。@State/@Observable で画面の状態を明示的にモデル化し、大きなビューを小さなサブビューに分割し、リストを identifiable なデータから駆動するようアシスタントに求めましょう。状態の信頼できる唯一の情報源を1つ保ち、binding を下方に流させましょう。このたった1つのルールが、生成された SwiftUI コードの混乱のほとんどを防ぎます。
import SwiftUI
struct CounterView: View {
@State private var count = 0
var body: some View {
VStack {
Text("\(count)").font(.largeTitle)
Button("Add") { count += 1 }
}
}
}