同期の処理と非同期の処理 (キュー、イベント) を、どう使い分けますか

利用者がすぐ結果を待つ物は同期、メールの送信や画像の処理や外部との連携は非同期、と分ける問い。非同期にするなら、再試行、冪等性、失敗したジョブの退避をセットで作る、まで答えます。

答えてみる

面接官に「同期の処理と非同期の処理 (キュー、イベント) を、どう使い分けますか」と聞かれたつもりで、答えを見る前に自分の言葉で答えます。

声に出して答えた人は「書かずに答えを見る」で開けます。

解説を読む

聞かれ方から関連するコースまで、この問いの解説を全部ここに置いています。

こう聞かれます

  • 「同期処理と非同期処理 (キュー、イベント) を、どう使い分けますか」
  • 「会員登録のあとに歓迎のメールを送ります。登録の処理の中で送りますか」
  • 「キューに入れた仕事が失敗したら、どうしますか」

面接官が見ている点

  • 技術の好みではなく、利用者の待ち時間と、ビジネスで落としてはいけない処理の両方から決められるか
  • 非同期にすると増える心配 (失敗、二重の実行、順番) を知っているか
  • 再試行、冪等性、デッドレターキューをセットで語れるか

短い答え

  • 利用者がその場で結果を待つ処理は同期に、メールの送信、画像の処理、外部のサービスとの連携は非同期にします。
  • 時間のかかる処理や、相手の都合で失敗する処理を同期で待つと、画面が遅くなり、相手の障害がこちらの障害になるからです。
  • 非同期にするなら、再試行、何度実行しても結果が同じになる作り (冪等性)、失敗したジョブの退避をセットで作ります。

少し詳しい答え

分け方

  • 同期ログイン、残高の表示、注文の確定のように、結果を見ないと次に進めない処理
  • 非同期歓迎のメール、画像の縮小、外部の会計サービスへの連携のように、少し遅れてもよく、時間がかかったり失敗したりしやすい処理

非同期では、処理を「仕事」としてキュー (順番待ちの列) に入れて、すぐ利用者に返します。裏で動く別の処理 (ワーカー) が、列から仕事を取り出して片付けます。

登録の API
  → 利用者を保存
  → 「メールを送る」を列へ
  → すぐ「登録しました」と返す
ワーカー
  → 列から取り出して送る

セットで作る 3 つ

  • 再試行外部のサービスは一時的に失敗します。間をあけて何回か試し直します
  • 冪等性再試行やキューの都合で、同じ仕事が 2 回届くことがあります。仕事ごとに番号を付け、済んだ番号は飛ばすようにして、メールが 2 通届かないようにします
  • デッドレターキュー何回試しても失敗する仕事は、別の列に退避します。そこに溜まったら知らせが届くようにし、人が原因を見て直してから流し直します

トレードオフ

非同期にすると、画面は速くなり、外部の障害にも強くなりますが、処理の流れを追いにくくなり、「いつ終わったか」を利用者に伝える仕組みも要ります。キューやワーカーという動かす物が増えるので、監視の手間も増えます。処理が短く、失敗してもその場で「もう一度押してください」と言えば済む物は、同期のままのほうが単純で安全です。

よくある間違い

  • 何でも非同期にする動く物が増え、不具合を追うのが難しくなります
  • 再試行だけ付けて冪等性を考えない同じメールや同じ請求が 2 回出ることがあります
  • 失敗した仕事を捨てる何が落ちたか分からなくなります。退避して、知らせが届くようにします

深掘りの問い

  • 「仕事の順番が大事なときは」同じ利用者や同じ注文の仕事だけは順に処理されるよう、まとまりごとに並べる、と答えます
  • 「利用者に終わったことをどう伝えますか」状態を保存しておき、画面から定期的に確かめるか、終わったら通知を送る、と答えます
  • 「再試行の間隔は」回を重ねるごとに間を広げ、相手が回復する時間を作る、と答えます

確認日 2026年10月24日

技術面接問題の一覧へ戻る