第1弾
Expo UI SwiftUI iOS 30日学習コース
@expo/ui/swift-ui を iOS 向けに体系的に学び、Daily Setup というミニアプリを少しずつ作っていく30日コースです。
このコースで作るもの
このコースでは、@expo/ui/swift-ui を使って Daily Setup という小さな iOS アプリを作ります。
Daily Setup は、1日の予定、集中時間、タスク、通知設定を扱うミニアプリです。通信や複雑な永続化は入れず、Expo UI SwiftUI の component と React state の接続に集中します。
画面は3つです。
| 画面 | 役割 |
|---|---|
Today | 今日の進捗、集中時間、予定シート |
Tasks | タスク一覧、追加、完了、削除確認 |
Settings | 通知、集中時間、週の開始日、テーマ、リセット確認 |
学習方針
主対象は @expo/ui/swift-ui です。
- Jetpack Compose は対象外
- Universal component は必要に応じた補助扱い
- Drop-in replacements は後半に既存 React Native ライブラリとの比較として扱う
- Day 2 で
Daily Setupプロジェクトを作り、以後は毎日そのプロジェクトへ学習成果を統合する
30日ロードマップ
| Day | テーマ | 成果物 |
|---|---|---|
| 1 | Expo UI の位置づけ | 学習メモ「Expo UI で何を学ぶか」 |
| 2 | 環境構築 | 空の Daily Setup |
| 3 | Host | Today タブの最小土台 |
| 4 | Text / Label | Today ヘッダー |
| 5 | VStack / HStack / Spacer | Today 基本レイアウト |
| 6 | ZStack / Group / Divider | 区切り付き Today サマリー |
| 7 | Image | アイコン付き Today |
| 8 | Button | View Plan ボタン |
| 9 | TextField / SecureField | Tasks の追加フォーム原型 |
| 10 | Toggle / Slider | Settings の通知・集中時間セクション |
| 11 | Picker / DatePicker / ColorPicker | 入力部品サンプル |
| 12 | Form | Settings フォーム |
| 13 | Section | セクション分割された Settings |
| 14 | List / ScrollView | 静的なタスク一覧 |
| 15 | LazyVStack / LazyHStack / SwipeActions | スワイプ操作付きタスク行 |
| 16 | Menu / ContextMenu | メニュー操作付き Tasks |
| 17 | DisclosureGroup / Overlay | 折りたたみ付き Settings |
| 18 | Popover / BottomSheet | 今日の予定シート |
| 19 | Alert / ConfirmationDialog | 確認 UI |
| 20 | TabView | 3タブのアプリ土台 |
| 21 | Link / ControlGroup | 操作グループ付き画面 |
| 22 | ProgressView / Gauge | 進捗付き Today |
| 23 | RNHostView | RN 混在サンプル |
| 24 | Namespace / useNativeState | 状態同期メモ |
| 25 | state 復習 | state 設計メモ |
| 26 | replacement 比較 1 | 入力系比較メモ |
| 27 | replacement 比較 2 | 選択・ページング比較メモ |
| 28 | BottomSheet 比較 | BottomSheet 比較メモ |
| 29 | Daily Setup 仕上げ 1 | Today / Settings が動くアプリ |
| 30 | Daily Setup 仕上げ 2 | Daily Setup 完成版 |
毎日の進め方
- 公式 docs で対象 component を読む。
- 小さな単体サンプルで動かす。
Daily Setupの該当画面に組み込む。- component 学習メモを書く。
- iOS シミュレータで表示と操作を確認する。
Day 別ページ
Day 1 から Day 30 まで、各日の教材ページに分けています。各ページでは、その日に確認する component / 概念、単体サンプル、Daily Setup への組み込み、完了条件を整理します。
Day 一覧
Day 1
Expo UI の位置づけ
@expo/ui、@expo/ui/swift-ui、Universal、Drop-in replacements の違いを整理します。
無料公開13分Day 2
環境構築
Expo Router 前提の新規アプリを作り、@expo/ui を導入して Daily Setup の土台を作ります。
無料公開13分Day 3
Host
Host を使い、SwiftUI component を React Native 画面内に置く境界を確認します。
ログインして読む16分Day 4
Text / Label
Text と Label を使い、Today 画面の見出し、日付、アイコン付き見出しを作ります。
ログインして読む16分Day 5
VStack / HStack / Spacer
VStack、HStack、Spacer を使い、Today 画面の基本レイアウトを作ります。
ログインして読む16分Day 6
ZStack / Group / Divider
ZStack、Group、Divider を使い、重なり、論理グループ、区切りを確認します。
ログインして読む16分Day 7
Image
Image を使い、Today 画面のアイコン表現と Label との使い分けを確認します。
ログインして読む15分Day 8
Button
Button を使い、押下イベントを React state と接続します。
ログインして読む16分Day 9
TextField / SecureField
TextField と SecureField を使い、Tasks の追加フォーム原型を作ります。
ログインして読む17分Day 10
Toggle / Slider
Toggle と Slider を使い、Settings の通知と集中時間を state に接続します。
ログインして読む16分Day 11
Picker / DatePicker / ColorPicker
Picker、DatePicker、ColorPicker を使い、選択系入力を確認します。
ログインして読む17分Day 12
Form
Form を使い、Settings 画面の土台を作ります。
ログインして読む15分Day 13
Section
Section を使い、Settings を Notifications、Focus、Appearance に分割します。
ログインして読む15分Day 14
List / ScrollView
List と ScrollView を比較し、Tasks の静的なタスク一覧を作ります。
ログインして読む16分Day 15
LazyVStack / LazyHStack / SwipeActions
LazyVStack、LazyHStack、SwipeActions を使い、遅延リストとスワイプ操作を確認します。
ログインして読む16分Day 16
Menu / ContextMenu
Menu と ContextMenu を使い、優先度変更と長押し操作を確認します。
ログインして読む15分Day 17
DisclosureGroup / Overlay
DisclosureGroup と Overlay を使い、折りたたみ表示とバッジ表現を確認します。
ログインして読む15分Day 18
Popover / BottomSheet
Popover と BottomSheet を使い、一時的な補助情報と今日の予定シートを作ります。
ログインして読む16分Day 19
Alert / ConfirmationDialog
Alert と ConfirmationDialog を使い、削除確認と設定リセット確認を作ります。
ログインして読む15分Day 20
TabView
TabView を使い、Today、Tasks、Settings を3タブのアプリ土台へ統合します。
ログインして読む16分Day 21
Link / ControlGroup
Link と ControlGroup を使い、関連導線と複数操作のまとまりを確認します。
ログインして読む16分Day 22
ProgressView / Gauge
ProgressView と Gauge を使い、タスク完了率と集中進捗を表示します。
ログインして読む16分Day 23
RNHostView
RNHostView を使い、SwiftUI 画面内に React Native view を混ぜる方法を確認します。
ログインして読む15分Day 24
Namespace / useNativeState
Namespace と useNativeState の役割を調べ、React と native state の接続を整理します。
ログインして読む15分Day 25
state 復習
入力 component と useState の接続を整理し、Daily Setup の state 設計を見直します。
ログインして読む16分Day 26
replacement 比較 1
DateTimePicker、Picker、Slider を Drop-in replacements と SwiftUI component の観点で比較します。
ログインして読む15分Day 27
replacement 比較 2
Menu、SegmentedControl、PagerView を比較し、選択操作とページング UI の使いどころを整理します。
ログインして読む15分Day 28
BottomSheet 比較
Drop-in replacement と SwiftUI 版の BottomSheet を比較し、Daily Setup での使い分けを整理します。
ログインして読む15分Day 29
Daily Setup 仕上げ 1
Today と Settings を静的データで完成させ、Daily Setup の土台を仕上げます。
ログインして読む17分Day 30
Daily Setup 仕上げ 2
Tasks の追加、完了、削除を完成させ、Daily Setup と学習メモを仕上げます。
ログインして読む17分