/* Page prose (ja) */
"JobInThreeSteps" = "# 三つの依存し合うステップからなるジョブ\n\n**印刷所**に戻りましょう。冊子を作るには、三つのことが*順番に*起こる必要があり、それぞれが一つ前のものを必要とします。\n\n1. **デザインを読み込む**（印刷元となるテンプレート）。\n2. そのデザインから**校正刷りをレンダリングする**（何ページになるか）。\n3. そのページ数から**冊子を綴じる**。\n\n三つの非同期のビルディングブロックがこちらです。それぞれが `asyncAfter` を使って実際の待機（ディスク読み込み、レンダリング、製本作業）をシミュレートし、`Result` を運ぶ completion handler を通じて結果を返します。各ステップは前の結果を必要とするため、各呼び出しは一つ前のハンドラーの内側に入れ子になります。これを小さなクラスに入れることで、現実世界のある細部もついてきます。クロージャが `self` をキャプチャするため、循環参照について考えなければならないのです。";
"JobInThreeSteps-2" = "**実行して確認:** 約1.5秒後に `✅ Ready: Booklet(12 pages)` と表示されます。動作します。しかし、三つの順序立てたステップを動かすために*何が必要だったか*、そして代わりにこれがうまくいかなくなり得たあらゆる場所を見てみましょう。\n\n* callout(試してみよう): `DispatchQueue.main.async { ... }` のラッパーを削除して、`completion(.success(booklet))` を直接呼び出してみましょう。ここでは出力が同じに見えますが、それこそが、忘れられたメインスレッドへの移動がいとも簡単に出荷されてしまう理由です。\n\n[前へ](@previous)  |  3 / 6 ページ  |  [次へ: バグはどこに潜むか](@next)";
