check-contrast の移行レビューで出した 4 件が解消したあと、利用者から「移行なのに再実装になっていないか、移行元と突き合わせて確かめてほしい」と頼まれた回。あわせて「実装もテストも TypeScript が必須。cjs は許可しない」「ランチャーも移行対象」という方針を受け取り、指摘に含めた。
| # | 重さ | 中身 |
|---|---|---|
| 1 | high | 実装もテストも TypeScript にする。cjs は許可しない(利用者の判断)。移行先は本体が CommonJS、テストが .js。移行元はどちらも TypeScript |
| 2 | medium | ランチャーが移行元と揃っていない。cmd 側だけ 22 行が 3 行に削られている。落ちたのは、ランタイムの分岐・どちらも無いときの案内と終了コード 2・終了コードを明示して返す行 |
| 3 | medium | 計画書の「--timeout は新設」が誤り。移行元にもある。定義・ヘルプの行・既定値 300 秒まで同じで、移行元のテストにも異常系が入っている |
| 4 | medium | 移行元にあったテストが引き継がれていない。短縮形 ・ -h ・ 知らないオプション ・ 値の無いオプション ・ --timeout の異常系。実装は動く。テストだけが落ちている |
| 5 | low | 移行元のオプションを 1 つ落としたことが資料に無い。落とすこと自体は妥当だが、渡すと終了コード 2 になる。移行元の README には載っている |
移行・移設は場所の移動なので、そのままコピーされている前提で読み始めた。突き合わせると、言語もプロセス構成も変わっていた。
| 見るところ | 移行元 | 移行先 |
|---|---|---|
| 本体 | TypeScript | CommonJS |
| 計測部 | 別プロセスで起動し、JSON を渡す | 同じファイルに同居 |
| 引数解析・対象集め | 共通ライブラリ | 自前 |
| テスト | 他の check ツールと共用の TypeScript | node:test の .js 7 件 |
| ランチャー(Bash 用) | ランタイムの分岐あり | そのままコピー。参照先だけ書き換え |
| ランチャー(cmd) | 22 行。ランタイムの分岐あり | 3 行。分岐なし |
同じツールが、呼び出し経路で違うランタイムで走る。Bash 用のランチャーは移行元のまま分岐を持ち、cmd は決め打ちになっている。利用者は両方から実行する。
意味のある行(空行・記号だけの行を除く)で数えると、移行元 350 行のうち移行先と一致するのは 165 行。移行先 265 行のうち 100 行は移行元に無い。ただしこの数字で「違う」とは言えない。整形を変えただけの行も差として出るため。
一致していれば同じだと保証できるが、逆は成り立たない。コントラスト計算は、複数行を 1 行にまとめ関数名を変えただけで行の diff には出るが、式も定数も一字一句同じだった。そこで一致率では判定せず、オプション名 ・ エラー文言 ・ 終了コードを突き合わせた。
引数まわりを 5 通り実測し、終了コードを突き合わせた。
| 渡したもの | 移行元 | 移行先 |
|---|---|---|
| 位置引数 2 つ | 0 | 0 |
| 知らないオプション | 2 | 2 |
| 値の無いオプション | 2 | 2 |
| 待ち時間の上限に数でない値 | 2 | 2 |
| ヘルプ | 0 | 0 |
| 移行元だけが持つオプション | 0 | 2 |
引数のエラー文言 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 であるため、移行先だけ .ts にすると「そのままコピー」が崩れ、上の検証の道具を失う。利用者の判断でこのまま容認し、TypeScript 化は移行元と揃えて別のタイミングで行うことにした。共通ルール「使用言語(Node / Bun)」とは、この 1 本だけ食い違った状態が続く。