Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Swift6.2時代のconcurrencyを考える会
Search
野瀬田 裕樹
September 20, 2025
Technology
1.7k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Swift6.2時代のconcurrencyを考える会
iOSDC 2025 アンカンファレンス資料です
野瀬田 裕樹
September 20, 2025
More Decks by 野瀬田 裕樹
See All by 野瀬田 裕樹
iOS26時代の新規アプリ開発
yuukiw00w
0
250
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
340
Human Interface Guidelines 2
yuukiw00w
0
69
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
280
HIG学習用スライド
yuukiw00w
0
200
FlutterKaigi 2025: What is iOS Assistive Access? UI considerations for Flutter
yuukiw00w
0
63
実践!App Intents対応
yuukiw00w
1
500
App Intents再入門
yuukiw00w
0
91
Flutterで備える!Accessibility Nutrition Labels完全ガイド
yuukiw00w
0
290
Other Decks in Technology
See All in Technology
Docker Desktop不要の時代が来る? WSL標準の「wslc」で Linuxコンテナを動かしてみた.
ueponx
0
860
SREとQA 二人三脚で進めるSLO運用/sre-qa-slo
sugitak
0
130
依頼文化をやめる日 EM視点で語るPlatform EngineeringとInclusive SRE / Discussing Platform Engineering and Inclusive SRE from an EM's Perspective
shin1988
4
4.8k
AI時代のエンジニアキャリアについて今一度考える
sakamoto_582
2
1.4k
生成AIの活用/high_school2026
okana2ki
0
120
product engineering with qa
nealle
0
150
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
3
200
Empower GenAI with Agile - あなたのアジャイルが生成AIのバフになる仕組み
hageyahhoo
1
150
最適な自走を最小限の支援で — M&Aで拡大する組織で少人数SREが挑んだ1年 / SRE NEXT 2026
genda
0
730
知らん間に、回ってる
ming_ayami
0
380
なぜ私たちのSREプラクティスはなかなか機能しないのか 〜システムより先に組織を見る〜 / Why our SRE practices aren't really working
vtryo
3
3.2k
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
3.2k
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
630
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Tell your own story through comics
letsgokoyo
1
990
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
180
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
370
Exploring anti-patterns in Rails
aemeredith
3
440
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
420
Measuring & Analyzing Core Web Vitals
bluesmoon
9
880
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.7k
Transcript
Swift 6.2時代の concurrencyを考える会 @ynoseda
Swift 6.2の新しい機能 • Approachable concurrency • Default Actor Isolation •
@concurrent
Swift 6.2の新しい機能 • Approachable concurrency • Swift 6だと以下の2つを有効にするのと同じ ◦ NonisolatedNonsendingByDefault
◦ InferIsolatedConformances
Swift 6.2の新しい機能 • Approachable concurrency • Swift 5だと以下の5つを有効にするのと同じ ◦ NonisolatedNonsendingByDefault
◦ InferIsolatedConformances ◦ InferSendableFromCaptures ◦ DisableOutwardActorInference ◦ GlobalActorIsolatedTypesUsability
NonisolatedNonsendingByDefault • nonisolatedな非同期関数の挙動が変わる • https://docs.swift.org/compiler/documentation/diagnostics/nonisolated-nonsen ding-by-default/ • NonisolatedNonsendingByDefaultが無効 ◦ nonisolatedな非同期関数はsendingがデフォルト
• NonisolatedNonsendingByDefaultが有効 ◦ nonisolatedな非同期関数はnonsendingがデフォルト ◦ asyncなnonisolated関数を呼んだとき、呼び出し元の actor上で処理が実行される ◦ MainActorから呼び出すとMainActorで実行されるようになる
InferIsolatedConformances • isolated conformanceの概念が導入される • https://github.com/swiftlang/swift-evolution/blob/main/proposals/0470-isolated- conformances.md • nonisolatedなprotocolをactor隔離された状態でのみ適合する感じ •
MainActorのclassにprotocolの準拠を追加しようとしたとき、protocolが nonisolatedを要求していて困っていた事象が解決される ◦ NonisolatedNonsendingByDefault ◦ InferIsolatedConformances
Default Actor Isolation • 何もactorを指定してない状態のときにnonisolatedとMainActorのどちらをデフォル トにするか設定できる • Default Actor IsolationをMainActorにしているとSwift
5系までと近い感覚で実装 できるようになる
@concurrent • DispatchQueue.globalみたいなもの • バックグラウンドで処理したい関数に@concurrentをつけるだけでよくなる
Swift 6.2時代のconcurrency • Default Actor Isolation = MainActor • Approachable
concurrency = true • こうするとどうなるか?
Swift 6.2時代のconcurrency • Default Actor Isolation = MainActor & Approachable
concurrency = true • 非同期処理が必要になるまでは全てがMainActorになる
Swift 6.2時代のconcurrency • Default Actor Isolation = MainActor & Approachable
concurrency = true • 非同期処理が必要になるまでは全てがMainActorになる ◦ static varも許される ◦ Swift 5系と同じ感覚で実装できる
Swift 6.2時代のconcurrency • Default Actor Isolation = MainActor & Approachable
concurrency = true • 非同期処理が必要になるまでは全てがMainActorになる • 非同期処理が必要な場合も基本的に async 関数にするだけでいい • URLSessionなど標準のAPIのasync関数を叩く時もMainActorから叩いていい • 良い感じに必要ならバックグラウンドスレッドで処理してくれる
• Default Actor Isolation = MainActor & Approachable concurrency =
true • 非同期処理が必要になるまでは全てがMainActorになる • 非同期処理が必要な場合も基本的に async 関数にするだけでいい • 重い処理をバックグラウンドで処理したい場合は@concurrentを付けるだけでいい • 同じactorで処理したい要件が出てくるまで(非同期処理に真面目に向き合う必要 が出るまで)はactorをあまり意識しなくていい Swift 6.2時代のconcurrency
Swift 5からSwift 6で苦しんでいる人へ • Default Actor Isolation = MainActor &
Approachable concurrency = true • この設定でかなり修正量が減るのでおすすめ • Xcode 26対応と合わせてSwift 6対応を進めるのが良い感じ
iOSアプリでどこまでactorを意識する? • 同じactorでも同じスレッドで処理するわけじゃない • 同じactorのインスタンスを作ってawait関数を2回叩いたら、違うスレッドで処理され ることもある • nonisolatedな関数を叩いたときにスレッドが変わる?変わらない • そもそもnonisolatedとかnonsendingとか何
• etc
iOSアプリでどこまでactorを意識する? • Swift5系まで意識しなかったはずのあれこれが、Swift 6~6.1では意識させられるよ うになった • Swift 6.2 x Approachable
Concurrency x Default Actor Isolation = MainActorで 「必要になるまでは意識しない」という環境になった
大規模アプリならactorを意識する? • アーキテクチャーとしてマルチパッケージでわけている場合に、全てをDefault Actor Isolation = MainActorにすべき? • 例えばRepositoryか実際のデータアクセスはactorにすべき? •
Entityはnonisolatedの方がいい?
大規模アプリならactorを意識する? • アーキテクチャーとしてマルチパッケージでわけている場合に、全てをDefault Actor Isolation = MainActorにすべき? ◦ できれば全部MainActorの方が考えることは少ないかも ◦
でも明確にactor isolationを意識する必要がある部分をパッケージにわけているなら、 Default Actor Isolationをnonisolatedにしてもいいかも • 例えばRepositoryか実際のデータアクセスはactorにすべき? ◦ 実際のデータアクセスが例えば URLSessionなら勝手にバックグラウンドスレッドで処理してくれる はずなので、MainActorでいい ◦ 画像のdecode処理などで特定の重い処理を隔離したい場合は actorにする • Entityはnonisolatedの方がいい? ◦ MainActor外からも呼び出される可能性がある場合は nonisolatedが良い ◦ 多分App Intentsとかから呼び出されることとかも考慮すると nonisolatedで良いかも