Contents
1. SwiftUI とは何か
SwiftUI は Apple が 2019 年に公開した 宣言型 UI フレームワークです。
従来の UIKit が「どのように描画するか」をコードで指示する手続き的アプローチだったのに対し、SwiftUI では 「何を表示したいか」(What)だけを書けば、フレームワークが自動でレイアウト・描画・状態管理を行います。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import SwiftUI struct ContentView: View { var body: some View { VStack(spacing: 24) { Text("Hello, SwiftUI!") .font(.title) .foregroundColor(.blue) Image(systemName: "star.fill") .resizable() .scaledToFit() .frame(width: 80, height: 80) .foregroundColor(.yellow) } .padding() } } |
上記コードは「VStack に Text と Image を縦に並べ、フォントや色を修飾子(Modifier)で指定する」だけのシンプルな UI です。
1‑1. 宣言型 UI の主な概念
| 用語 | 説明 |
|---|---|
| View | 画面に表示される最小単位。Text, Image, Button などはすべて View プロトコルに準拠しています。 |
| Modifier | View に対して外観・レイアウトを付与する関数チェーン。例:.padding(), .background(Color.gray). |
| Layout Container | 複数の子ビューを配置するコンテナ。VStack, HStack, ZStack, LazyVGrid などがあります。 |
| State 系プロパティラッパー | @State, @Binding, @ObservedObject, @EnvironmentObject でデータの双方向バインディングや外部依存を管理します。 |
2. Xcode 15 と macOS Ventura/Sonoma での開発環境
2‑1. 必要なツールと公式情報
| 項目 | バージョン | 参照先(公式) |
|---|---|---|
| Xcode | 15 以上 | https://developer.apple.com/documentation/xcode-release-notes |
| macOS | Ventura (13) または Sonoma (14) | https://developer.apple.com/support/macos/ |
| Command Line Tools | Xcode に同梱 | Xcode → Settings → Locations で確認 |
Apple の公式リリースノートと macOS 対応表を必ず参照し、使用している macOS が Xcode 15 と互換性があるか事前にチェックしてください。
2‑2. インストール手順(画像付きでも可)
- Mac App Store を開き「Xcode」で検索 → 「取得」→「インストール」。
- 初回起動時に表示される Additional required components のインストールを完了。
- メニューバー Xcode > Settings > Locations で Command Line Tools が “Xcode 15” に設定されていることを確認。
※ポイント:App Store 経由のインストールは自動的に最新版が取得でき、サンドボックスや署名の問題が起きにくい安全な方法です。
3. 初めての SwiftUI アプリを作る手順
3‑1. プロジェクトの作成
| 手順 | 操作内容 |
|---|---|
| 1 | File > New > Project を選択。 |
| 2 | テンプレート画面で iOS → App(SwiftUI)を選び Next。 |
| 3 | Product Name に FirstSwiftUIApp、Interface と Life Cycle はともに SwiftUI, 言語は Swift を指定して Create。 |
これだけで App プロトコルに準拠したエントリポイントと、デフォルトの ContentView.swift が自動生成されます。
3‑2. ContentView の編集と Canvas(プレビュー)活用
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import SwiftUI struct ContentView: View { var body: some View { VStack(spacing: 20) { Text("Welcome to SwiftUI") .font(.largeTitle) .foregroundColor(.purple) Image(systemName: "globe") .resizable() .scaledToFit() .frame(width: 120, height: 120) .foregroundColor(.green) Spacer() } .padding() } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } |
- エディタ右上の Resume ボタンで Canvas を起動。
- コードを保存するたびにリアルタイムで UI が更新され、実機やシミュレータにビルドせずにデザイン確認が可能です。
3‑3. よく使うビューとモディファイア(一覧)
| ビュー / モディファイア | 主な用途 | サンプルコード |
|---|---|---|
Text |
静的文字列表示 | Text("Hello").font(.title).foregroundColor(.red) |
Image |
アイコン・写真表示 | Image(systemName: "star.fill").foregroundColor(.yellow) |
VStack / HStack |
縦・横レイアウト | VStack { … }, HStack { … } |
Spacer |
可変空白で配置調整 | Spacer() |
.padding() |
内側余白追加 | .padding(.horizontal, 16) |
.background() |
背景色・ビュー設定 | .background(Color.gray.opacity(0.2)) |
4. データバインディングと画面遷移の基本
4‑1. @State と @Binding の実装例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
struct ToggleDemoView: View { @State private var isOn = false // ローカル状態 var body: some View { VStack(spacing: 24) { Text(isOn ? "ON" : "OFF") .font(.title) Button("切り替え") { isOn.toggle() } .padding() .background(Color.blue) .foregroundColor(.white) .cornerRadius(8) // 子ビューへバインディングで渡す ChildToggle(isOn: $isOn) } } } struct ChildToggle: View { @Binding var isOn: Bool // 親の状態を参照 var body: some View { Toggle("子スイッチ", isOn: $isOn) .padding() } } |
@Stateの変更は自動的にビュー全体の再描画をトリガーします。- 子ビューへ
$isOn(バインディング)を渡すことで、双方向データフローが実現します。
4‑2. ナビゲーションと遷移
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
struct HomeView: View { var body: some View { NavigationStack { // iOS 16 以降は NavigationStack が推奨 VStack(spacing: 32) { Text("ホーム画面") .font(.largeTitle) NavigationLink("詳細へ") { DetailView() } .buttonStyle(.borderedProminent) } .navigationTitle("メイン") } } } struct DetailView: View { var body: some View { Text("ここが詳細画面です") .font(.title2) .navigationBarTitleDisplayMode(.inline) } } |
NavigationStack(iOS 16 以上)または従来のNavigationViewを使用し、NavigationLinkが遷移先ビューを宣言的に指定します。- 画面構成がシンプルになるだけでなく、プレビュー上でも階層構造を確認できます。
5. トラブルシューティングと学習リソース
5‑1. よくあるエラーと対処法
| 症状 | 原因例 | 解決策 |
|---|---|---|
| Canvas が真っ白になる | ビルドエラーやシンタックスエラーが残っている | ⌘ + B で手動ビルドし、エラーメッセージを解消。 |
| プレビューだけクラッシュする | 使用している iOS シミュレータが古いバージョン | Xcode → Settings → Components から最新シミュレータをインストール。 |
| 実機でアプリ起動時にクラッシュ | @State の初期化が不正(nil) |
プロパティに安全なデフォルト値か、オプショナルバインディング (if let) を使用。 |
| 画像が表示されない | SF Symbols 名が誤っている | Apple が提供する SF Symbols カタログを確認(https://developer.apple.com/sf-symbols/)。 |
5‑2. 学習に役立つ公式リソース
- Apple Developer – SwiftUI
- スタートガイド、コンポーネントリファレンス、サンプルコードが網羅。https://developer.apple.com/jp/swiftui/
- Xcode Help – プレビュー
- Canvas の使い方やデバッグ手順が公式に解説されています。https://developer.apple.com/documentation/xcode/previewing-swiftui-views
5‑3. コミュニティ記事(参考・非公式)
| サイト | 内容 | 注釈 |
|---|---|---|
| Qiita | Xcode 設定や SwiftUI 入門のハンズオンが多数掲載。実装例が豊富です。 | 非公式ですが、執筆者が実際に試した手順が多く参考になります。 |
| Zenn | 宣言的 UI の概念解説とデバッグテクニックの記事が充実しています。 | 同上(非公式)。最新の SwiftUI バージョンに合わせて更新されているものを選びましょう。 |
| Udemy(ベネッセ) | 入門コースが有料で提供されていますが、無料プレビュー部分は概念整理に役立ちます。 | 商用プロモーション色が強いため、本記事ではリンクだけ掲載し「参考情報」と明示しています。 |
注意:非公式サイトの情報は執筆時点の環境に依存することがあります。必ず公式ドキュメントと照らし合わせて最新性を確認してください。
6. まとめ
- SwiftUI は「View + Modifier」だけで UI を構築できる宣言型フレームワークです。コード量が減り、保守性・可読性が向上します。
- 開発は macOS Ventura/Sonoma 上の Xcode 15 以上を使用すれば、プレビューやシミュレータが最適化された環境で快適に行えます(公式リリースノート参照)。
- 「SwiftUI App」テンプレートからプロジェクトを作成し、
ContentView.swiftと Canvas で 即時フィードバックしながら学習できます。 @State・@BindingによるデータバインディングとNavigationStack+NavigationLinkの組み合わせで、インタラクティブかつ階層的な UI がシンプルに実装可能です。- トラブル時は ビルドエラーの有無・Canvas の再開・最新シミュレータの導入 をまず試し、公式ドキュメントや信頼できるコミュニティ記事で追加情報を取得してください。
これらの手順と概念を押さえれば、SwiftUI で iOS アプリだけでなく macOS や watchOS、tvOS の UI も統一的に構築できるようになります。さあ、実際にコードを書いて 「宣言した通り」 の画面を体感してみましょう!