필사 모드: モダンSwift & Appleプラットフォーム開発 2026 完全ガイド - Swift 6 Strict Concurrency・SwiftData・Foundation Models・SwiftUI 5・Vapor・TCA徹底解説
日本語プロローグ — 2026年のSwiftが再び面白い理由
2014年のWWDCでChris Lattnerが舞台に上がり「One more thing... a new programming language called Swift」と告げた瞬間、多くの観客はこれをObjective-Cのよりクリーンな後継者程度として受け止めた。10年経った2026年5月、その評価は完全に塗り替えられている。
Swiftはもう単にiOSアプリを作るための言語ではない。Swift 6.1のstrict concurrencyモデルはデータレースを**コンパイル時に**検出し、region-based isolationはSendableアノテーションの定型コードを大幅に削減した。SwiftDataはCodableベースの永続化とCloudKit同期を一行のマクロで終わらせ、Foundation Modelsフレームワークは約30億パラメータのオンデバイスLLMをApple Silicon Neural Engine上で実行する。
サーバーではVapor 4とHummingbird 2がasync/await上にすっきりしたルーティングDSLを乗せており、AWS Lambda Swiftは100msのコールドスタートを切る。Embedded SwiftはRaspberry Pi PicoとARM Cortex-Mの上でmallocなしに動く。SkipはSwiftコードをKotlinへトランスパイルしてAndroidに届ける。
本記事はSwift 6 concurrencyからSwiftData History API、Foundation Models tool calling、SwiftUI 5 ContainerValues、App Intents、Swift Testing、Swift Macros、SwiftPM 6、TCA 1.x、Vapor 4、Embedded Swift、Swift Wasm 6まで — 2026年のApple開発者が知るべき変化を一気にマッピングする。
1章 · Swift 6 Strict Concurrency — データレースをコンパイル時に潰す
Swift 6.0は2024年9月にGAし、2026年5月時点のstableは6.1.2である。最大の変化は**strict concurrency checkingがデフォルトになった**ことだ。
Swift 5では`-strict-concurrency=complete`フラグを立ててはじめてデータレース警告が出る仕様だった。Swift 6はこれをデフォルトモードに昇格させた。何が変わるか?
- 全てのactor-isolatedな値はactor境界を越える際にSendableでなければならない。
- non-Sendableなクラスを`@MainActor`でないコンテキストへ渡すとコンパイルエラー。
- グローバル変数は`nonisolated(unsafe)`や`@MainActor`のような明示的isolationなしには許されない。
// Swift 5では警告、Swift 6ではエラー
class Counter {
var count = 0
}
func runConcurrently() async {
let counter = Counter()
Task { counter.count += 1 }
Task { counter.count += 1 }
// ❌ CounterはSendableでないのにTaskクロージャでキャプチャされている
}
これを通すにはactorで包むか、Sendableプロトコルを明示的に採用するしかない。最初のマイグレーションコストは大きいが、一度通せばデータレースクラスのバグは事実上消える。
2章 · Region-Based Isolation — Sendableの定型コードを減らす
Swift 6で導入された最もエレガントな機能の一つが**region-based isolation**(SE-0414)だ。核となる発想 — **non-Sendableな値でも、コンパイラが「他スレッドから触らない」ことを追跡できれば安全に転送できる。**
// non-Sendableなクラス
class ImageBuffer {
var pixels: [UInt8] = []
}
func process() async {
let buffer = ImageBuffer()
buffer.pixels = generatePixels()
// Swift 5 strict: エラー — ImageBufferはSendableでない
// Swift 6: OK — bufferは以後呼び出し側で参照されないので安全に転送可能
await processOnBackground(buffer)
}
コンパイラは`buffer`が関数終了前に呼び出し側regionから使われないことを静的解析で証明し、転送を許可する。これがなければSendableを採用するか全てのデータをコピーするしかなかった。
実際のコードベースでregion isolationのおかげでSendableアノテーションの50〜70%を削除できたという報告が一般的だ。iOS 17・18時代のSwiftUIコードがSwift 6でずっとクリーンになる理由でもある。
3章 · @MainActorの改善とnonisolated(unsafe)
SwiftUIはすべてのViewが暗黙的に`@MainActor`であるモデルである。Swift 6はこれをさらに精緻にした。
- `@MainActor`をクラス単位に付ければ全メソッド・プロパティがメインスレッド隔離。
- メソッド単位に付ければそのメソッドだけ。
- `nonisolated`キーワードでisolationを明示的に解除可能。
- `nonisolated(unsafe)` — Swift 6で導入されたescape hatch。「この変数のisolation検査はしない、責任は自分が取る。」
@MainActor
class ViewModel {
var items: [Item] = []
nonisolated(unsafe) static let shared = ViewModel()
// ↑ これがないとグローバルなViewModel.sharedはmain actor isolation違反
}
`nonisolated(unsafe)`はマイグレーションツールと考えるべきだ。時間を作って真のactorに置き換えるべきだが、まずコンパイルを通して出荷を続けるための逃げ道として有用である。
4章 · Embedded Swift — Raspberry Pi Picoでmallocなし
2024年に公開された**Embedded Swift**はSwiftを組み込みマイクロコントローラへ降ろすプロジェクトだ。2026年5月時点でproduction-ready直前。
主要な制約:
- **No malloc** — 動的メモリ割り当てなし。ARCもstack/staticだけ。
- **Small binary** — `Hello, world`バイナリが10KB未満(通常のSwiftは1.5MB)。
- **No reflection / no runtime metadata** — コードサイズの肥大化を防ぐ。
- **No Foundation** — 標準ライブラリの一部のみ使用可能。
対応ターゲット:
- Raspberry Pi Pico (RP2040, ARM Cortex-M0+)
- ESP32-C6 (RISC-V)
- STM32シリーズ (Cortex-M3/M4)
- AppleのSecure Enclave一部ファームウェア
@_extern(c, "gpio_put")
func gpio_put(pin: UInt32, value: Bool)
@main struct Blink {
static func main() {
while true {
gpio_put(pin: 25, value: true)
sleep_ms(500)
gpio_put(pin: 25, value: false)
sleep_ms(500)
}
}
}
Apple自身も自社SoCファームウェアを徐々にSwiftへ移しており、日本の組み込み系企業や韓国のRaonsecureのようなセキュリティ会社もARM Cortex-M HSMファームウェアでEmbedded Swiftを実験している。
5章 · SwiftData — Core Dataに代わるCodable永続化
SwiftDataはiOS 17で初めて登場した永続化フレームワークだ。モダンSwiftの上にCore Dataを再パッケージしたものに近いが、差は大きい。
iOS 18で入った主要機能:
- **History API** — 他デバイスで起きた変更をhistory transactionとして追跡。CloudKit同期後どの行が入ってきたか正確に分かる。
- **Composite keys** — 2つ以上のフィールド組み合わせでuniqueキーを定義。
- **Indexes** — `@Attribute(.indexBinary)`マクロでbinary indexを生成。
- **#Predicateマクロ** — 型安全なクエリ。SQLインジェクション系のミスを排除。
@Model
final class Note {
var title: String
var body: String
var createdAt: Date
@Attribute(.indexBinary)
var tags: [String]
init(title: String, body: String) {
self.title = title
self.body = body
self.createdAt = .now
}
}
// クエリ
let recent = try modelContext.fetch(
FetchDescriptor(predicate: #Predicate { $0.createdAt > Date.distantPast })
)
CloudKit統合も一行。`ModelConfiguration(cloudKitDatabase: .private("iCloud.com.example"))`を追加するだけで自動同期。2026年時点で新規アプリがCore Dataを新たに採用する理由はほぼない。
6章 · Observation Framework — @Observableマクロ
iOS 17で`Combine`の`ObservableObject` + `@Published`を置き換える新しいframeworkが入った。名は**Observation**。
Before (Combine時代):
class ViewModel: ObservableObject {
@Published var items: [Item] = []
@Published var isLoading = false
}
After (Observation時代):
@Observable
class ViewModel {
var items: [Item] = []
var isLoading = false
}
`@Observable`はSwift Macroで実装されている。コンパイル時にKeyPath追跡とwillSetトリガを自動合成する。差は以下の通り:
- **自動依存追跡** — View内で実際に読まれたプロパティのみ再描画される。`@Published`の全購読者発火モデルより効率的。
- **`@StateObject`不要** — `@State`で済む。
- **Combine依存除去** — `import Combine`しなくていい。
大規模アプリほどリレンダ回数が減り、バッテリーとCPUの節約効果が大きい。
7章 · Foundation Models — オンデバイスLLMが標準APIに
2024年のWWDCで公開された**Foundation Models**フレームワークはApple Intelligenceの中核だ。iOS 18.4・macOS 15から正式APIとして公開された。
スペック:
- 約30億パラメータのデコーダ専用LLM。
- Apple Silicon Neural Engineで量子化された重みで推論。
- M2以降 / A17 Pro以降で動作。
- コンテキストは約8Kトークン。
基本使用:
let session = LanguageModelSession()
let response = try await session.respond(to: "Summarize this email in 2 sentences: ...")
print(response.content)
中核機能は2つ:
- **Tool calling** — モデルから呼べる関数を登録すると、自然言語要求に応じて適切な関数を呼び出す。
- **Guided Generation** — 出力スキーマをSwift型で指定するとJSONを経由せずSwift structが直接受け取れる。
@Generable
struct WeatherQuery {
var city: String
var unit: TemperatureUnit
}
let query: WeatherQuery = try await session.respond(
to: "How hot is it in Seoul in fahrenheit?",
generating: WeatherQuery.self
)
// query.city == "Seoul", query.unit == .fahrenheit
サーバーLLMと比べるとコンテキスト・推論能力は弱いが、**オンデバイス + 無料 + プライバシー**という3点の組み合わせは強力である。
8章 · App Intents — SiriとApple Intelligenceのエントリポイント
App IntentsはiOS 16から始まったフレームワークだが、Apple Intelligenceと統合されたことで地位が一変した。2026年時点でApp Intentを登録すると:
- Siriから自然言語で呼び出し可能。
- App Shortcutsに自動的に露出。
- Spotlight検索結果に登場。
- Apple Intelligenceが他アプリのコンテキストを取りに来る際に使用。
struct AddNoteIntent: AppIntent {
static let title: LocalizedStringResource = "Add Note"
@Parameter(title: "Title")
var noteTitle: String
@Parameter(title: "Body")
var body: String
func perform() async throws -> some IntentResult {
let note = Note(title: noteTitle, body: body)
try modelContext.insert(note)
return .result(value: note.id)
}
}
これが登録されていれば「ノートアプリに会議メモを追加して」というSiriコマンドが正しいパラメータにマップされる。2026年のAppleはApp Intent登録を**事実上の必須要件**にする方向で進めている。
9章 · SwiftUI 5・6 — アニメーションとContainerValues
iOS 17でSwiftUI 5、iOS 18でSwiftUI 6が出た。主要な変化:
- **CustomAnimationプロトコル** — 任意のtiming functionを定義可能。
- **PhaseAnimator** — 複数段階アニメーションを自動順次再生。
- **Metal Shader Effects** — `.colorEffect()`、`.distortionEffect()`でGPUシェーダを直接適用。
- **Scroll APIs** — `.scrollPosition()`、`.scrollTransition()`、`.scrollTargetBehavior()`が導入。
- **ContainerValues** — `@Entry`でコンテナに任意のキー値を渡せる。ForEachの子にpropsを流すのが綺麗になった。
- **Custom Layout** — `Layout`プロトコル — 独自レイアウトアルゴリズムを実装。CGSizeベースのplacement。
ScrollView {
LazyVStack {
ForEach(items) { item in
Card(item)
.scrollTransition { content, phase in
content
.scaleEffect(phase.isIdentity ? 1 : 0.85)
.opacity(phase.isIdentity ? 1 : 0.5)
}
}
}
.scrollTargetLayout()
}
.scrollTargetBehavior(.viewAligned)
このレベルのインタラクションをUIKitで書けば200行、SwiftUI 5なら10行で済む。
10章 · Swift Charts 2.0 — ベクトル化レンダリングと3D
Swift Chartsは2022年に発表され、2026年5月時点のstableは2.0。中核変化:
- **ベクトル化レンダリング** — Metalバックエンドで数万データポイントを60fpsで描画。
- **3Dチャート** — `Chart3D` APIでRealityKitに乗せる。visionOSで特に魅力的。
- **対話強化** — `chartScrollableAxes`、`chartXSelection` — ピンチズーム・ドラッグ・選択。
- **Heatmap、Sankey、Treemap**マークを正式サポート。
Chart {
ForEach(data) { point in
LineMark(
x: .value("Time", point.time),
y: .value("Value", point.value)
)
.interpolationMethod(.catmullRom)
.foregroundStyle(by: .value("Series", point.series))
}
}
.chartXSelection(value: $selectedTime)
.chartScrollableAxes(.horizontal)
データ分析SwiftUIアプリが2026年に爆発的に増えた背景にはSwift Charts 2.0の貢献が大きい。
11章 · Swift Testing — XCTestを置き換えるモダンテストフレームワーク
XCTestは2014年以来Appleプラットフォームの標準テストフレームワークだったが、マクロベースのモダンSwiftとの相性が悪かった。2024年に発表された**Swift Testing**(swift-testing)が急速にその座を奪っている。
@Test func basicAddition() {
#expect(2 + 2 == 4)
}
@Test(arguments: [1, 2, 3, 4, 5])
func square(value: Int) {
#expect(value * value >= value)
}
@Test("Network call returns 200")
func networkSuccess() async throws {
let response = try await fetchUser(id: 42)
#expect(response.status == 200)
}
中核改善:
- **`@Test`アノテーション** — `XCTestCase`継承なしで関数単位テスト。
- **`#expect`マクロ** — 冗長で弱型な`XCTAssertEqual`系を置き換え。
- **Parameterized tests** — 1関数で複数入力を自動生成。
- **Traitシステム** — `.disabled`、`.timeLimit(.minutes(2))`、`.tags(.integration)`などのメタデータ。
- **並列実行がデフォルト** — テスト間隔離が明示的。
2026年5月時点のstableはswift-testing 0.10.x、Xcode 16から一級IDE統合済み。
12章 · Swift Macros — コンパイル時コード生成
Swift 5.9で導入されたマクロシステムは2026年に完全に安定した。2種類ある:
- **Freestanding macro** — `#stringify(2+2)`、`#expect(x > 0)`のように式や文の位置で呼ぶ。
- **Attached macro** — `@Observable`、`@Model`、`@Generable`のように宣言に付ける。
マクロはswift-syntax 600上で動くコンパイラプラグインで、SwiftSyntaxツリーを受け取り別のSwiftSyntaxツリーを返す。
@freestanding(expression)
public macro stringify<T>(_ value: T) -> (T, String) = #externalMacro(
module: "MyMacros",
type: "StringifyMacro"
)
let (result, source) = #stringify(2 + 3)
// result == 5, source == "2 + 3"
マクロの利点:
- 定型コード(Codable、Equatable、Mockなど)の自動合成。
- KeyPath、依存性、DSLなどのメタプログラミングでコンパイル時検証。
- ランタイムコストゼロ。
欠点はビルド時間増加とデバッグの難しさ。マクロ展開をデバッグするにはXcodeの「Expand Macro」メニューで結果コードを開く必要がある。
13章 · Swift Package Manager 6 + Swift Build
Swift Package Managerは2026年に6.0のメジャーアップデートが入った。最大の変化は**Swift Build**の導入である。
Swift BuildはAppleがxcodebuild内部のビルドエンジンをオープンソース化したもの。既存SwiftPMのllbuildを徐々に置き換え、結果としてSwiftPMビルドとXcodeビルドが同じエンジン上で動くようになる。
SwiftPM 6のその他の変化:
- **Package traits** — Cargoのfeature flagと等価。パッケージがオプション依存を宣言可能。
- **Strict concurrency** — マニフェストがSwift 6モードをデフォルト。
- **Prebuilt binaries** — `binaryTarget`改善、マルチアーキテクチャXCFramework自動生成。
- **Workspace改善** — マルチパッケージモノレポ対応がスムーズに。
let package = Package(
name: "MyApp",
traits: [
.default(enabledTraits: ["network"]),
"logging",
],
dependencies: [
.package(url: "https://github.com/apple/swift-log", from: "1.5.0"),
],
targets: [
.target(
name: "MyApp",
dependencies: [
.product(name: "Logging", package: "swift-log", condition: .when(traits: ["logging"]))
]
)
]
)
これまでSwiftPMの最大の弱点だった条件付き依存とIDE統合がSwiftPM 6で一気に解決した。
14章 · Vapor 4.x — Server-Side Swiftの事実上の標準
Vaporは2016年から続くSwiftサーバーフレームワーク。2026年5月時点のstableは4.95。
特徴:
- **async/await優先** — 全ハンドラが`async throws`シグネチャ。
- **NIOベース** — Apple SwiftNIO上で動作。イベントループ + non-blocking IO。
- **Fluent ORM** — Postgres・MySQL・SQLiteサポート。Swift型安全クエリ。
- **Leafテンプレート** — Server-Side rendering必要時に使用。
- **JWT、OAuth、WebSocket** などの標準パターン内蔵。
func routes(_ app: Application) throws {
app.get("users", ":id") { req async throws -> User in
guard let id = req.parameters.get("id", as: UUID.self) else {
throw Abort(.badRequest)
}
return try await User.find(id, on: req.db).orThrow(.notFound)
}
app.post("users") { req async throws -> User in
let payload = try req.content.decode(User.Create.self)
let user = User(name: payload.name)
try await user.save(on: req.db)
return user
}
}
Vapor以外にも**Hummingbird 2**(元Appleエンジニアが作る軽量代替)と**AWS Lambda Swift Runtime**(コールドスタート100ms未満)が成長中。日本ではメルカリやLINEの一部マイクロサービスがVapor PoCを動かしている。
15章 · The Composable Architecture (TCA) 1.x
Point-FreeのBrandon WilliamsとStephen Celisが作った**The Composable Architecture**はSwiftUI時代で最も影響力のあるアーキテクチャライブラリだ。2024年に1.0がGAし、2026年5月時点のstableは1.18.x。
中核概念:
- **State** — 画面状態を単一structに。
- **Action** — 可能なすべてのユーザー/システムアクションをenumに。
- **Reducer** — `(inout State, Action) -> Effect<Action>`形の純粋関数。
- **Store** — Stateを保持しActionをreducerへ流す。
- **Dependencies** — システム依存(時計、ネットワークなど)を明示的注入。
@Reducer
struct CounterFeature {
@ObservableState
struct State {
var count = 0
var isLoading = false
}
enum Action {
case incrementTapped
case fetchNumberTapped
case numberResponse(Int)
}
@Dependency(\.numberFact) var numberFact
var body: some ReducerOf<Self> {
Reduce { state, action in
switch action {
case .incrementTapped:
state.count += 1
return .none
case .fetchNumberTapped:
state.isLoading = true
return .run { send in
let n = try await numberFact.random()
await send(.numberResponse(n))
}
case .numberResponse(let n):
state.count = n
state.isLoading = false
return .none
}
}
}
}
2024〜2026年で入った重要な変化:
- **`@Reducer`マクロ** — 定型コードの大幅削減。
- **`@ObservableState`** — Observationフレームワークと統合。
- **Scoped stores** — child featureへのstore切り出しが簡潔。
- **swift-sharing** — TCA外部で`@Shared`プロパティラッパで状態共有。
大規模SwiftUIアプリ(特にメルカリ、LINE、CyberAgentの一部)でTCA採用率が急増中。
16章 · swift-async-algorithmsとswift-collections
標準ライブラリだけでは足りない場合のためにAppleは**swift-async-algorithms**と**swift-collections**を提供している。
**swift-async-algorithms**:
- `AsyncSequence`拡張 — `.chunks(ofCount:)`、`.combineLatest`、`.merge`、`.throttle`、`.debounce`。
- リアクティブストリーム(`Combine`)をasync/awaitの世界に運ぶ橋。
let sensorStream: AsyncSequence<Reading, Error> = ...
for try await chunk in sensorStream.chunks(ofCount: 100) {
let avg = chunk.map(\.value).reduce(0, +) / 100
print("Avg over 100 samples: \(avg)")
}
**swift-collections**:
- `Deque`、`OrderedSet`、`OrderedDictionary`、`Heap`など標準ライブラリにないコレクション。
- すべてSwift標準コレクションプロトコルに準拠。
- 特定パターンで標準`Array`・`Set`より遥かに高性能。
var queue: Deque<Task> = []
queue.append(task1)
queue.prepend(urgentTask)
let next = queue.popFirst()
この2つのパッケージは事実上「Swift 1.6標準ライブラリ拡張パック」のような位置づけ。
17章 · swift-syntaxとswift-distributed-actors
**swift-syntax**(600シリーズ)はマクロ作成の核となる。Swiftソースを構文木に解析し再印刷するライブラリ。
public struct LoggedMacro: PeerMacro {
public static func expansion(
of node: AttributeSyntax,
providingPeersOf declaration: some DeclSyntaxProtocol,
in context: some MacroExpansionContext
) throws -> [DeclSyntax] {
// declarationを受け取りログを出すwrapperメソッドを生成
// ...
}
}
**swift-distributed-actors**はActorモデルをネットワーク越しに拡張するプロジェクト。2024年にAppleがGitHubに公開し、2026年5月時点でクラスタ機能までGA。Erlang/Akkaのような分散システムをSwiftで書くときに使う。
distributed actor ChatRoom {
distributed func broadcast(_ message: String) async { ... }
}
let cluster = await ClusterSystem("MyCluster")
let room = try ChatRoom.resolve(id: roomID, using: cluster)
try await room.broadcast("Hello")
ゲームバックエンド、IoTメッセージブローカー、エッジコンピュートに向く道具。日本のゲーム会社CyberAgentやKLabが内部でPoCを回しているらしい。
18章 · AWS Lambda Swift Runtime — コールドスタート100ms
サーバーSwiftのもう一つのフロントが**AWS Lambda**。AWS Lambda Swift RuntimeはAppleとAWSが共同管理する公式ランタイムで、コールドスタートが通常100ms以下。
struct HelloHandler: LambdaHandler {
typealias Event = APIGatewayV2Request
typealias Output = APIGatewayV2Response
func handle(_ event: Event, context: LambdaContext) async throws -> Output {
return APIGatewayV2Response(statusCode: .ok, body: "Hello from Swift!")
}
}
Lambda.run(HelloHandler.init)
デプロイは`swift build` + `zip` + `aws lambda update-function-code`の3ステップ。Dockerイメージでもパッケージ可能。
長所:
- 単一バイナリ、高速コールドスタート。
- async/awaitモデルがLambda invocationモデルと自然に噛み合う。
- Apple社内でも一部のバックエンドをLambda Swiftで運用していると言われる。
短所:
- ARM64 Lambda環境でビルドする必要(Dockerクロスビルドも可)。
- ライブラリエコシステムがまだNode.jsやPythonに比べ狭い。
19章 · クロスプラットフォーム — Skip(Swift→Android)とSwift Wasm 6
SwiftはLinuxとWindowsで以前から動いていたが、モバイルクロスプラットフォームは長らく弱点だった。2026年には2つの興味深い選択肢がある。
**Skip**(skip.tools)はSwiftコードをKotlinへトランスパイルしてAndroidアプリを作る。SwiftUIをそのまま書くとSkipがJetpack Composeコードに変換する。
// 同じSwiftUIコードが...
struct ContentView: View {
@State var count = 0
var body: some View {
VStack {
Text("Count: \(count)")
Button("Increment") { count += 1 }
}
}
}
// ↑ iOSではSwiftUI、AndroidではComposeとして動く
**Swift Wasm 6**はSwiftをWebAssemblyへコンパイルする。2024年にWasm 6がGAしcomponent model対応が入り、ブラウザとサーバーレスWasm(Fastly、Cloudflare Workers)の両方で動く。
両者ともApple公式ではないがSwift workgroupが積極的に関わっており、2026年時点でプロダクション事例が増えている。
20章 · 韓国・日本のApple開発者コミュニティ
Swiftは韓国と日本に強力な草の根コミュニティを持つ。
**韓国**:
- **GDG iOS Korea** — 四半期ごとのミートアップ、発表スライドと録画を公開。
- **let's swift** — 毎年12月にCOEXで開催されるカンファレンス。2025年は5回目、1500名参加。
- **Codestates iOSブートキャンプ**、**F-Lab**などの新規開発者向けトレーニング。
- 企業 — Kakao、Toss、Daangn、LINE Korea、CoupangのiOSチームが活発。
**日本**:
- **iOSDC Japan** — 毎年9月東京。iOSカンファレンスとして世界最大級、1週間で3000名超参加。
- **try! Swift Tokyo** — グローバルSwiftカンファレンス。2025年3月に9回目開催。
- **potatotips** — 毎月東京/大阪で開催される5分発表会。累計200回超。
- 企業 — メルカリ、LINE、Cookpad、ZOZO、DeNA、CyberAgent。
英語圏資料だけ追っていると見落としやすいが、日本語・韓国語のSwiftコミュニティが蓄積したノウハウの厚みは侮れない。
21章 · 意思決定ガイド — どのツールをいつ使うか
質問1. どのプラットフォーム?
├─ iOS / macOS単独 → SwiftUI 6 + SwiftData + Observation
├─ iOS + Android → Skip または React Native / Flutter
├─ サーバー → Vapor 4 または Hummingbird 2
├─ AWS Lambda → AWS Lambda Swift Runtime
├─ 組み込み → Embedded Swift
└─ ブラウザ → Swift Wasm 6
質問2. 永続化は?
├─ ローカル単純 → SwiftData
├─ CloudKit同期 → SwiftData + cloudKitDatabase
├─ サーバーRDB → Vapor + Fluent
└─ 既存Core Data資産 → Core Data維持(マイグレーションコストを計算)
質問3. 状態管理は?
├─ 小規模画面 → @State + @Observable
├─ 中規模画面 → @Observable + Environment
├─ 大規模アプリ → TCA 1.x
└─ 分散システム → swift-distributed-actors
質問4. LLMが必要?
├─ オンデバイス + 無料 → Foundation Models
├─ 強い推論が必要 → サーバーLLM(Claude、GPT)API呼び出し
└─ Apple Intelligence統合 → App Intents + Foundation Modelsの組み合わせ
22章 · よくあるマイグレーションの落とし穴
Swift 5 → Swift 6マイグレーションで頻繁に見るパターン:
- **グローバルmutable変数** — `nonisolated(unsafe)`またはactorで包む。どちらも不可ならコンパイル不能。
- **Combine依存** — Observationに移すときに一部Combineオペレータ(`.share()`、`.multicast()`)は代替が困難。swift-async-algorithmsが埋め中。
- **シングルトンパターン** — `static let shared`が`@MainActor`オブジェクトのとき衝突。`nonisolated(unsafe)`またはisolated initが必要。
- **DispatchQueueの残骸** — `DispatchQueue.main.async`呼び出しがactorモデルと混ざるとraceの可能性。極力`await MainActor.run { ... }`または`@MainActor`で一貫性維持。
- **Core Data → SwiftData** — `@Model`自動合成と既存`NSManagedObject`は異なるメモリモデル。漸進的マイグレーションAPIはあるが、大規模アプリでは1年超かかるのが普通。
急がず、モジュール単位でゆっくり進めるべき。Apple自身もstrict concurrencyマイグレーションに3年を見積もった。
23章 · 2026年のApple開発風景
整理すると:
1. **Swift 6 strict concurrencyがデフォルト** — データレースクラスのバグが事実上消失。
2. **SwiftDataがCore Dataを置き換える** — 新規アプリはSwiftDataがデフォルト選択肢。
3. **ObservationがCombineを置き換える** — `@Observable`が新標準。
4. **Foundation ModelsがApple Intelligenceの中核** — オンデバイスLLMが無料APIで提供。
5. **App Intent登録は事実上必須** — Siri、Spotlight、Apple Intelligence統合全てがここに依存。
6. **Swift TestingがXCTestを置き換え** — マクロベースのモダンテスト。
7. **SwiftPM 6 + Swift Build** — ビルドシステム統合、traitsで条件付き依存を解決。
8. **サーバーSwiftの成長** — Vapor、Hummingbird、AWS Lambda Swift。
9. **TCAが大規模SwiftUIアプリの標準アーキテクチャ** — Point-Freeの影響力拡大。
10. **Embedded Swiftの登場** — Swiftがマイクロコントローラまで降りた。
11. **クロスプラットフォーム選択肢の多様化** — Skip、Swift Wasm 6。
Apple開発者にとって2026年は学習負担が大きい年だ。だが新しいツール一つひとつがクラスを置き換える変化なので、一度習得すればコードベースの安全性と表現力が大幅に向上する。
最後に一言 — 新規プロジェクトなら無条件でSwift 6 strict concurrency・SwiftData・Observation・SwiftUI 6をデフォルトで敷いて始めよう。既存プロジェクトならモジュール単位で慎重に。そして毎年秋と春のWWDCセッションとswift.orgブログを必ずチェックしよう。
参考資料 (References)
1. Swift.org — [https://www.swift.org/](https://www.swift.org/)
2. Swift 6 announcement — [https://www.swift.org/blog/announcing-swift-6/](https://www.swift.org/blog/announcing-swift-6/)
3. Swift Evolution — [https://github.com/swiftlang/swift-evolution](https://github.com/swiftlang/swift-evolution)
4. SE-0414 Region-based Isolation — [https://github.com/swiftlang/swift-evolution/blob/main/proposals/0414-region-based-isolation.md](https://github.com/swiftlang/swift-evolution/blob/main/proposals/0414-region-based-isolation.md)
5. Embedded Swift documentation — [https://github.com/swiftlang/swift/blob/main/docs/EmbeddedSwift.md](https://github.com/swiftlang/swift/blob/main/docs/EmbeddedSwift.md)
6. SwiftData official docs — [https://developer.apple.com/documentation/swiftdata](https://developer.apple.com/documentation/swiftdata)
7. Observation framework — [https://developer.apple.com/documentation/observation](https://developer.apple.com/documentation/observation)
8. Foundation Models framework — [https://developer.apple.com/documentation/foundationmodels](https://developer.apple.com/documentation/foundationmodels)
9. App Intents — [https://developer.apple.com/documentation/appintents](https://developer.apple.com/documentation/appintents)
10. SwiftUI documentation — [https://developer.apple.com/documentation/swiftui](https://developer.apple.com/documentation/swiftui)
11. Swift Charts — [https://developer.apple.com/documentation/charts](https://developer.apple.com/documentation/charts)
12. Swift Testing — [https://github.com/swiftlang/swift-testing](https://github.com/swiftlang/swift-testing)
13. Swift Macros guide — [https://docs.swift.org/swift-book/documentation/the-swift-programming-language/macros/](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/macros/)
14. swift-syntax — [https://github.com/swiftlang/swift-syntax](https://github.com/swiftlang/swift-syntax)
15. Swift Package Manager — [https://github.com/swiftlang/swift-package-manager](https://github.com/swiftlang/swift-package-manager)
16. Swift Build — [https://github.com/swiftlang/swift-build](https://github.com/swiftlang/swift-build)
17. Vapor — [https://vapor.codes/](https://vapor.codes/)
18. Hummingbird — [https://hummingbird.codes/](https://hummingbird.codes/)
19. AWS Lambda Swift Runtime — [https://github.com/swift-server/swift-aws-lambda-runtime](https://github.com/swift-server/swift-aws-lambda-runtime)
20. The Composable Architecture — [https://github.com/pointfreeco/swift-composable-architecture](https://github.com/pointfreeco/swift-composable-architecture)
21. Point-Free — [https://www.pointfree.co/](https://www.pointfree.co/)
22. swift-sharing — [https://github.com/pointfreeco/swift-sharing](https://github.com/pointfreeco/swift-sharing)
23. swift-async-algorithms — [https://github.com/apple/swift-async-algorithms](https://github.com/apple/swift-async-algorithms)
24. swift-collections — [https://github.com/apple/swift-collections](https://github.com/apple/swift-collections)
25. swift-distributed-actors — [https://github.com/apple/swift-distributed-actors](https://github.com/apple/swift-distributed-actors)
26. Skip (Swift to Android) — [https://skip.tools/](https://skip.tools/)
27. Swift Wasm — [https://swiftwasm.org/](https://swiftwasm.org/)
28. Hacking with Swift — [https://www.hackingwithswift.com/](https://www.hackingwithswift.com/)
29. let's swift conference — [https://letsswift.kr/](https://letsswift.kr/)
30. iOSDC Japan — [https://iosdc.jp/](https://iosdc.jp/)
31. try! Swift Tokyo — [https://www.tryswift.co/](https://www.tryswift.co/)
현재 단락 (1/474)
2014年のWWDCでChris Lattnerが舞台に上がり「One more thing... a new programming language called Swift」と告げた瞬間、多くの...