会員登録すると
学習することができます。
会員登録する(無料)
登録済みの方はこちら
ログイン

原因の切り分け ― 再現・直近の変更・層・半分にする

目安学習時間 15分

課題

全問正解でレクチャー完了です。

【問題1】

原因の仮説を確かめるときの進め方として、この講座の考え方に合うものはどれですか。

[選択肢]

【問題2】

naminori で「無料で始める」が押せなかった不具合が、curl や自動テストでは再現しなかった理由として正しいものはどれですか。

[選択肢]
会員登録すると
学習することができます。
会員登録する(無料)

学ぶ目的

切り分けとは

原因の候補はいくらでも思いつきます。切り分けは、確かめられる問いを順に当てて、候補を減らしていくことです。この講座では、次の4つの問いを順に使います。

問い 何が分かるか
1. 再現するか。どんな条件で 原因が「いつも」か「ある条件のときだけ」か
2. 直近で何を変えたか 一番の容疑者
3. どの層で起きているか 見るべきログとコード
4. 範囲を半分にできないか 候補が多いときの近道

1. 再現する条件を、比べて見つける

第2回の「全部壊れたように見えた」実例では、条件を1つずつ変えて比べました。

変えたこと 結果
日本語をそのまま入れたURL エラー
同じ内容を、変換済みのURLで 正常
日本語をそのまま入れたURLで、パンくずが無い画面 正常

ここから「日本語をそのまま含むURL」と「パンくずを作る部分」の組み合わせで壊れる、と絞れました。動くものと動かないものの違いが、原因のありかを教えてくれます。

2. 直近で何を変えたか

障害の多くは、何かを変えた直後に始まります。新しい版の公開、設定の変更、外部サービスの更新などです。第4回の練習用ログでは、公開の35秒後に最初のエラーが出ていました。

naminori の「応募が失敗と表示される」不具合も、さかのぼるとメールの配信をやめた変更の日から始まっていました。通知の処理を書き換えたときに、求人の名前の取り方を間違えていたのです。

3. どの層で起きているか

第3回の層をもう一度使います。

ブラウザ → ネットワーク → Webサーバ → アプリ → データベース

naminori で実際にあったことです。2026年10月、AIキャリア診断の「無料で始める」を押しても、何も起きずにトップページへ戻されていました。

  • 画面を、「どこから来たか」を一切送らない設定(Referrer-Policy)にしていた
  • その設定が強すぎて、ブラウザがフォームを送るときに「送り元」を空にしていた
  • アプリは、送り元が確かめられない送信を、なりすましの防止のため拒んでいた

このとき、コマンド(curl)や自動テストでは再現しませんでした。それらは、そもそも「送り元」を送らないからです。本物のブラウザでだけ起きることが、ブラウザの層を疑う手がかりになりました。さらに、この種類の拒否は、以前ボットのノイズを減らすために「エラー追跡ツールに送らない」と決めていた種類でした。本番のアプリのログには、送り元が空だったことを示す警告が残っていました。

自分の確かめ方では再現しない、ということ自体が情報です。 利用者と自分で、何が違うか(ブラウザ・ログインの有無・入力・時刻)を並べます。

4. 範囲を半分にする

候補が多いときは、半分ずつ確かめます。正常だった版と壊れた版の間に変更が10個あるなら、真ん中の版で試し、壊れていれば前半、正常なら後半に原因があります。これを繰り返すと、10個でも4回ほどで1つに絞れます。Git には、この作業を手伝う git bisect というコマンドがあります。

ログの範囲、設定の項目、入力の内容でも同じです。1つずつ全部試すより、半分に割るほうが速いのです。

仮説は、1つずつ確かめる

「たぶんこれだ」と思ったら、それを確かめる方法を決めてから試します。一度に2つ以上を変えないようにします。2つ変えて直ったら、どちらが効いたのか分からなくなります。

ここで後から困ること

  • 推測で原因を決めつけると、記録に誤りが残る。naminori でも、ある調査で「本番のバグ」と書いた原因が、実は手元で実行したときだけ起きることだったと分かり、記録を訂正したことがあります
  • 原因が分からないまま「直った」ことにすると、同じ障害がまた来て、そのときにまたゼロから調べることになる

このレクチャーで学ぶこと

  • 切り分けの4つの問い
  • 動くものと動かないものを比べる
  • 直近の変更を疑う
  • ブラウザでだけ起きた実例と層の考え方
  • 半分にして絞る、仮説は1つずつ

質問

まだ質問は投稿されていません。

質問投稿

ログイン後に質問の投稿ができます。