compat-review について
es-toolkit の compat 層の変更が Lodash との差異を解消するか確認するレビュー用スキルです。PR の主張または関数名から比較テストを作り、変更前後で実行して結果を報告します。
主な機能
- 01PR の主張と対象関数の抽出
- 02Lodash との比較テスト作成
- 03主張されたケースと境界ケースの確認
- 04修正前後の動作確認
- 05検証レポートの作成
活用シーン
- 01compat 修正 PR の検証
- 02指定された compat 関数と Lodash の比較
- 03境界ケースでの回帰の検出
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ toss/ es-toolkit --skill compat-reviewインストール後、Claude Code で/compat-reviewを入力して読み込まれたか確認します。
詳細
互換レイヤーのレビュー
互換性に関する PR が、lodash の実際の不整合を修正しているか検証します。
入力
$ARGUMENTS — PR 番号(例:1234)または関数名(例:chunk)
ワークフロー
1. 対象の関数と PR の主張を特定する
PR 番号:
gh pr view {number} --repo toss/es-toolkit --json title,body,files
PR の説明と差分から、次の内容を抽出します。
- 修正対象の互換関数
- コントリビューターが主張する不整合(期待される動作と実際の動作)
- コントリビューターが提示しているテスト例
関数名:関数のソースと仕様を読み、現在の動作を把握します。
2. 比較テストを作成する
src/compat/{category}/_compat-review-{fn}.spec.ts に一時的な vitest 仕様ファイルを作成します。
import { describe, expect, it } from 'vitest';
import { fn as compatFn } from 'es-toolkit/compat';
import { fn as lodashFn } from 'lodash';
テストケースを次の 2 つのグループに分けます。
A. コントリビューターが主張する例 — PR の説明またはテスト差分から直接抽出します。これらは、PR で修正すると主張されているケースです。
B. 追加で生成する約 10 個のエッジケース — 関数のシグネチャと lodash の既知の動作パターンに基づきます。
- 空の入力:
[]、{}、''、0 - nullish 値:
null、undefined - 負数/ゼロ/浮動小数点数:
-1、0、1.5、NaN、Infinity - 型強制:数値文字列(
'3')、ブール値、異なる型の混在 - 境界値:要素が 1 つの配列、非常に長い文字列、深くネストされたオブジェクト
- 対象の関数に関連するケースを選びます
各テスト:
it('description', () => {
let lodashResult, compatResult;
let lodashErr: any, compatErr: any;
try {
lodashResult = lodashFn(args);
} catch (e) {
lodashErr = e;
}
try {
compatResult = compatFn(args);
} catch (e) {
compatErr = e;
}
if (lodashErr && compatErr) return; // both throw = consistent
if (lodashErr || compatErr) {
throw new Error(`Behavior mismatch: ${lodashErr ? 'lodash throws' : 'compat throws'}`);
}
expect(compatResult).toEqual(lodashResult);
});
3. PR の変更を適用する前に比較を実行する
yarn vitest run src/compat/{category}/_compat-review-{fn}.spec.ts
失敗したテストを記録します。これらは、main に実在する不整合です。
4. PR の変更を適用して再実行する
gh pr diff {number} --repo toss/es-toolkit | git apply
同じテストを再実行し、次の点を確認します。
- コントリビューターが主張する例が通る
- 追加のエッジケースも引き続き通る(リグレッションがない)
テスト後に元に戻します。
git checkout -- .
5. クリーンアップ
_compat-review-*.spec.ts を削除します。
6. 報告する
## {fn} — Compat Review
### PR Claim
{What the contributor says they're fixing}
### Verification (BEFORE fix)
| # | Input | lodash | compat | Match? | Source |
|---|-------|--------|--------|--------|--------|
| 1 | ... | ... | ... | MISMATCH | PR example |
| 2 | ... | ... | ... | MATCH | Edge case |
### Verification (AFTER fix)
| # | Input | lodash | compat | Match? | Source |
|---|-------|--------|--------|--------|--------|
### Verdict
- [ ] PR claim is valid (inconsistency confirmed on main)
- [ ] Fix resolves the claimed inconsistency
- [ ] No regressions in edge cases
- [ ] Existing tests still pass
コメント
Markdown 対応