Skip to content

jscpd(重複コード検知) ​

jscpd で core_src のコピー&ペーストを検知する。導入は Phase 1-B(Issue #1301)、CI ブロックは Phase 2-B(Issue #1303)。

設定 ​

正本はリポジトリルートの .jscpd.json。

項目値理由
pathcore_srcアプリ本体のみ
minLines12先頭の declare / namespace など短い一致の偽陽性を抑える(PR #3278)
minTokens70同上
threshold5.4重複行率(%)の上限。超過で非 0 終了

ignore ​

標準除外のみ(vendor / node_modules / build)。Template/daily_article_template の一時除外は Issue #3577 で未使用 assets/ を削除し解消済み。

現状と段階引き下げ ​

計測日: 2026-10-06(CI Quality Gate の npm run duplicates:check、jscpd 5.3.3)。

項目値
合計重複行率約 5.31%(789 clones)
CI ゲート(threshold)5.4%
最終目標3%

#3799 / #3800 前後で 5% をわずかに超え、ゲートを 5.5% に上げた(Issue #3801)。Issue #3802 でランキング modal / logout confirm / マスタ Admin 表示層 / AI chat ヘルパーを共通化し、約 5.32% → 約 5.10% まで下げたうえでゲートを 5.2% に引き下げた。PR #3850(jscpd 5.3.1 → 5.3.3)で重複行の数え方が変わり約 5.31% になったため、.jscpd.json の threshold を 5.4 に上げた。ただし package.json の duplicates:check に --threshold 5.2 が残っていて CI では 5.2 で判定され続けたため、Issue #3996 で --threshold を外して閾値を .jscpd.json に一本化した。

ゲートは現状より少し高めにして、新規の大きな重複混入を止める。3% までの残ギャップは別クローン群の共通化が必要。閾値は .jscpd.json の threshold が正本。core_src を対象にするスクリプト(duplicates / duplicates:check)に --threshold を書かない(コマンドラインの値が設定ファイルより優先されるため)。

コマンド ​

用途コマンド
レポート(HTML は reports/jscpd/。.gitignore の reports/)npm run duplicates
CI ゲート相当(閾値超過で失敗)npm run duplicates:check
tests/Unit の重複(コンソール表示のみ。失敗しない)npm run duplicates:tests

duplicates と duplicates:check の中身はどちらも jscpd で同じ。どちらも .jscpd.json の threshold を超えると非 0 で終了する。CI ゲートからは duplicates:check を呼ぶ。

Quality Gate のローカル一括(composer quality-check:full)にも duplicates:check が含まれる。

tests/Unit の計測(duplicates:tests) ​

テストの重複は CI ゲートの対象外で、ローカルで傾向を見るためだけに使う(Issue #4007)。コマンドラインで渡したパスが .jscpd.json の path より優先され、minLines / minTokens / ignore は .jscpd.json の値(上の「設定」)を引き継ぐ。.jscpd.json には format が無く全形式が対象になるため、このスクリプトは --format php で PHPUnit のテストだけに絞る(tests/Unit には .ts も数件あり、混ぜると Issue #4007 の計測と条件が変わって率を比べられなくなる)。threshold は指定しないと core_src 用の閾値(.jscpd.json の 5.4%)で判定され、tests の 11% 台では毎回失敗するため、このスクリプトだけ --threshold 100 を指定している。--reporters console で HTML レポート(reports/jscpd/)は上書きしない。

2026-10-07 時点(npm ci 後の jscpd 5.3.3): 628 ファイル・142,765 行のうち重複 11.62%(875 clones)。重複行の約 76% は同じテストファイルの中の繰り返し。jscpd 5.3.1 では同じ条件で約 11.00% と出るため、比べるときは版を揃える(率の差が重複の増減とは限らない)。

CI ​

  • マージ判定: CI Quality Gate 内の npm run duplicates:check。必須チェック名は CI Quality Gate / Quality Gate のまま(Merge Queue は使わない)
  • HTML 成果物: ワークフロー Duplicate Code Report は 手動(workflow_dispatch)のみ。PR では起動しない(Plan B: 追加の npm ci を避ける)