/* Page prose (ja) */
"ClassicVsModernWrappingUp" = "# まとめ\n\nこれで、日常的な 1 つのタスク（2 つのものを取得し、組み合わせ、エラーを処理し、メインで届ける）を両方の方法で解決するのを見てきました。そしてモダン版は読みやすさ、安全性、そして純粋な行数で勝ります。とはいえ、正直な要点は「すべてを書き直せ」ではありません。何が何に対応するか、そしてどこで移行が実際に報われるかを知ることです。下のまとめは、その両方のための地図です。\n\n* モダンモデルは同じタスクで勝ちます。共有された可変状態がなく、`enter`/`leave` がなく、エラーの経路は 1 つで、`@MainActor` による自動的なメインスレッドへの移動があります。\n* すべてのクラシックツールにはモダンな対応物があります。\n  * completion handler ➡️ `async` 関数\n  * `DispatchGroup`/セマフォ ➡️ `async let`/`TaskGroup`\n  * シリアルキューによる保護 ➡️ **actor**\n  * `DispatchQueue.main` ➡️ **`@MainActor`**\n  * 手作業の `Operation` キャンセル ➡️ 協調的な `Task` キャンセル\n  * delegate/コールバック ➡️ `AsyncStream`/continuation\n* **クラシックは今なおその居場所を得ています。** 古い API、細かい単位のディスパッチ制御、`async`/`await` より前の OS ターゲット、そしてすでに動いているコードのためにです。書き直しはコストなので、罠は見返りのないところにそれを費やすことです。\n* **継ぎ目で移行する。** レガシーなコールバックを continuation でラップし、新しいコードはモダンに書き、場当たり的なロックを actor で置き換え、UI には `@MainActor` を採用し、Swift 6 の data race チェックを段階的にオンにします。\n* **境界は慎重に橋渡しする。** continuation は**ちょうど 1 回**再開するので、何度も発火するコールバックには `AsyncStream` が必要です。そして、`Task` の中で `DispatchGroup.wait()`/`semaphore.wait()` によって決してブロックしないでください。代わりに continuation で橋渡しして `await` しましょう。\n* **`@MainActor` は遅い作業を移動させません。** 注釈の付いたコードがメインで実行されることを保証するだけです。重い作業はメインの外の素朴な非同期関数で行い、`@MainActor` の部分は最後の小さな UI 更新にとどめましょう。\n* 2 つのモデルは**相互運用します**。混在したコードは移行の間、普通で予想されることです。\n\n---\n\n## 次に進む先\n\nこれで本全体です。メインスレッドでブロックされたたった 1 人のバリスタから、単一のプロセス内で共有状態を安全に保つ actor まで。クラシックモデル（GCD と Operations）とモダンなもの（`async`/`await`、構造化された並行処理、`AsyncSequence`、そして actor）に出会い、二番目が最初のものへの答えとして*なぜ*存在するのかを見てきました。\n\n概念は、自分が大切に思う何かでそれらを使って初めて本当に身につきます。そこで、締めくくりの励ましです。**自分自身のプロジェクトを 1 つ開き、モダンの章を再訪しましょう。** completion handler を見つけて `async`/`await` に変えてみましょう。ロックで守られた共有の可変値を見つけて `actor` にしましょう。カクつく画面を見つけて、その重い作業をメインスレッドの外へ移しましょう。それぞれの小さな変更が、1 つの章をしっかりと腑に落とすことでしょう。\n\n並行処理は、自分が所有するコードの中で、意図して動かせたその瞬間から、怖くなくなります。さあ、やってみましょう。準備はできています。\n\n---\n\n## ボーナストラック: マシンを越える actor\n\nactor のアイデアがどこまで伸びるのか気になりますか？この後にもう 1 つ、**[分散 actor](Distributed%20Actors.playgroundchapter/Overview)** という章が、おまけとしてあります。それは、同じ `await` で呼び出す感覚を、*他のプロセス、さらには他のマシン*に生きるオブジェクトへと運びます。実行できる実習というよりは読み進める概念ツアーなので、中心的なアイデアがしっかりしたと感じたときの、先取りの一望として扱いましょう。\n\n[前へ](@previous)  |  8 / 8 ページ";
