トラブル対応の考え方
プログラムが動かない、エラーが出る。1年目はトラブルの連続です。環境や言語に依存しない「トラブル対応の考え方」を学びましょう。
トラブル対応の基本姿勢
1. 慌てない、焦らない
トラブルに遭遇すると焦りますが、焦ると判断を誤ります。落ち着いて対応することが最も重要です。
- ❌ 焦ってやりがちなこと:原因が分からないまま、あちこち変更する
- ❌ 焦ってやりがちなこと:変更した内容を記録しない
- ❌ 焦ってやりがちなこと:30分悩んでから相談する(遅い)
- ⭕ 落ち着いてやること:まず深呼吸する
- ⭕ 落ち着いてやること:現状を正確に把握する
- ⭕ 落ち着いてやること:変更する前に状態を記録する
2. 「動いていたこと」を信じる
「さっきまで動いていた」なら、その間に何かが変わったはずです。何が変わったのかを探すことから始めましょう。
変わったことの候補:
- 自分が変えたもの:コード、設定ファイル、環境(インストール、再起動)
- 自分以外が変えたもの:他の人のコード更新(git pull)、外部サービス障害、サーバー側の変化
3. 仮説を立ててから動く
「とりあえず色々試す」のは非効率です。仮説→検証→結果のサイクルを意識的に回します。
flowchart LR
A[問題発生] --> B[情報収集]
B --> C[仮説を立てる]
C --> D[検証する]
D --> E{解決?}
E -->|No| C
E -->|Yes| F[原因と解決策を記録]
仮説の立て方:
- 「〇〇が原因ではないか?」と具体的に考える
- 一度に1つの仮説だけを検証する
- 検証結果を記録する
問題の切り分け方
トラブル対応で最も重要なのは「どこで問題が起きているか」を特定することです。これが分からないと、間違った方向で対応に時間を費やすことになります。
切り分けの基本:二分法
問題を半分に分けて、どちら側に原因があるかを特定します。例えば、Webアプリで画面にデータが表示されない場合:
- フロントエンド側の問題?データは受け取れている、表示処理でエラーが出ている、そもそもAPIを呼んでいるか
- バックエンド側の問題?APIは正しく動いている、データベースにデータはある、認証/権限の問題
このように「前半か後半か」「自分側か相手側か」という二者択一で絞り込んでいくことで、調査範囲を効率的に狭められます。
切り分けの質問リスト
以下の質問に答えていくと、問題の場所が絞り込めます。
| 質問 | 選択肢 | 次のアクション |
|---|---|---|
| 1. 再現するか? | 毎回再現する | 再現手順を確定し、原因調査へ |
| たまに再現する | 再現条件を探る(タイミング、データ、順序) | |
| 1回だけ | 環境の一時的な問題かも。様子を見る | |
| 2. いつから起きているか? | 最初から動かない | 実装ミス、設定ミス |
| さっきまで動いていた | 直近の変更が原因 | |
| 特定の操作後から | その操作に関連する処理が原因 | |
| ある日突然 | 外部要因(サーバー、ライブラリ更新等) | |
| 3. 自分の環境だけか? | 自分だけ | ローカル設定、キャッシュ、環境変数 |
| 全員 | コード、共通設定、外部サービス | |
| 特定の人だけ | その人の環境、権限、データ | |
| 4. どこまで動いているか? | - | 処理の流れを追って、止まった地点を特定 |
切り分けのテクニック
1. 変更を元に戻す
直近の変更が原因かを確認する最も確実な方法です。
- 直近の変更を一時的に元に戻す
- 動作確認:動く場合は直近の変更が原因、動かない場合はそれ以前の問題
- 判定後、変更を戻す
2. 最小構成で試す
問題が起きる範囲を狭めていきます。
- 問題が起きるコード全体で試す
- 関係なさそうな部分を削除して試す
- さらに削除して最小構成にする
- 動いた地点から、最後に削除した部分が原因と判定
3. 別の方法で試す
同じことを別の方法で試して、問題の切り分けをします。例えば、APIが動かない場合:
- ブラウザから直接アクセス → 動く?
- 別のツール(cURL、Postman等)で呼び出し → 動く?
- 別のデータで試す → 動く?
動くなら、元の方法に問題があります。
情報収集の方法
問題を解決するには、正確な情報が必要です。何を見て、何を記録するかを知ることが、効率的なトラブル対応につながります。
何を見るか
1. エラーメッセージ
最も重要な情報源です。全文を読むことが鉄則です。
エラーメッセージの構造:
- 最初の行:何が起きたか(エラーの種類)
- 2行目以降:どこで起きたか(ファイル名と行番号)
- 自分のコードで最初に出てくる行:調査開始地点
2. ログ
処理の流れと、どこまで動いたかが分かります。確認すべきログ:
- アプリケーションが出力するログ
- フレームワークやサーバーのログ
- ブラウザの開発者ツール(Console, Network)
3. 実際の値
「こうなっているはず」ではなく、「実際はどうか」を確認します。
- 変数の中身を出力してみる
- 処理の途中経過を出力してみる
- 入力と出力を確認する
何を記録するか
問題を報告したり、後で振り返るために、以下を記録する習慣をつけましょう。
- 何をしたら問題が起きたか(再現手順)
- どんなエラーが出たか(エラーメッセージ全文)
- いつから起きているか
- どの環境で起きているか
- 試したこととその結果
記録の例:
## 問題
ログインできない
## 再現手順
1. ログイン画面を開く
2. 正しいメールアドレスとパスワードを入力
3. ログインボタンをクリック
→ 「認証に失敗しました」と表示される
## エラーメッセージ
POST /api/login 401 Unauthorized
## 試したこと
- 別のアカウントで試す → 同じエラー
- パスワードリセット → リセット後も同じエラー
- 開発者ツールで確認 → トークンが null になっている
## 分かったこと
認証トークンの発行処理に問題がありそう
調べ方のコツ
エラーメッセージの読み方
1. キーワードを抽出する
エラーメッセージから、検索に使うキーワードを抽出します。固有のパス名や数値は除き、エラーコードや一般的なメッセージの部分に注目します。
2. 固有の情報を除いて検索する
- ❌ ダメな例:「Cannot find module '/Users/yamada/project/src/helper.js'」(パスが固有)
- ⭕ 良い例:「Cannot find module」エラー
3. エラーコードがあれば活用する
HTTP 500、ORA-12154、SQLSTATE[42000]のようなエラーコードがあれば、そのコードで検索すると公式情報が見つかりやすいです。
検索のコツ
| 状況 | 検索キーワード例 |
|---|---|
| エラー解決 | 「[エラーメッセージの要点] [使っている技術]」 |
| やり方を調べる | 「[やりたいこと] [技術名] 方法」 |
| 公式情報を探す | 「[技術名] documentation」 |
検索結果の信頼度(優先順位):
- 公式ドキュメント → 最も信頼できる
- GitHub Issues → 同じ問題を踏んだ人がいる
- Stack Overflow → 解決策が見つかりやすい
- 技術ブログ → 解説が詳しい(ただし古い情報に注意)
- AI → 素早く概要を掴める(検証は必要)
古い情報に注意:記事の投稿日・更新日、対象のバージョン、現在のバージョンとの差を確認することが重要です。
助けを求めるタイミングと方法
いつ助けを求めるか:15分ルール
トラブル対応では「一人で悩みすぎない」ことが大切です。以下が目安です。
- 問題発生
- 15分間、自分で調査・試行
- 15分経っても解決しない → 助けを求める
ただし、本番環境に影響がある、他の人の作業をブロックしている、全く見当がつかない(調べ方も分からない)、同じエラーで30分以上悩んでいるような場合は、すぐに相談しましょう。
どう助けを求めるか:相談の準備
相談は「相手の時間をもらう」ことです。以下の準備をしてから相談しましょう。
相談前に用意するべきことは何か?
- 何をしようとしているか(ゴール)
- どんな問題が起きているか(現象)
- 試したこと(最低3つ)
- エラーメッセージ(全文)
- 再現手順
相談する時の良い例と悪い例は?
❌ 悪い例
「エラーが出て動きません。どうすればいいですか?」
→ 情報が足りず、相手は何も判断できません
⭕ 良い例
「ログイン機能を実装しています。ログインボタンを押すと401エラーが返ります。試したことは:
- 入力値を確認 → 正しい
- APIを直接呼び出し → 同じエラー
- 認証処理にログを追加 → トークンがnull
トークン生成の部分を見てほしいのですが、お時間いただけますか?」
→ 状況が明確で、何を見てほしいかも分かります
相談後はどうすればよいか?
- 教えてもらった内容をメモする
- 解決したら結果を報告する
- 同じ問題が起きないようメモを残す
- お礼を言う(具体的に何が助かったか)
トラブル対応のチェックリスト
問題が起きたら、このチェックリストを上から確認してください。
【初動】最初にやることは?
- 慌てない。深呼吸する
- エラーメッセージを全文読む
- 「いつから」「何をしたら」起きたか確認
【情報収集】次にやることは?
- エラーメッセージをコピーしてメモ
- 再現手順を確認(毎回起きる?)
- ログを確認
【切り分け】どう問題を絞り込むか?
- 自分の環境だけ?全員?
- どこまで動いている?どこで止まる?
- 最後に変更した箇所は?
【調査】自分で調べる時は?
- エラーメッセージで検索
- 公式ドキュメントを確認
- 15分経っても解決しなければ相談
【相談】相談する時の準備は?
- 状況を整理(何をしようとしているか)
- 試したことをまとめる
- 具体的に何を聞きたいか明確にする
【解決後】やることを忘れずに
- 原因と解決策をメモ
- 同じ問題が起きないよう対策
- 相談した人に結果を報告
まとめ
トラブル対応の考え方は、技術や言語が変わっても変わらない基本的な「思考プロセス」です。以下のポイントを意識することで、トラブルに直面した時の対応時間を大幅に短縮できます。
- 慌てない - 焦ると判断を誤る
- 仮説を立てる - 「とりあえず試す」は非効率
- 切り分ける - 「どこで問題が起きているか」を特定
- 記録する - エラーメッセージ、試したこと、結果
- 15分で相談 - 一人で悩みすぎない
トラブル対応力は経験で伸びます。解決したら記録を残す習慣をつけることで、次のトラブルに対する対応速度も格段に上がります。