メインコンテンツまでスキップ

v4 から v5 へのマイグレーション

最終安定版 v4(v4.18.3)から v5 へのガイドです。

はじめに

Node.js を v24.0.0 以降にしてください。v5 の全パッケージで必須です。Node.js を参照してください。

非推奨警告が出ない変更

改名・分割された旧名のほぼすべては v6 まで動きます。次は 動きません

  • 生設定の permitted-contentsno-refer-to-non-existent-idlabel-has-control — 名前が残るため分割先が警告なしで落ちます。html-standard だけだと no-broken-fragment-link が無く、a11y だけだと label-no-multiple-controls がありません。
  • テーブルモデル 3 件が warningerror: no-table-cell-overlapno-table-span-overflowno-empty-table-track

詳細は改名と分割です。

v5 で新設されたマークアップレベルのチェック(設定の対応不要、非推奨警告なし)

v5 では属性値以外の検証もいくつか厳格化されています(invalid-attr側で個別に扱う項目とは別です)。いずれも発火に設定変更は不要で、v4 に対応する挙動が無いため非推奨警告も出ません。

  • no-prohibited-naming: 明示的な role を持たない自律型カスタム要素(<x-y>is= なし)は、aria-label / aria-labelledby / aria-braillelabel を持てなくなりました。ナーミングをサポートする role を付けるか、属性を外してください。
  • element-supports-aria-prop: 3 つの文脈依存 ARIA 制約(#3735)— html-spec の定義で properties: false になっている要素(例: <input type="hidden">)はすべての aria-* 属性が禁止に、button[popovertarget](状態は暗黙的に提供される)と details 内の summary では aria-expanded が禁止になりました。
  • permitted-contents: MathML 要素は子要素数の厳密なチェックが入ります(例: mfrac はちょうど2個の子要素が必要)。SVG の <a> の自己ネストは禁止(SVG2 §17.6)。<dl> 内の <div>dt+/dd+ のグループを1つだけ許容します — 複数グループにする場合は <dl> 直下に並べ、<div> はグループごとに1つにしてください。

手順

  1. Node.js v24 以降。CI も更新。Node.js
  2. markuplint@markuplint/* を同じ v5 に上げる。
  3. htmx / Alpine ならフレームワーク
  4. 一度実行する。改名・分割の旧名は置換先を出す。静かなギャップは手で確認する。
  5. CI が警告を失敗にしていたら --no-allow-warningsCLI
  6. --config.markuplintrc とマージしない。
  7. extends の配列値・ネストした options設定
AI によるマイグレーション支援

Claude Code:

npx skills add markuplint/markuplint@migrations/v4-v5

ユーザー向け

領域概要影響
Node.js最小 v24.0.0(v4 の文書は v18.18.0)。TypeScript は ES2022。全員
CLI--fix-dry-run。警告は既定で許容(v4 相当は --no-allow-warnings)。--config はマージしない。CLI、CI
設定ruleCommonSettings、名前付き nodeRules、配列上書き、shallow merge、pretender 制限、:closest() 非推奨。設定作者
ARIA既定 ARIA 1.3。wai-aria は 21 ルール。v4 既定オフ/未実装の検査も動く。全員
フレームワーク@markuplint/htmx-parser 削除。Alpine spec は @markuplint/alpine-spechtmx / Alpine.js
AST同梱パーサー(html、vue、ejs、astro、mdx、jsx、svelte)は引用符なし属性値中の / で区切らず、値の一部として保持するようになりました。pug は影響なし。該当パーサーの利用者

ルール

ページ概要影響
改名と分割まずここから。 リネーム 12、分割 10、wai-aria → 21、ギャップ、severity、プリセット。全員
invalid-attr4 分割。{ type: X } ラッパー廃止。allowAttrs / disallowAttrs
required-elementrequire-element に改名。ゴースト要素は既定で無視。required-element
deprecated-elementno-obsolete-elementerror)と no-deprecated-elementwarning)。deprecated-element
table-row-column-alignment4 分割。うち 3 つが errorcolspan / rowspan / <col>
parse-error非致命パースエラーは severity.parseError。既定オフ。オプトイン
textlint@markuplint/rule-textlint 削除。textlint ルール

開発者向け

領域概要影響
ルール修正関数違反ごとの fix。v4 の組み込みでは --fix は何もしなかった。カスタムルール
APIレガシー exec() 削除。FixSummary 追加。Node.js API
ASTトークンフィールド改名。パーサ型の削除。パーサプラグイン
ヒント

CLI や CI だけなら「開発者向け」はスキップできます。