問題が発生したときの原因の特定から解決までのコツ

不具合やトラブルに直面したとき、「問題の原因を特定する」そして「問題を解決するために必要な情報をあつめる」という工程が必要になりますが、その際のコツを紹介します。

問題の原因を特定する

エンジニアの仕事をしていると、多くの問題に出くわします。そのような状況のときに必要になってくるのが「いち早く原因を特定する方法」です。

例えば、問題が発生している場面として次のような状況があります。

  • アクセスしても画面に何も表示されない
  • 昨日まで問題なかったが突然画面にエラーメッセージが表示された
  • お問い合わせフォームでメールが送信されない

このような状況に直面しても、落ち着いて、順を追って原因の可能性を絞り込んでいけば、すみやかに原因まで到達できます。イメージとしては「原因を探す」というよりは「確実に原因でないところを消していき、原因をあぶりだす」感じです。

私は、次の方法で原因をあぶりだしていきます。

  1. サーバーが出力しているログを確認してエラーメッセージを確認する
  2. デバッグ用のコードをプログラム中に仕込み、どこで処理が止まっているのか切り分けする
  3. 発生している問題と同じ事象がネット上に報告されていないか検索する

たいていは「1.」のエラーメッセージを確認することで原因は特定できます。一番良くないのは、当てずっぽで調べていく方法です。すぐに原因にたどりつくかもしれませんが、所詮「かもしれない」です。刑事ドラマの捜査と同じく、初動のミスは大きな時間のロスです。単純で時間がかかりそうですが「一つずつ原因の可能性を消していく」を方法が一番の近道です。

問題を解決するために必要な情報をあつめる

原因を特定できたら、次は解決しなければなりません。解決すべき方法をすでに知っているのであれば、すぐ手を動かすだけですが、わからないのであれば、調査する必要があります。

情報はネットで検索しますが、検索に使用するキーワードや閲覧するサイトによっても情報の精度や解決方法にたどりつくスピードが異なります。やみくもに疑わしいキーワードで検索しても、なかなか目的の情報にたどりつけず、見つけては検証の繰り返しで時間の無駄です。

 最短で目的の情報を取得するためには、正確なインプット情報が必要になります。問題の解決方法の精度はインプットの精度に関係してきます。サーバー側でいうと、サーバーは問題が発生したとき、ログを出力しますが、このサーバーの悲鳴こそ、一番正確なインプット情報です。

正確なインプット情報を得たらあとはネットで検索するだけです。同様の事例と解決方法が書かれた記事が見つかればあとは実際に手を動かして対応するだけです。ネットから得る情報の注意点としては、問題が発生している環境とその事例の環境が同じもしくは近しい環境であるか確認する必要があります。もし異なっていれば事態を悪化させる可能性もあります。

 さいごに

あたりまえのことかもしれませんが、解決をあせっていると工程をはしおってしまったり近道しがちです。多少遠回りでも一つずつ怪しいと思われる箇所をつぶして真の原因をあぶりだし、正確なエラー情報を元に解決方法を見つけ出すというのが、 私の問題解決方法です。

※問題を発生させないために一つ一つの工程を丁寧に、そしてテストを十分することが一番たいせつです。