← 記事一覧に戻る
テクノロジー

「ローカルでは動く」を4軸で切り分ける

「ローカルでは動く」を4軸で切り分ける

「私の環境では動くんですが」——このひとことから始まる調査は長引きやすい。バグ報告と自分の手元の間には、環境変数・データ・ブラウザ・タイミングという4つの軸の差分が隠れていることが多く、闇雲に再現を試みると同じ質問の往復だけで時間が溶ける。この記事では、この4軸を機械的にチェックする切り分け手順をまとめる。

なぜ「自分の環境では動く」が起きるのか

再現しないバグの原因は、たいてい次の4つのどれかに収まる。

  • 環境変数: フィーチャーフラグ、APIのURL、タイムゾーン設定の違い
  • データ: 相手の手元にだけ存在する空データ・古いフォーマット・権限の違い
  • ブラウザ/クライアント: 拡張機能、キャッシュ、画面サイズ、OSのフォント
  • タイミング: ネットワーク遅延やレースコンディションによる非決定的な挙動

この4軸を順番に潰していけば、勘に頼らず原因の当たりがつけられる。

1. 環境変数の軸

まず自分の環境と相手の環境で設定差分がないかを確認する。

  • diff <(env | sort) remote_env.txt で環境変数を機械的に比較する
  • フィーチャーフラグの有効/無効を確認する(ONだけ/OFFだけで通るケースが多い)
  • TZ とロケール設定を確認する。日付境界のバグはここが原因のことが多い

2. データの軸

「そのデータだから起きる」パターンを疑う。

  • 対象レコードが空配列・null・0件のときの挙動を確認する
  • 文字コードや全角/半角混在など、フォーマットが古いデータが混ざっていないか確認する
  • 報告者と自分のアカウントで権限(ロール・プラン)が違わないか確認する

3. ブラウザ/クライアントの軸

  • シークレットウィンドウ、拡張機能を全無効化した状態で再現するか試す
  • Service Worker やキャッシュを削除してから再読み込みする
  • 画面幅・DPR(デバイスピクセル比)を報告環境に合わせる

4. タイミングの軸

  • ネットワークをChrome DevToolsの「Slow 3G」に落として再試行する
  • 連打・二重クリックなど、素早い操作でだけ起きないか試す
  • 非同期処理の完了順序に依存した箇所がないか、コードを疑う

実例: 「ボタンが押せない」の正体が回線速度だった話

ある報告では「送信ボタンを押しても何も起きない」という内容だった。開発者の手元では即座に成功する。上の4軸で切り分けたところ、環境変数・データ・ブラウザは一致。残る「タイミング」の軸でネットワークをSlow 3Gに落として再試行したところ、送信中に二重にボタンを押すとリクエストが競合し、後発のリクエストがエラーで握りつぶされていることが判明した。原因はボタンの二重送信防止処理が入っていなかったことで、修正は送信中のボタンをdisabledにするだけで済んだ。4軸を順番に潰していなければ、「ブラウザ依存の表示バグ」を疑って見当違いの調査をしていたかもしれない。

切り分けフローチャート

調査に入る前に、次の4つの質問を順番に投げるだけで、多くのケースは軸が絞れる。

  1. 環境変数・フィーチャーフラグは一致しているか?(一致 → 2へ)
  2. 同じデータ(同じレコード・同じアカウント)で試しているか?(一致 → 3へ)
  3. 同じブラウザ・同じ画面サイズで再現するか?(一致 → 4へ)
  4. 連続実行や遅い回線でだけ起きないか?

4つとも一致しているのに再現しない場合は、報告者側の一次情報(コンソールログ・ネットワークログ・操作手順)が不足している可能性が高い。

Bugoon での実践

Bugoon はウィジェットから送られたバグ報告に、スクリーンショットとアノテーション、操作ステップの記録を自動で添付する。操作ステップが残っていれば「タイミング」軸(何をどの順番でクリックしたか)の切り分けはその場で済む。GitHub Issue連携で開発者に渡す際も、この情報がそのままIssue本文に載るため、環境変数やデータの軸を確認する質問を1往復減らせる。

報告に環境名・ビルド番号・ブラウザ情報・画面サイズといったメタデータまで自動で載るようになれば、4軸のうち「環境変数」「ブラウザ/クライアント」の初期確認がほぼ省略できる。現状はスクリーンショットとURL情報が中心だが、この方向性は切り分けの効率化として意味がありそうだ。

チームのバグ報告を、もっとスムーズに。

Bugoon は無料で始められます。サイトにタグを 1 行追加するだけで、QA と開発の往復がなくなります。

無料で始める