Appearance
try-catch の判断 ― 握りつぶすか、投げ直すか
この章のキーワード
| 用語 | 意味 | なぜ重要か |
|---|---|---|
| 例外(Exception) | 異常事態を表すオブジェクト | throw で発生、catch で捕捉 |
| 握りつぶし | catch して何もせず(または再 throw せず)処理を続けること | リトライ機構が無効化される |
| 再 throw | catch した例外を再度投げること | フレームワークに失敗を伝える |
| 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に聞く前に、自分の頭で考えてみましょう。
テキストを入力すると有効になります