Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

クライアント側でつかまえて

3,489 views

Published on

http://connpass.com/event/607/ の例外とロギング勉強会のLTスライドです。
しゃべった部分を加筆しましたん

  • Be the first to comment

クライアント側でつかまえて

  1. 1. ライ麦畑で捕まえてThe Catcher in the RyeJerome David Salinger
  2. 2. アント側 クライ麦畑で捕まえてThe Catcher in the Rye ClientJerome David SalingerKaoru Shibasaki
  3. 3. 自己紹介
  4. 4. 自己紹介• とある動画配信サイトでFlashクライアント作ってます Kaoru Shibasaki Twitter ID : crexista
  5. 5. NICE CATCH してますか
  6. 6. try { var hoge:Hoge = new Hoge; hoge.fuga(); ======以下数百行 =====}catch(e:Error) { // Nice Catch (^ ー *) b}
  7. 7. try { var hoge:Hoge = new Hoge; hoge.fuga(); ======以下数百行 =====}catch(e:Error) { // Nice Catch (^ ー *) b}
  8. 8. 本当のNICEなキャッチを提案
  9. 9. Necessary Information for Customer Enjoymentユーザーが楽しむための情報をキャッチすること
  10. 10. NICE じゃない例
  11. 11. 例外のメッセージをそのまま表示するのみ 何が起きたか分からない!
  12. 12. アドレスとかどうすればいいのよ! てか怖いよ!
  13. 13. 普通の人はプロトコルとか分かりません 分からないのにOK押したくない !
  14. 14. 『[ネットワーク]で別の名前を指定してください』 だけで良いOK ではなくて 『コントロールパネルを開く』に押されたらネットワークの設定画面を開いてあげ
  15. 15. 原因よりも方法を先に、簡潔に
  16. 16. 良いNICE キャッチするにはどうしたら
  17. 17. 良いNICE キャッチへの3つの指針• ユーザーの選択は絶対!• 真実に向かおうとする意思• 覚悟する者は幸福である
  18. 18. ユーザーの選択は絶対!
  19. 19. 1. ユーザーの選択は絶対 !• クライアント側はユーザの選択に左右される• ユーザーの選択が例外を起こす事もある
  20. 20. 1. ユーザーの選択は絶対 !例) ローカルに変更情報を保存しようとしたとき ユーザーに保存することを確認
  21. 21. 1. ユーザーの選択は絶対 !例) ローカルに変更情報を保存しようとしたとき で、また何かのタイミングで保存
  22. 22. 1. ユーザーの選択は絶対 !例) ローカルに変更情報を保存しようとしたとき
  23. 23. 1. ユーザーの選択は絶対 ! ユーザーの選択は例外じゃない
  24. 24. 1. ユーザーの選択は絶対• ユーザーに拒否られたらあきらめよう!• 拒否られた事はもうしない
  25. 25. 真実に向かおうとする意思
  26. 26. 2. 真実に向かおうとする意思• クライアント側はユーザーの環境に左右される • 時計 • 通信 • Etc..• 起きたエラーの原因を見極める必要がある
  27. 27. 2.真実に向かおうとする意思例) HTTP で外部SWFを読み込んで例外が起きた場合 サーバに置いてあるswfをリクエスト InvalidSWFError バイナリに異常あるときの例外が飛ぶ サーバに置いてあるswf自体がおかしい可能性 通信時に障害がおこった可能性 ユーザーのHDDがおかしい可能性
  28. 28. 2.真実に向かおうとする意思例) HTTP で外部SWFを読み込んで例外が起きた場合 サーバに置いてあるswfをリクエスト InvalidSWFError バイナリに異常あるときの例外が飛ぶ もう一回だけリト ライ
  29. 29. 2.真実に向かおうとする意思例) HTTP で外部SWFを読み込んで例外が起きた場合 サーバに置いてあるswfをリクエスト InvalidSWFError バイナリに異常あるときの例外が飛ぶ それでも失敗した ら?
  30. 30. 2.真実に向かおうとする意思例) HTTP で外部SWFを読み込んで例外が起きた場合• 他のAPIやpingを打ってみる → 通信をチェック• テストデータをローカルに保存してみる → HDDをチェッ ク• Etc…2回やってだめだった処理は繰り返さない!
  31. 31. 2.真実に向かおうとする意思 private var retryCount:int = 0; public function tryRequest():void { try { request(); } catch(e:Error) { retryCount++; //マジックナンバー if (retryCount < 5) tryRequest(); } }
  32. 32. 2.真実に向かおうとする意思 private var retryCount:int = 0; public function tryRequest():void { try { request(); } catch(e:Error) { retryCount++; //マジックナンバー if (retryCount < 5) tryRequest(); } }
  33. 33. 2.真実に向かおうとする意思 理由のないリトライはサーバーにもクライアントにも負担
  34. 34. 闇雲にリトライせずに原因をチェックする処理へ
  35. 35. 覚悟した者は幸福である
  36. 36. 3. 覚悟した者は幸福である• クライアント側はシステムに左右される• 時にキャッチできない例外を飛ばす
  37. 37. 3. 覚悟したものは幸福である• プレイヤーのVersionが想定より古い と• 勝手に ↑ なダイアログが出る
  38. 38. 3. 覚悟したものは幸福である UIからかけ離れたものが いきなり出るとユーザーは混乱する
  39. 39. 3. 覚悟したものは幸福であるユーザーに覚悟をさせる
  40. 40. 3. 覚悟したものは幸福である違う機構(javascript)で制御してあげる ◯◯は新しくなりました 左のダイアログが出るか ら 「はい」をおしてね
  41. 41. 3. 覚悟したものは幸福である UIでラップしたダイアログを出した後 ↑ を表示
  42. 42. 結論• 原因じゃなくて対処法を出そう• 難しい文言はつかわない• リトライは1回まで• ユーザーの設定は例外扱いしない• デフォルトアラートは出さないように• 出す場合は対処法をユーザーに伝えてから
  43. 43. それでは、良いナイスキャッチを! Have a Nice Catch !

×