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

楽しく向き合う例外対応

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for okutsu okutsu
February 20, 2025

 楽しく向き合う例外対応

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

Avatar for okutsu

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