記事一覧

エラーを制するものはプログラムを制する



 

あなたの後ろにすぐエラー

ハロー、みなさん。エジソンです。

今回は、プログラムのエラーに対処するための心構えのようなものをしたためてみます。
 
先日、社内のとあるプロジェクトにて、全メンバーの開発端末からDBに接続できなくなるというエラーが発生しました。
 
そのような状況に陥ったことを推測するに、色々と要因があったのではと思います。
 
メインプログラマーが抜けた直後であった事、開発端末が変わった事、DBのスクリプトが最新になりCREATE TABLEを再発行し直した事など。色々な要因で、正常に動作する環境が崩れてしまったのでしょう。
 
そのような、DBに接続できないという状況が中々解消できないまま、エラー発生から半日が過ぎ、有識者のテコ入れが行われ、ようやくエラーが解消したのでした。

 

エラーの原因は意外に些細?

開発端末からDBに接続できなかった原因は、思い返してみると些細なことが原因だったようです。原因というのは得てして些細なことが多く、原因追及に時間が掛かるのが常と言えるのかもしれません。
 
原因には幾つかパターンがあったようで、各担当者ごとにエラーの原因がことなっていました。
 
原因の一つとしては、CREATE TABLEを実施する対象DBカタログが異なっていたため、DBに接続できなかったことがありました。  
 
他には、アプリケーションから接続するユーザーIDとパスワードが異なっていたということも原因になっていました。
 
また、そもそもDBのデータファイル(プログラムファイル)自体も壊れてしまっていたため、再インストールが必要な人もいました。  
 
これらのエラーを解決するには、まずエラーメッセージに向き合う事が重要です。エラーメッセージにどんなメッセージが表示されているのか。英語が分からなければ、翻訳して見ることが重要です。エラーメッセージ内のエラーコードに注目することも大事です。
 
エラーコードと製品名を一緒にして検索すれば直ぐにでも答えが見つかる可能性があります。
 
まずは、エラーメッセージに向き合いそこから原因を探るべく推理していくことで解決に繋げることができるかもしれません。
 
今回のように「DBに接続できない」エラーを解消するためには、そもそも大前提を調べてみることも重要で、例えば以下のような疑問を挙げて、原因を追及していくことも大事です。
       
  • DBのサービスは起動しているのだろうか?
     → オブジェクトブラウザで接続確認してみる。     
  •    
  • 接続先のDBは本当に存在しているのか?
     → オブジェクトブラウザで対象DBに接続してみる。     
  •    
  • 接続文字列のスペルは間違いないか?
     → 設定ファイルを確認してみる。
  •    
  • 接続文字列のユーザー・パスワードで本当に繋がるのか?
     → オブジェクトブラウザで対象ユーザーで接続確認してみる。     
  •    
  • リモートサーバーのDBに接続している?
     → サーバー側がローカル端末からの接続を受け付けているかの確認が必要。ファイアウォールとか、セキュリティ設定とか確認してみる。     
  •  
   
エラーに対処するスキルというものは、一朝一夕で身につけるのは難しく、経験がものを言うところもありますが、日々の作業の中で、エラーメッセージごとの対処法を辞書として自分の中で蓄積していくことも大事なことです。
 
また、エラーが発生した際の心持ちを変えてみることでも、対応が大きく変わることがあります。
 
 

エラーに臨む姿勢を考えてみる

中々解決できないエラー。無駄に過ぎていく時間。プログラミングというのはエラーやバグとの戦いです。如何にして、スムーズにエラーやバグを取り除いていくかが勝負の分かれ目。
 
プログラマが心地よくタイピングしている時間というのは、実は全体の3割ぐらいなのではないかなーと漠然と思います。それ以外の時間は実装に関することに頭を悩ませていたり、上述したようにエラーやバグを解消するために手を走らせていると思う訳です。
 
そのようなエラーやバグを取り除く作業時間を如何にして短縮できるかが、プログラマーの腕の見せ所であるとも言えるでしょう。  
 
僕がプログラムを仕事にして学んだ事の一つにこんな事があります。
 
エラーとは因果である
 
因果について、Wikipediaに聞いてみましょう。  
 
Wikipedia - 因果 … 正統バラモン教の一派に、この世のすべての事象は、原因の中にすでに結果が包含されている、とするものがある …
   
因果とは即ち、原因と結果です。ここでいう結果とは、エラーです。原因とはエラーが引き起こされる要因になった事です。
 
コンピュータは正確なので、正常で動作する状況を再現できるなら必ず正しく動作します。正常で動作する状態というのは、例えばOSの状態、ネットワークの状態、各種ミドルウェアの状態、さらにはプログラムコードの状態などが該当するでしょう。
 
