安全チェックが「まだ混ぜてはいけない」を守っていた話 ― コードの意図しない結合を検出して直すまで

J-WORKSでは、複数の商品づくりの仕組みを将来1つの共通部品にまとめる作業を進めている。この作業の一部を実装したところ、まだ本番で使っていない別の新機能の名前が、混ぜてはいけないはずの既存ファイルに紛れ込んでしまった。これは既存の安全チェック(自動テスト)によってその場で検出され、原因を切り分けて修正し、2回目の実装で正しく完了した記録。

検証条件

複数の商品形式(表計算ツール・Webページ等)向けに別々に作っていた制作の仕組みを、将来的に1つの共通部品でまとめられるようにする準備作業を行っていた。この準備作業では、既に完成している複数の確認機能(制作物の整合性確認・安全確認・記録保存など)を、新しい共通部品からも呼び出せるように配線する必要があった。同時に、この共通部品が使う記録の一部を、別の自動審査の仕組みからも参照できるようにする作業も含まれていた。今回検証したのは、この配線作業を実際に実装した際、既存の仕組みに意図しない影響が出ないかという点である。

実行内容

実装を実行させたところ、指示どおりの機能は正しく作られたが、作業全体の最終確認(全体テスト)で1件だけ失敗が発生し、その回の実装は完了しなかった(コード自体は保存されたが、正式な記録には反映されない状態で止まった)。すぐに同じ内容で再実行するのではなく、まず失敗した1件のテストの中身を確認した。そのテストは、特定の3つの既存ファイルの中身を文字列としてそのまま調べ、「まだ本番で使っていない別の新機能」に関係する単語が一切含まれていないことを確認する、というものだった。この3ファイルは、別の新機能が将来的に少しずつ有効化されていく過程で、意図せず先に混ざってしまわないようにするための、以前からの安全チェックの対象になっていた。実際にファイルの中身を確認したところ、今回の実装が、審査の仕組みへ記録を渡す処理を書き加えた際、その処理の名前や説明文の中に、まさにこの「まだ使っていない新機能」を指す単語を使ってしまっていたことが分かった。

結果

記録を審査の仕組みへ渡す処理を、安全チェックの対象になっていないファイルに切り出し、対象ファイル側は、その言葉を一切使わない名前・説明文で呼び出すだけの形に直した。この修正を2回目の実装として同じ手順でやり直したところ、今回は全体確認まで含めて完了した。関連するテストを個別に実行し、新しく作った機能のテスト25件、安全チェック自体のテスト29件(1回目に失敗した項目を含む)を含む、合計816件のテストがすべて合格したことを確認した。共通部品自体は、設定を切り替えない限り動かないようになっており、この修正によって本番の動作が変わったわけではないことも確認した。

失敗原因

原因は、今回の実装を指示した際の指示内容そのものに、審査の仕組みへ情報を渡す処理を「既存のどのファイルに書くか」を具体的に指定しており、その指定先が、たまたま安全チェックの対象ファイルと重なっていたことにある。実装自体は指示どおり正しく行われており、実装ミスではない。安全チェックの存在自体は把握していたが、今回追加する処理がその対象範囲に触れることを、指示を作る段階で見落としていた。

改善

審査の仕組みへ情報を渡す処理だけを、安全チェックの対象になっていない新しいファイルへ独立させ、責任範囲を分けることで対応した。安全チェック自体の内容(何を禁止するか)は一切変更・緩和していない。既存の3ファイルは、その言葉を含まない形で新しいファイルを呼び出すだけになり、安全チェックの意図(まだ使っていない新機能が意図せず混ざらないようにする)はそのまま保たれている。

現在の結論

2026年9月23日時点で確認できているのは、1回目の実装が安全チェックによって正しく止められたこと、原因を特定し、安全チェックの内容を変えずに責任範囲を分けることで解決できたこと、2回目の実装で関連テスト816件が全て合格したことである。共通部品自体は引き続き設定でOFFのままであり、これによって商品づくりの実際の作業内容が変わったという事実は無い。

根拠

2026年9月22〜23日に実施した2回の実装作業の記録(1回目は自動テストで検出・停止、2回目は同じ自動テストを含む816件のテストが全件合格)。J-WORKS内部の実施記録に基づく。