Skip to content

try-catch の判断 ― 握りつぶすか、投げ直すか

📖この章のキーワード
用語意味なぜ重要か
例外(Exception)異常事態を表すオブジェクトthrow で発生、catch で捕捉
握りつぶしcatch して何もせず(または再 throw せず)処理を続けることリトライ機構が無効化される
再 throwcatch した例外を再度投げることフレームワークに失敗を伝える
failed_jobs全リトライ失敗後に記録されるテーブル原因調査と手動再実行に使う

Phase 1: 観察

2 つのパターンを比較します。

php
// パターン A: 握りつぶし(SendMessage)
// Label: trade-off
public function handle(): void
{
    try {
        $line->pushMultiMessage($friend->friend_id, $messages);
        $message->update(['status' => Message::STATUS_SENT]);
    } catch (\Exception $e) {
        $message->update(['status' => Message::STATUS_FAILED]);
        // ← 例外を再 throw しない → Laravel は「成功」と認識
    }
}
php
// パターン B: 再 throw(ProcessBatchImportChunkJob)
// Label: exemplar
public function handle(BatchImportService $service): void
{
    try {
        $service->processChunk($job, $this->rows);
    } catch (\Exception $e) {
        Log::error('Chunk processing failed', ['error' => $e->getMessage()]);
        throw $e;  // ← 再 throw → Laravel がリトライを判断
    }
}

Phase 2: 判断

AI禁止ゾーン
  • パターン A(握りつぶし)で LINE API が一時障害 だった場合、何が起きますか?
  • パターン B(再 throw)だと、同じ状況でどうなりますか?
  • いつ握りつぶすのが正しく、いつ再 throw すべきですか?

AIに聞く前に、自分の頭で考えてみましょう。

テキストを入力すると有効になります