Upgrade to Pro — share decks privately, control downloads, hide ads and more …

楽しく向き合う例外対応

okutsu
February 20, 2025

 楽しく向き合う例外対応

PHPカンファレンス名古屋2025の登壇資料です

okutsu

February 20, 2025
Tweet

Other Decks in Programming

Transcript

  1. $whoami = [ '名前' => 'おくつ', '所属' => '株式会社カオナビ', '職種'

    => 'バックエンドエンジニア', '特技' => '暮らし', '一言' => 'スイカが好きです', ]; #phpcon_nagoya 自己紹介 2
  2. 報告 原因 調査 / 再現確認 報告 対応 振り 返り 報告

    検知 対応 検討 #phpcon_nagoya 対応の流れ 5
  3. データがなかった場合 元 $user = User::find($id); return response()->json([ 'id' => $user->id;

    // $userがnullの時、ここでエラーになる ]); #phpcon_nagoya 対応検討 18
  4. データがなかった場合 こうする $user = User::find($id); if (!$user) { // データが存在することをチェックする

    throw new NotFoundHttpException('該当のユーザは見つかりませんでした。'); } return response()->json(['id' => $user->id;]); ※ Laravel は、あらかじめいくつかのタイプのエラーを無視しています。NotFoundHttpException は無視 されています。 #phpcon_nagoya 対応検討 19
  5. ユーザ入力値に問題がある場合( もしくは不正なリクエスト) 元 $user_name = $request->input('user_name'); // usersテーブルのnameにNOT NULL 制約あり

    User::create(['name' => $user_name]); リクエストの 'user_name'  がnull の時... #phpcon_nagoya 対応検討 20
  6. ユーザ入力値に問題がある場合( もしくは不正なリクエスト) こうする // バリデーションで弾かれた場合、ValidationException $request->validate([ 'user_name' => 'required|string|min:3|max:20', ]);

    $user_name = $request->input('user_name'); User::create(['name' => $user_name]); ※ レスポンスを受け取る側で、エラーメッセージを表示する仕組みを作る必要があります。 #phpcon_nagoya 対応検討 21
  7. ユーザ操作には影響させなくてよい場合 たとえばログ通知の失敗とか、特定のオプション機能の失敗など class MyCustomValidationException extends Exception try { // 何か処理

    } catch (MyCustomValidationException $e) { // 独自例外のみ捕捉し、何かする } // その他の例外はそのままthrow #phpcon_nagoya 対応検討 22