queue:forget
カテゴリ:アーティザンコマンド
タイプ:artisan
一言説明
失敗したジョブをfailed_jobsテーブルから単一で削除します。
テーブル肥大化を防ぐために使います。
コマンド構文
php artisan queue:forget {id}
| 引数 | 必須 | 内容 |
|---|---|---|
{id} |
○ | failed_jobs テーブルに保存されているジョブの ID |
備考
failed_jobsテーブルは ID 重複がないため、指定した ID が存在すれば必ず一件削除されます。
ID が無い場合はErrorExceptionが発生します。
実行例
# ID 42 の失敗ジョブを削除
php artisan queue:forget 42
失敗ジョブ一覧は
php artisan queue:failedで確認できます。
重要ポイント
| 項目 | 内容 |
|---|---|
| 単一削除のみ | 現状複数削除は不可。複数削除したい場合は queue:flush で全件消去するか、PR を検討してください。 |
| 失敗ジョブの管理 | 定期的に queue:flush で全件消去するとテーブル肥大化を防げます。 |
| プロセス管理 | queue:work は Supervisor 等で管理し、必要に応じて queue:restart で再起動します。 |
| ロギング | queue:forget で削除したジョブは再度実行されないので、実務ではログを残すようにしておくと安心です。 |
失敗ジョブを扱う他のコマンド
| コマンド | 主な用途 |
|---|---|
queue:failed |
失敗したジョブ一覧を表示 |
queue:flush |
失敗ジョブを全件一括消去 |
queue:retry |
失敗ジョブを再実行 |
queue:forget |
失敗ジョブを単一で消去 |
実践例(テストケース)
use App\Jobs\SendMailJob;
use Illuminate\Support\Facades\Queue;
use Tests\TestCase;
class QueueForgetTest extends TestCase
{
public function testQueueForgetDeletesFailedJob()
{
// 失敗ジョブを作成
Queue::fake();
dispatch(new SendMailJob('dummy@example.com'));
Queue::assertPushed(SendMailJob::class);
// 実際に失敗ジョブを取得
$failedJob = Queue::pushFailedJob(new \Exception('Test failure'));
// queue:forget を実行
$this->artisan('queue:forget', ['id' => $failedJob->getId()])->assertExitCode(0);
// DB から消えていることを確認
$this->assertDatabaseMissing('failed_jobs', ['id' => $failedJob->getId()]);
}
}
まとめ
php artisan queue:forget {id}で失敗ジョブを 1 件だけ削除- テーブル肥大化防止のため、必要に応じて
queue:flushで全件消去 - Supervisor 等でキュープロセスを管理し、失敗ジョブの定期的なクリーンアップを実施
- 公式ドキュメント: https://laravel.com/docs/12/queues
- GitHub Discussions(多重削除の議論): https://github.com/laravel/framework/discussions/43725
これで「失敗ジョブを忘れる」操作を最短で理解・実行できます。