エラーになるという事は、正常な状態が崩れた状態、即ちエラーになる状況を作り出してしまっているという事に他なりません。
 
昨日まで正しく動いていたものが、今日動かないという事は、何かが変わったという事です。ことプログラミングに関しては、何かが変わってしまう原因というのは大抵が人為的なものです。
 
99.9% 人為的であると断言しても過言ではないかもしれません。
 
要するに、僕やあなたが悪いのです。当事者である人間が大抵悪いのです。
 
このように原因を自分に求めるというのは結構大事な事で、人というのは自分に甘く、何かが起きると無意識の内に自分以外の何かに原因を求めてしまうのです。その結果何が起きるのかというと、頭がフリーズしてエラーの解決に向けての行動が止まってしまうのです。
 
そのように自分の行動を止めてしまわないということの一つに、「僕が悪くて、プログラムが動かない」という謙虚な立ち位置にポジショニングするわけです。そうすれば、自然とエラー解決に向けて歩を進めていけるはずなのです。
 
もう一つ、是非とも紹介したい言葉に、マーフィーのこんな言葉があります。  
 
失敗する余地があるなら、失敗する  
        
Wikipedia - マーフィーの法則    マーフィーの法則(マーフィーのほうそく、英: Murphy's law)とは、「失敗する余地があるなら、失敗する」「落としたトーストがバターを塗った面を下にして着地する確率は、カーペットの値段に比例する」をはじめとする、先達の経験から生じた数々のユーモラスでしかも哀愁に富む経験則をまとめたものである(それが事実かどうかは別)。多くはユーモアの類で笑えるものであるが、認知バイアスのサンプルとして捉えることが可能なものもあり、中には重要な教訓を含むものもある。 …
     
これは大変に正しく、そして守るべき真理です。失敗する余地があるなら失敗するという事は、失敗する余地を考えずに作られたものというのは、必ずエラーを引き起こします。
 
エラーが起きたりバグが発生するという事は、手を抜いていたり、考えが足りずに物事を進めてしまったという事に帰結できます。
 
 

エラーは友達、怖くない

キャプテン翼のお話。翼くんがゴールキーパーである森崎くんに語りかける有名なシーンがあります。それはこんな一コマ。
 
ボールが怖くなってしまった森崎くんを立ち直らせるために、翼くんが顔面ブロックで身を呈してボールを止め、ボールは友達怖くないと、森崎くんに語りかける屈指の名シーンです。
 
良い名言というのは、主語を替えても成り立つということを教えてくれますね。
 
何故、エラーが友達かというと、   エラーはその場で発生したほうが良いからです。エラーというのは対処しなくては先に進めない物事なので、その場でプログラムがストップしてしまうことは、実は優しいことなのです。
 
もし、エラー君やエラーちゃんが、何も言わずに放置していたら後で大惨事なわけです。   サイレントエラー(物言わぬ沈黙のエラー)ほど怖いものはありません。
 
人間も体が危険な状態に陥った場合に痛みというメッセージで本人に教えてくれます。ウイルスが体に入ると熱を出して教えてくれることもあるでしょう。
 
エラーが発生するということは、何より恵まれていることなのです。感謝の気持ちを持ちましょう。
 
 

ミドルウェアが発するエラーメッセージ

エラーは友達。そして、丁寧な言葉でエラーの現象を伝えてくれる”エラーメッセージ”を発してくれる友達です。
 
エラーメッセージというものを今一度考えてみたいのですが、プログラマであれば、大抵はミドルウェアから発せられるエラーメッセージに向き合う事が多いと思います。
 
ミドルウェアが発するエラーメッセージには、コミュ力がある、と僕は言いたいのです。
 
ミドルウェアというのは、例えばDBであったり、APサーバーであったり、言語であったり様々ですが、言い換えるとプログラマがシステム開発に利用するソフトウェア群のことですね。
 
エラーメッセージの表現というのは難しく、何が起きているのかという事象を表現する存在です。こんな風に修正したら直るかもよ、という気の利いたメッセージを発してくれるわけではなく、今現在こんな感じだよー、というメッセージを淡白に伝えてくる存在です。  
 
融通は利きませんが、そこに主観というノイズが混ざらないため、後の判断をプログラマに委ねてくれるのです。  
 
ミドルウェアというのは、とても正確にメッセージを発してくれるように設計されていますから、英語だからといって耳を塞がず、目をこらして確認することが大事です。
 
分からなければググって見ましょう。答えは意外なところに転がっているはずですよ。
 
 
関連記事

このエントリーをはてなブックマークに追加

コメント

コメントの投稿

非公開コメント

プロフィール

EZOLABブログへようこそ。
EZOLABは、札幌のソフトウェア会社です。

http://ezolab.co.jp