📖 読了目安 約11分
この記事の目次

トラブル対応の考え方

プログラムが動かない、エラーが出る、想定通りに動かない。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. どこまで動いているか?

処理の流れを追って、「どこまで動いて、どこで止まるか」を特定します。

入力 → 処理A → 処理B → 処理C → 出力
         ↑
      ここまでは動いている(ログで確認)
                  ↑
              ここで止まっている

切り分けのテクニック

1. 変更を元に戻す

直近の変更が原因かを確認する最も確実な方法です。

1. 直近の変更を一時的に元に戻す
2. 動作確認
   → 動く = 直近の変更が原因
   → 動かない = それ以前の問題
3. 変更を戻す

2. 最小構成で試す

問題が起きる範囲を狭めていきます。

問題が起きるコード全体で試す
↓ 動かない
関係なさそうな部分を削除して試す
↓ まだ動かない
さらに削除して最小構成にする
↓ 動いた!
→ 最後に削除した部分が原因

3. 別の方法で試す

同じことを別の方法で試して、問題の切り分けをします。

例:APIが動かない場合
□ ブラウザから直接アクセス → 動く?
□ 別のツールで呼び出し → 動く?
□ 別のデータで試す → 動く?
→ 動くなら、元の方法に問題がある

情報収集の方法

問題を解決するには、正確な情報が必要です。

何を見るか

1. エラーメッセージ

最も重要な情報源です。全文を読むこと。

エラーメッセージの構造(例):
┌─────────────────────────────────────────┐
│ Error: Cannot read property 'name' of undefined  ← 何が起きたか
│     at getUserName (user.js:42)         ← どこで起きたか
│     at handleClick (app.js:15)          ← 呼び出し元
└─────────────────────────────────────────┘

読み方のポイント

  • 最初の行 = 何が起きたか(エラーの種類)
  • 2行目以降 = どこで起きたか(ファイル名と行番号)
  • 自分のコードで最初に出てくる行が調査開始地点

2. ログ

処理の流れと、どこまで動いたかが分かります。

確認すべきログ:
□ アプリケーションが出力するログ
□ フレームワークやサーバーのログ
□ ブラウザの開発者ツール(Console, Network)

3. 実際の値

「こうなっているはず」ではなく、「実際はどうか」を確認します。

確認方法:
□ 変数の中身を出力してみる
□ 処理の途中経過を出力してみる
□ 入力と出力を確認する

何を記録するか

問題を報告したり、後で振り返るために記録を残します。

記録すべきこと:
□ 何をしたら問題が起きたか(再現手順)
□ どんなエラーが出たか(エラーメッセージ全文)
□ いつから起きているか
□ どの環境で起きているか
□ 試したこととその結果

記録の例

## 問題
ログインできない

## 再現手順
1. ログイン画面を開く
2. 正しいメールアドレスとパスワードを入力
3. ログインボタンをクリック
4. → 「認証に失敗しました」と表示される

## エラーメッセージ
POST /api/login 401 Unauthorized

## 試したこと
- 別のアカウントで試す → 同じエラー
- パスワードリセット → リセット後も同じエラー
- 開発者ツールで確認 → トークンが null になっている

## 分かったこと
認証トークンの発行処理に問題がありそう

調べ方のコツ

エラーメッセージの読み方

1. キーワードを抽出する

Error: ENOENT: no such file or directory, open '/path/to/file.txt'
       ~~~~~~                            ~~~~~~~~~~~~~~~~~~~~~~~~~
       エラーコード                        具体的な情報

検索キーワード:「ENOENT no such file or directory」

2. 固有の情報を除いて検索する

❌ そのまま検索:
   "Cannot find module '/Users/yamada/project/src/helper.js'"

✅ 固有部分を除いて検索:
   "Cannot find module" エラー

3. エラーコードがあれば活用する

HTTP 500、ORA-12154、SQLSTATE[42000] など
→ エラーコードで検索すると、公式情報が見つかりやすい

検索のコツ

効果的な検索キーワード

状況 検索キーワード例
エラー解決 [エラーメッセージの要点] [使っている技術]
やり方を調べる [やりたいこと] [技術名] 方法
公式情報を探す [技術名] documentation

検索結果の優先順位

1. 公式ドキュメント → 最も信頼できる
2. GitHub Issues → 同じ問題を踏んだ人がいる
3. Stack Overflow → 解決策が見つかりやすい
4. 技術ブログ → 解説が詳しい(ただし古い情報に注意)
5. AI → 素早く概要を掴める(検証は必要)

古い情報に注意

確認すること:
□ 記事の投稿日・更新日
□ 対象のバージョン
□ 現在のバージョンとの差

助けを求めるタイミングと方法

いつ助けを求めるか

15分ルール

1. 問題発生
2. 15分間、自分で調査・試行
3. 15分経っても解決しない → 助けを求める

※ 本番障害など緊急時は即座に報告

こんな時はすぐ相談

□ 本番環境に影響がある
□ 他の人の作業をブロックしている
□ 全く見当がつかない(調べ方も分からない)
□ 同じエラーで30分以上悩んでいる

どう助けを求めるか

相談は「相手の時間をもらう」ことです。準備をしてから相談しましょう。

相談前の準備

□ 何をしようとしているか(ゴール)
□ どんな問題が起きているか(現象)
□ 試したこと(最低3つ)
□ エラーメッセージ(全文)
□ 再現手順

相談の例

❌ 悪い例
「エラーが出て動きません。どうすればいいですか?」
→ 情報が足りず、相手は何も判断できない

✅ 良い例
「ログイン機能を実装しています。
ログインボタンを押すと401エラーが返ります。

試したこと:
1. 入力値を確認 → 正しい
2. APIを直接呼び出し → 同じエラー
3. 認証処理にログを追加 → トークンがnull

トークン生成の部分を見てほしいのですが、
お時間いただけますか?」
→ 状況が明確で、何を見てほしいかも分かる

相談後の行動

□ 教えてもらった内容をメモする
□ 解決したら結果を報告する
□ 同じ問題が起きないようメモを残す
□ お礼を言う(具体的に何が助かったか)

トラブル対応のチェックリスト

問題が起きたら、このチェックリストを上から確認してください。

【初動】
□ 慌てない。深呼吸する
□ エラーメッセージを全文読む
□ 「いつから」「何をしたら」起きたか確認

【情報収集】
□ エラーメッセージをコピーしてメモ
□ 再現手順を確認(毎回起きる?)
□ ログを確認

【切り分け】
□ 自分の環境だけ?全員?
□ どこまで動いている?どこで止まる?
□ 最後に変更した箇所は?

【調査】
□ エラーメッセージで検索
□ 公式ドキュメントを確認
□ 15分経っても解決しなければ相談

【相談】
□ 状況を整理(何をしようとしているか)
□ 試したことをまとめる
□ 具体的に何を聞きたいか明確にする

【解決後】
□ 原因と解決策をメモ
□ 同じ問題が起きないよう対策
□ 相談した人に結果を報告

まとめ

トラブル対応の考え方のポイント:

  1. 慌てない - 焦ると判断を誤る
  2. 仮説を立てる - 「とりあえず試す」は非効率
  3. 切り分ける - 「どこで問題が起きているか」を特定
  4. 記録する - エラーメッセージ、試したこと、結果
  5. 15分で相談 - 一人で悩みすぎない

トラブル対応力は経験で伸びます。解決したら記録を残す習慣をつけましょう。


関連ドキュメント