6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Livesenseその2Advent Calendar 2016

Day 3

エンジニアなりたての私がRailsのエラーについて考える(居酒屋編)

Posted at

はじめまして、こんにちは。
今夏に営業からエンジニアにジョブチェンジをしたdhk-kです。
よろしくおねがいします。

アドベントカレンダー参戦にあたって、泣いて喚いて断っていたのですが、せっかくということで、こうして寄稿させていただくこととなりました。

まえがき

さて、前述の通り私は、この夏7月頃にエンジニアにジョブチェンジをいたしました。
エンジニア歴5ヶ月のひよこでございます。
弊社入社前でも、保険会社で営業をしていたため、プログラミングの知識は一切ない状態からのスタートでした。

そんな私に技術的な話は不可能と言っても過言ではないでしょう。

テーマを考える

そこで、はて、どういった観点から、記事を作成しようかと、悩みに悩みました。
趣味関連でいくか、業務関連でいくか…。

一部ピックアップ
・FG試投数から考察する来週のBリーグの勝敗予想
 ・これは絶対ゆくゆくやる
・NBA移籍情報の自動取り込みデータベース化
 ・NBA関連のサイトを見るために英語の勉強が必要だ...
・エンジニアになる前はわからなかったこと
 ・この5ヶ月間すべてそうだったので書ききれない
・やっぱ筋肉いっちゃう??
 ・二番煎じ感満載なので、やめておこう...

悩みに悩んだ結果、改めてきちんと理解しなければいかないと思っていることを、今後自分と同じようにまったくの未経験からジョブチェンジしたひとのために、~~そして、自分自身の頭の整理のために、~~ここにまとめようと決意しました。

そのため、内容としては、いろはのいレベルにすら至っていないので、温かい目で見守っていただけると幸いです。
なんせ、ようやくハイハイで動き回るようになった赤ちゃんエンジニアですので...

素人の私がエラーを理解する(居酒屋でたとえる編)

赤ちゃんのくせに居酒屋に例えるとは何事か、と思われる方も多いでしょうが、安心してください。
実は、私三十路手前の立派な大人でございます。

私自身、エラーの処理を初めて実装したときに、周りのみなさまに教えていただいたことを、頭の中で「たとえ」をイメージしていたからであり、ふざけているわけでは決してありません。

では、初学者必読「たのしいRuby」をお供にまずは、いちから勉強していきます。

エラーの種類

・データのエラー

家計簿の計算を行う際に、金額があるべき欄に商品名が書かれていては必要な計算ができません。

なるほど。これはわかりやすいですね。
生ビールの値段が、瓶ビールなどという記載があったら、大変です。
割り勘ができません。

・システムのエラー

ハードディスクの故障のような明らかな障害や、(中略)プログラムの力だけでは回復できない問題が起こることもあります。

お客様「生ビール3つ!」
店員さん「かしこまりー」「オーダー!生3つ~!」
とここまでうまくリクエストが伝わってきたものの、キッチン担当が倒れて動けない

この場合は、お客様のもとへ生ビールが行き届くことはないでしょう。
まず、救急車を呼ばなくてはなりません。

・プログラムのミス

存在しないメソッドの呼び出しや、引数として渡す値の誤り、(中略)プログラムのミスによるエラーも考えられます。

メニューに誤って記載されている為、お客様からは発注を受けてしまうケースがこちらですね。
お客様「麻婆豆腐ひとつと、餃子ふたつ!」
店員さん「当店では、麻婆豆腐は扱っておりません」
お客様「いやいや、メニューに書いてあるじゃん!」
店員さん「当店では、麻婆豆腐は扱っておりません」
揉めますね。

対処

・エラーの原因を取り除く
・無視して続行する
・エラー発生前の状態を復元する
・もう一度試す
・プログラムを終了する
ふむふむ。

エラーの原因がユーザにある場合や、プログラム自身がエラーの原因を取り除くことができない場合は、ユーザに対して、わかりやすいエラーメッセージを報告しなければ、やはり使いにくいプログラムとなってしまうでしょう。

なるほど。至言ですね。きちんと例外を拾って、表してあげることこを、皆様に好まれるよい居酒屋となるための一歩なわけですね。

エラーの種類に応じて、それぞれ適当な例外処理を与えてあげる必要がある、と。

居酒屋をイメージしつつエラーについて考える

では、例外設計を考えていきましょう。
ブラウザとサーバをそれぞれ、お客様とお店としましょう。
いきなり苦しい...

エラーの分類

居酒屋におけるエラーとはどういったことが想定されるでしょうか。
ここで、注文した料理が

・Case1:お客様がメニューにない料理を発注してきたとき

・Case2:ホールスタッフが厨房までメニューを伝えられないとき

・Case3:ホールスタッフがストライキで帰ってしまったとき

なるほど、どうやらお客様起因のエラーと、当店起因のエラーのおおまかにふたつにわけられることがわかりました。
Case1がお客様起因、Case2、Case3が当店起因のエラーです。

対処

前段で2つのエラーがあることがわかりました。
それぞれ如何にして対処するかが必要です。

・Case1については、優しく諭してあげることが重要ですね。
答えはこうです。

店員「お客様当店では、そのメニューは扱っておりません。」

これだけでは、不十分ですね。
さらに、こうです。

店員「同様の味付けでしたら、ホッケの塩焼きがおすすめですよ。」

ここまで伝えてあげて正しい挙動へ誘導してあげましょう。

・Case2、3については、お客様から「注文が来ない」と言われ次第、謝り倒してすぐに対処、居酒屋としては状況に応じて割引なども検討するのもひとつですね。
答えはこうです。

店員「申し訳ございません!すぐに作ります!」
Case2では、メモを取らせるようホールスタッフを指導しなおす、Case3については、すぐに新しいキッチンスタッフを立てなければいけません。

ただ、それではあまりにお待たせすることになるので、緊急対応としてCase2ではキッチンスタッフが直接オーダーを伺いに行く、Case3では私が自ら調理をすることとなるでしょう。

最後に

私の拙いおつむでは、周りの支えてくださるエンジニアの方々の説明を、このように頭の中でイメージを置き換えて理解を進めていきました。
もし、言葉がわからないよ...ということでお悩みの未経験エンジニアの方がいらっしゃれば、身近なことに置き換えて少しずつわかっていくのもよいかもしれません。

正直まだまだ理解できていない点が多く、本記事の中でも意味不明な説明をしてしまっていること、あるいは、正しくない説明をしてしまっているかもしれません。
この場を借りて、深くお詫び申し上げます。

以上をもって、本記事を結ばせていただきます。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?