Repository navigation
chore(deps): 依存更新 + markuplint 5 移行 + pnpm 設定の置き場の移動 - #267
Merged
Merged
Conversation
- vite 8.0.16 → 8.3.0(範囲を `~8.0.16` → `~8.3.0`) - @types/node 25.6.0 → 24.13.4(範囲を `^25.5.0` → `^24.13.4`。.nvmrc = 24 と系列を揃える) - markuplint 4.18.1 → 5.0.0 - eslint 10.2.1 → 10.10.0 / stylelint 17.9.0 → 17.15.0 / prettier 3.8.3 → 3.9.6 - globals 17.5.0 → 17.12.0 / stylelint-config-recess-order 7.7.0 → 7.8.0 markuplint 5 が推移的に持ち込む image-size 2.0.2 に高深刻度の advisory 2 件 (GHSA-w3rx-r6r6-pgpr / GHSA-5p2g-fcmc-qvqq)があるため、override に `image-size: ">=2.0.3"` を追加して 2.0.4 に解決する。
- `required-attr` を `require-attr` へ改名(v5 で改名、v6 で旧名は削除) - `performance/head-element-order`(v5 の markuplint:performance で新規有効化)の 既定値は og:* を description より前に置くことを要求し、OGP / Twitter の まとまりを崩すため、meta 群を source order に戻した値で上書きする。 charset → viewport → title → meta → link → style → script の保証は維持 - 装飾要素の `aria-hidden="true"` に対してのみ `no-aria-on-presentational-children` を無効化する nodeRules を追加
vite 8.3.0 が `configLoader: 'native'` で未対応の機能として `__dirname` を 警告するようになったため。build / preview の挙動は置換前と一致。
pnpm v11 は package.json の `pnpm` フィールドと .npmrc の pnpm 専用設定を 読まない。現状のまま install 側を v11 に上げると override 6 件が警告だけ出して 黙って外れ、対策済みの advisory が戻る。 - `pnpm.overrides` → `pnpm-workspace.yaml` の `overrides` (npm 利用者向けの package.json `overrides` はミラーとして維持) - `.npmrc` の `minimum-release-age-exclude[]` → `minimumReleaseAgeExclude` - CODING_GUIDE「脆弱性 pin」「剪定 policy」の記述を新しい置き場に合わせる 実測: pnpm 10.34.5 / 11.26.0 のどちらでも override が効き(image-size は 2.0.4 に解決)、 `minimumReleaseAgeExclude` は pnpm 10 でも pnpm-workspace.yaml から読まれる。 pnpm 11 は .npmrc の除外を読まない(`config get minimumReleaseAgeExclude` が undefined)。 lockfile に差分なし。
- pnpm-workspace.yaml: 要 pnpm 10.5.1 以降であることと、`packages:` を足して 回避してはいけない理由を冒頭に明記。pnpm 10.4.1 以前 / pnpm 9 は `ERROR packages field missing or empty` で止まり、`packages:` を足すと install は通る代わりに overrides が黙って外れる(実測) - package.json に `engines` を追加(node >=24 / pnpm >=10.5.1)。markuplint 5 が node >=24 を要求する。pnpm 10.5.0 はこの宣言で明示的に止まるようになった (従来は overrides が黙って外れていた) - image-size の override に上限を付与(`>=2.0.3` → `>=2.0.3 <3`)。消費者の @markuplint/rules は `^2.0.2` を宣言しており、上限なしだと 3.x を強制しうる - 直前のコミットで落ちた説明を復元: markuplint.config.cjs の viewport 免除の理由 (require-attr の error 3 件を抑止している)、.npmrc の追加日と削除条件 - markuplint.config.cjs: head-element-order の上書きが既定値と 1 点だけ異なる ことと、その理由(og:* が name を持たず description より前に寄る)をコメント化。 aria-hidden の免除は根拠(@markuplint/html-spec の summary の注記)を明示 - minimumReleaseAgeExclude を rolldown 1.2.8 の optionalDependencies と突き合わせ、 `@rolldown/binding-android-arm-eabi` を追加し、存在しない `@rolldown/binding-wasm32-wasi` を削除。有効化時のみ効く旨も注記 - CODING_GUIDE: 剪定 dry-run の実行環境を固定する手順を追記(minimum-release-age の有無で同じ手順が逆の結論を返すため)。yarn では pin が効かないこと、 markuplint 更新時に head-element-order の既定値を突き合わせることを追記 - CONTRIBUTING: 依存更新リリースでは剪定 dry-run を回す手順を追加 - README: Node / pnpm の下限を前提として明示
- pnpm-workspace.yaml: minimumReleaseAgeExclude に `@oxc-project/types` を追加。
rolldown はこれを dependencies 側に `=0.149.0` と完全固定で持つため、
optionalDependencies だけを見た従来のリストでは取りこぼしていた。
対照実験で確認(リストに有れば解決、抜くと ERR_PNPM_NO_MATURE_MATCHING_VERSION)
- CODING_GUIDE に「pnpm 設定のメンテナンス」節を新設。除外リストは手で直さず
依存閉包から再生成する。掲載コマンドの出力は現行リストと完全一致
- CODING_GUIDE の head-element-order 既定値の確認コマンドを、実際に動くものへ差し替え。
`require('@markuplint/rules/...')` は root の依存ではなく ESM でもあるため解決できない。
上流ソースの URL も併記
- CODING_GUIDE の剪定手順から、overrides を消す前に実行してしまう手順 0 のコマンド行を削除。
環境を固定するのはフラグであって手順ではない
- markuplint.config.cjs: 「並び順に性能差は無い」の根拠として、規則自身が
category: 'structure' を宣言していることを明記
rolldown の依存は現状いずれも自分の依存を持たないため今日時点では閉包と一致するが、 将来これが変わったら深さを見直す必要がある。
Deploying starter with
|
| Latest commit: |
02891cd
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://01f4daa6.starter-20t.pages.dev |
| Branch Preview URL: | https://chore-deps-v1-0-5.starter-20t.pages.dev |
This was referenced Sep 16, 2026
Merged
shunei-web
added a commit
that referenced
this pull request
Sep 16, 2026
依存更新リリース (#267 / #268) で設定ファイルのコメントが増え、同じ事実が 最大 8 箇所に写っていた。正本を 1 つに決め、各設定ファイルはポインタに寄せる。 配布物の散文が約 46 行減る。src とビルド出力は変えていない。 ## .npmrc (13 行 → 3 行) コメントが「override と minimum-release-age の除外を 2026-04-23 に .npmrc へ 追加し 2026-09-16 に移設」と書いていたが、**override が .npmrc にあったことは 一度もない** (v1.0.4 の .npmrc は minimum-release-age-exclude[]= のみ。override は package.json の pnpm.overrides にあった)。設定を 1 行も持たないファイルに残った 唯一の実質的な文が誤りだったので訂正する。 ファイル自体は残す。pnpm 11 は .npmrc の pnpm 専用キーを**警告を出さずに**無視し、 CI が使う pnpm 10 系は逆に honor するため、ここに pnpm 専用キーを書き戻す事故を 機械で検出する経路が 1 つも無い。人間向けの掲示が唯一の関門になる。 あわせて 2 点訂正: - overrides は ini 形式の .npmrc では表現できず、pnpm がここから読んだことはない (起き得ない事故を警告していた) ので、列挙を minimumReleaseAge 系に絞った - yarn berry は .npmrc を読まない (.yarnrc.yml) ので「npm / yarn / pnpm 共通」から yarn を外した ## pnpm-workspace.yaml (コメント 22 行 → 12 行) - 「2026-04-23 追加」「2026-09-16 の vite 8.0→8.3 更新の時点では 1.2.5〜1.2.8 が 7 日間隔」といった変更経緯と実測値を削除 (CODING_GUIDE「コメント方針」が コミットログ・PR に書くべきものとしている) - 「rolldown は週次リリースで 3 日以内の版が入る」と「1.2.5〜1.2.8 が 7 日間隔」が 3 行以内で食い違っていたので、「高頻度リリースのため」に抽象化した - 「手作業だと dependencies と optionalDependencies を取りこぼす」理由は CODING_GUIDE に同内容があるので、ここは再生成のポインタだけにした - image-size に、dry-run が「冗長」と出ても剪定しない理由を 1 行付けた (CODING_GUIDE から日付つきの該当リストを削る代わり) 残した: `ERROR packages field missing or empty` の逐語 / 「`packages:` を足して 回避するな」/「有効にしていない環境では no-op」/ npm 側 overrides とのミラー規定。 旧 pnpm で実際に出るのはこのエラーで、engines の案内は出ない。 ## markuplint.config.cjs (コメント 25 行 → 11 行) - head-element-order: 既定値を上書きした理由を 11 行 → 4 行に。「性能差は無い」 ことの裏取り (規則自身が category: 'structure' を宣言している) は PR 本文へ移した - aria-hidden の免除: 「src 内 7 箇所: ハンバーガーの空 span 3 / アコーディオンの 装飾 svg 4」を削除。テンプレート利用者がサンプル HTML を書き換えた時点で腐る実数で、 かつセレクタ自体は src 内 17 要素にマッチするため「7 箇所が対象」と誤読させる。 「セレクタを狭めない理由」3 行も PR 本文へ移した viewport.js の defer 免除のコメントは変更していない。設定 3 件のうち、外すと markuplint が exit 1 になるのはこれだけ。 ## ドキュメント - CODING_GUIDE: pnpm 版数の「詳細は同ファイル冒頭」を同ドキュメント内の 「脆弱性 pin」へ向け直した (設定ファイル → ガイドの一方向に揃える) - CODING_GUIDE: 「2026-09-16 時点でこれに当たるのは image-size のみ」を削除し、 日付に依存しない注意書きだけを直前の段落へ移した - README: クイックスタートの pnpm 行が「でも可」と「推奨」を同時に言っていたので 1 つの指示に直した - CONTRIBUTING: markuplint を上げたリリースで既定値を突き合わせる手順を追加。 この突き合わせは CI も npm run check も検出できないと CODING_GUIDE 自身が 書いているのに、どこからも指されていなかった ## 確認 `npm run check` が exit 0 (markuplint 3 files / 0 problems)。 `pnpm install --frozen-lockfile` が exit 0 で lockfile に変化なし。
shunei-web
added a commit
that referenced
this pull request
Sep 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
依存を更新し、あわせて markuplint 5 への移行と pnpm 設定の置き場の移動を行います。
src/は 1 行も変えていません。依存更新
~8.0.16→~8.3.0^25.5.0→^24.13.4(.nvmrc= 24 と系列を揃える)^4.18.1→^5.0.0markuplint 5 が推移的に持ち込む
image-size@2.0.2に高深刻度の advisory が 2 件(GHSA-w3rx-r6r6-pgpr / GHSA-5p2g-fcmc-qvqq)あるため、override にimage-size: >=2.0.3 <3を追加しました。上限は、消費者の@markuplint/rulesが^2.0.2を宣言しており、上限なしだと将来の 3.x を強制しうるためです。ビルド成果物の差分
旧依存に戻して再ビルドし、A/B で比較しました。
var(--lightningcss-light,X)var(--lightningcss-dark,Y)の間に空白を入れるようになった)。整形して diff を取ると 0 行差で、意味は同一pnpm previewの挙動は、生ソケットによる 15 ターゲットのプローブで従来と全件一致markuplint 5 への移行
現行 config のまま v5 を走らせると error 0 / warning 37 件でした。内訳と対処:
rule-deprecationrequired-attr→require-attrに改名(v5 で改名、v6 で旧名は削除)performance/head-element-order(v5 の新規){ selector: 'meta', order: 'alphabetical', attr: 'name' }を素の'meta'にしたa11y/wai-aria/presentational-children(v5 の新規)[aria-hidden="true"]に対して無効化する nodeRule を追加いずれも v4 では出ていなかった指摘です(v4 + 旧 config では 3 ファイルとも passed)。
head-element-orderの既定値はname属性をソートキーにするため、propertyしか持たないog:*がキー空文字として全てのname付き meta より前に要求され、descriptionより前へ寄ります。twitter:*はnameを持つのでcolor-scheme/format-detectionと混ざって散ります。結果として「基本 meta → OGP → Twitter」というまとまりが崩れるため、meta 群だけソース順に戻しました。charset→viewport→title→meta→link→style→scriptの保証は維持しています(<meta charset>を<title>の後ろへ動かすと警告が出ることを確認)。理由はすべて config のコメントに書いてあります。「Use this template」でコピーされたリポジトリには履歴が付いてこないためです。
pnpm 設定の置き場
pnpm v11 は
package.jsonのpnpmフィールドと.npmrcの pnpm 専用キーを読みません。現状のまま install 側を v11 に上げると override 6 件が警告 1 行だけ出して黙って外れ、対策済みの advisory が戻ります(--frozen-lockfileではハードエラー)。pnpm-workspace.yamlを新設してoverridesとminimumReleaseAgeExcludeを移しました。npm 利用者向けのpackage.jsonのoverridesはミラーとして維持しています。🔴 pnpm の下限が 10.5.1 に上がります
pnpm-workspace.yamlにpackages:キーが無いため、pnpm 10.4.1 以前と pnpm 9 はERROR packages field missing or emptyで止まります。packages:を足すと install は通るようになりますが、その場合 overrides が黙って外れるため、回避策としては採れません。実測:ERROR packages field missing or emptyERR_PNPM_UNSUPPORTED_ENGINE(engines.pnpmによる。従来はここで override が黙って外れていた)package.jsonにengines: { node: ">=24", pnpm: ">=10.5.1" }を宣言し、pnpm-workspace.yaml冒頭・README・CODING_GUIDE にも明記しました。Node 24 以上は markuplint 5 の要求です。CI は
pnpm/action-setupのversion: 10が 10.34.5 に解決されるため影響を受けません。除外リストの再生成
minimumReleaseAgeExcludeは rolldown の依存閉包を列挙したものですが、rolldown は対象をdependenciesとoptionalDependenciesの両方に持つため、従来のリストは@oxc-project/types(=0.149.0の完全固定)を取りこぼしていました。依存閉包から再生成し、生成コマンドを CODING_GUIDE に載せて手作業での維持をやめました。その他
vite.config.tsの__dirname7 箇所をimport.meta.dirnameに置換。vite 8.3 がconfigLoader: 'native'で未対応として警告するようになったためminimum-release-ageの有無で同じ手順が逆の結論を返すためresolutions)を追記確認
rm -rf node_modulesからpnpm install --frozen-lockfile→pnpm dlx pnpm@11 audit --audit-level high(No known vulnerabilities found)→pnpm run check(markuplint 0 problems)→pnpm run build→tsc --noEmitがすべて exit 0。CHANGELOG はリリース直前に一括で追記する運用のため、この PR では触っていません。
この PR に含めていないもの
image-size以外の 5 件(uuid/js-yaml/brace-expansion/fast-uri/postcss)は、dry-run で冗長と確認しました(override を全て外してゼロから解決 →pnpm audit全レベル 0 件。実効性が残るのはjs-yamlのみで、uuidはツリーに存在しない)。剪定は従来どおり専用 PR で行いますpnpm dlx pnpm@11 auditの回避策と併せて見直しが要るため別 PRtypescriptはこのリポの依存に無く、checkにも CI にも型検査がありません。この PR 以前からのギャップ