check-contrast 移行の突き合わせ

対象 PlayWright / 依頼 利用者 / 発言 #1053 / 投稿 2026/09/23 08:16

📅 作成: 2026-09-23 / 更新: 2026-09-23

ai-chat-lite レビューワ

目次

  1. 指摘
  2. あわせて確認したこと
  3. 相手の対応

指摘

check-contrast の移行レビューで出した 4 件が解消したあと、利用者から「移行なのに再実装になっていないか、移行元と突き合わせて確かめてほしい」と頼まれた回。あわせて「実装もテストも TypeScript が必須。cjs は許可しない」「ランチャーも移行対象」という方針を受け取り、指摘に含めた。

#重さ中身
1high実装もテストも TypeScript にする。cjs は許可しない(利用者の判断)。移行先は本体が CommonJS、テストが .js。移行元はどちらも TypeScript
2mediumランチャーが移行元と揃っていない。cmd 側だけ 22 行が 3 行に削られている。落ちたのは、ランタイムの分岐・どちらも無いときの案内と終了コード 2・終了コードを明示して返す行
3medium計画書の「--timeout は新設」が誤り。移行元にもある。定義・ヘルプの行・既定値 300 秒まで同じで、移行元のテストにも異常系が入っている
4medium移行元にあったテストが引き継がれていない。短縮形 ・ -h ・ 知らないオプション ・ 値の無いオプション ・ --timeout の異常系。実装は動く。テストだけが落ちている
5low移行元のオプションを 1 つ落としたことが資料に無い。落とすこと自体は妥当だが、渡すと終了コード 2 になる。移行元の README には載っている

再実装になっていた

移行・移設は場所の移動なので、そのままコピーされている前提で読み始めた。突き合わせると、言語もプロセス構成も変わっていた。

見るところ移行元移行先
本体TypeScriptCommonJS
計測部別プロセスで起動し、JSON を渡す同じファイルに同居
引数解析・対象集め共通ライブラリ自前
テスト他の check ツールと共用の TypeScriptnode:test の .js 7 件
ランチャー(Bash 用)ランタイムの分岐ありそのままコピー。参照先だけ書き換え
ランチャー(cmd)22 行。ランタイムの分岐あり3 行。分岐なし

同じツールが、呼び出し経路で違うランタイムで走る。Bash 用のランチャーは移行元のまま分岐を持ち、cmd は決め打ちになっている。利用者は両方から実行する。

あわせて確認したこと

行の一致率では判定できない

意味のある行(空行・記号だけの行を除く)で数えると、移行元 350 行のうち移行先と一致するのは 165 行。移行先 265 行のうち 100 行は移行元に無い。ただしこの数字で「違う」とは言えない。整形を変えただけの行も差として出るため。

一致していれば同じだと保証できるが、逆は成り立たない。コントラスト計算は、複数行を 1 行にまとめ関数名を変えただけで行の diff には出るが、式も定数も一字一句同じだった。そこで一致率では判定せず、オプション名 ・ エラー文言 ・ 終了コードを突き合わせた。

振る舞いの差は 1 件だけだった

引数まわりを 5 通り実測し、終了コードを突き合わせた。

渡したもの移行元移行先
位置引数 2 つ00
知らないオプション22
値の無いオプション22
待ち時間の上限に数でない値22
ヘルプ00
移行元だけが持つオプション02

引数のエラー文言 3 つも移行元と一字一句同じだった。「待ち時間の上限に数でない値」が移行元でも 2 になったことが、指摘 3 の裏付けになっている。

こちらの検証の穴

指摘 3 は、前回「解消」と判定した記述の中にあった。元の記述が消えたことだけを見て済とし、書き換えた後の文が正しいかを確かめていなかった。訂正の確認は、元が消えたかと、新しい文が合っているかの 2 つを見る。

相手の対応

発言 #1072 で「全面的にやり直した」と報告があり、現物で確かめて #1075 で返した。5 件とも解消。移行元のソースをそのままコピーする方針に切り替わり、6 ファイルのうち 5 本が移行元と完全一致になった。

#状態確かめたこと
1済本体 ・ ライブラリ ・ テストが .ts になった
2済ランチャー 2 本とも移行元と完全一致。cmd 経由と Bash 経由の両方で実測し、同じ結果になった
3済計画書から誤った記述が消えた。影響範囲と USAGE の案内も新しい置き場に追随していた
4済テスト 16 件。移行元が持っていた 6 件がすべて入った。前回 low で出したテスト冒頭のコメントも直った
5済落としたオプションが復活し、既定値を変えた理由も書かれた。既定値のままで計測が通ることを実測

完全一致が検証の道具になった

移行元と突き合わせると、差のあるファイルが 1 本だけになり、その差も 2 箇所(冒頭のコメントと 1 つのオプションの既定値)だった。1 回目は 47% しか一致せず、オプション ・ 文言 ・ 終了コードを 1 つずつ突き合わせるほかなかった。

そのままコピーは、作る手間だけでなく確かめる手間も減らす。一致していれば同じだと保証できるため、差のある箇所だけを見ればよくなる。書き直すと、毎回すべてを突き合わせ直すことになる。

ブラウザ計測の本体だけ cjs のまま残した

移行元が .cjs であるため、移行先だけ .ts にすると「そのままコピー」が崩れ、上の検証の道具を失う。利用者の判断でこのまま容認し、TypeScript 化は移行元と揃えて別のタイミングで行うことにした。共通ルール「使用言語(Node / Bun)」とは、この 1 本だけ食い違った状態が続く。