/* Page prose (ja) */
"MigrationStrategy" = "# 実践的な移行戦略\n\nアプリを週末で書き直すことはできませんし、すべきでもありません。どのステップでも安全な道筋に沿って移行しましょう。\n\n**1. レガシーなコールバックを境界でラップする。**  \n最もてこの効く一手です。completion handler の API を取り、**continuation** を使って `async` の顔を与えます。これで、そのラッパーより*上*のすべてはモダンになれる一方、その下にある古い実装は手を触れられずに動き続けます:";
"MigrationStrategy-2" = "**2. *新しい*コードはすべて `async`/`await` で書く。**  \ncompletion handler を追加するのをやめましょう。新機能はモダンに始まり、必要なところでラップされたレガシー層を呼び出します。\n\n**3. 場当たり的なロックを actor で置き換える。**  \nシリアルキュー、`NSLock`、あるいは何らかの共有状態を守るカウント 1 のセマフォを見つけたら、それは **actor** になる有力候補です。分離は「呼び出す側の全員がルールを覚えていなければならない」から「コンパイラがそれを強制する」へと移ります。\n\n**4. UI には `@MainActor` を採用する。**  \nview model と UI に触れる型に **`@MainActor`** を付けましょう。これは「メインに戻り忘れた」というバグのカテゴリを丸ごと消し去ります。コンパイラが今やメインスレッドであることを追跡してくれるからです。\n\n**5. Swift 6 の data race 安全性へ段階的に進む。**  \nより厳格な並行処理チェックをオンにし、警告を一度に 1 モジュールずつ修正しましょう。各警告は、以前は見えなかった実際の（または潜在的な）data race をコンパイラが指し示しているものです。緊急事態ではなく、やることリストとして扱いましょう。言語モードは、一度にすべてではなく段階的に進むことを可能にします。\n\n---\n\n一貫した筋: **継ぎ目で近代化する。** 境界をラップし、その上のモダン側に新しい作業を築き、一気の書き直しを要求するのではなく、古い側が時とともに縮んでいくに任せます。\n\n[前へ](@previous)  |  6 / 8 ページ  |  [次へ: どのツールをいつ](@next)";
