プログラムがうまく動かない場合の調査の仕方

要約

  1.  まずはデバッグログを張る。
  2. google先生に聞く。ほぼほぼ、ここで解決するはず。
  3. サーバのキャッシュをクリアする(ビルドする言語は中間ファイルを全部消してみる)
    webブラウザであればシークレットモードで立ち上げてみる
  4. 上記すべてで解決しなかった場合に初めて環境を疑う

4年目を迎えたうちのスタッフが、最近遅くまで頑張っているようです。
「ようです」と書くのは彼は別のプロジェクトで頑張ってるから。

彼は、今までは、なんというか「スーン」という表現がぴったりな感じだった。
嬉しくもなく悲しくもなく、穏やかで巨大なムーミンみたいなキャラでした。
世代が違うからこんなもんかなと思ってた。

ところが昨日、「こうこうこうで〜絶対合ってると思うんですガッ!!」
「なぜか動かないんですッ!」のように本宮ひろ志の漫画風に質問をしてきたんです。
いいぞいいぞ!それでこそ若者です。本気になるとなりふりかまってらんないです。

で、そのシステム自体は知らなかったんだけど、まあ何となく調べてアタリをつけた。
結果、ミニマム状態では動くようにはなった。
あ、ちょっと自慢入ってる?。
で、その際の思考のパターンなどを書きます。

心構え

まず、最初に心構え的なこと。
自分で「間違いない」とか「絶対に正しいはず」と言っている場合は、
すでにドツボにハマってることが多い。いったん冷静になったほうがいいね。
頭に血が上ると周りが見えなくなり、かえって解決が遅れます。

まずはデバッグログを張る

どんな言語でもログ出力機能はある。システムのログとOS側のログも見とくといい。
ログがどこに吐かれているか分からないときはそこから調べる。
ログから問題となっているプログラムがきちんと呼ばれていることを確認する。
あ、あとデバッグモードで起動しないと駄目なときもある。
ENV=productionとか環境ファイルに書いてることもある。そこらへんは調べる。

google先生に聞く

ログにエラーメッセージが出力されている場合は、メッセージを「完全に」コピペして
google先生に聞く。手で打ったらだめよ。
googleで1件もヒットしなかったらエラーメッセージの一部を残し再度検索する。
ソース特有の部分(行番号)などは削ったほうが良いね。

だいたい「言語」と「エラーメッセージ」
または「フレームワーク」と「エラーメッセージ」でOK。
英字で打つこと。
○「redmine」×「レッドマイン」

 

stackoverflowに出ているなら、コードに問題があることが多いので頑張る。
ここからはgoogle翻訳を駆使してくれ。
chromeの拡張機能とかでカーソルを置いただけで翻訳してくれるやつがあります。
便利。
学校の勉強の後遺症で英語に苦手意識があっても大丈夫。
英語が母語でない人もたくさん参加してるせいか、開発の世界の英語は簡単です。
「イングリッシュ」ではなく「グロービッシュ」だと思ったほうがいい。

類似の現象がgithub等の開発元で報告されている場合は、
使っているライブラリが原因であることが多い。

最新のモジュールを当て直したり、古いバージョンに戻したりしてみよう。
ちゃんとバックアップ取っといてね。

あ、日本語サイトに逃げたら駄目よ。
qiitaとかは最近劣化が激しくあまり参考にならない。
後は、意外にtwitterにヒントが出てたりする。

キャッシュをクリアする

サーバのキャッシュをクリアする。
モノによってはサービスの再起動。
ビルドする言語なら中間ファイルを全部消してみる。
webブラウザであればシークレットモードで立ち上げてみる。

ソースが問題ないのに動きがおかしい場合はたいていこれが原因です。

環境を作り直す

これはホントごくまれです。
もちろんだけど、言語のバージョンはもちろんOSも、
お客さまのところで動いているものと同じ環境だよね?

え?お客さま環境のバージョン知らない?
で、自分で開発環境を適当に作った?
その場合は環境がおかしいかもしれません・・。