コンテンツにスキップ

madr/date-iso8601

ADR の date フィールドが YYYY-MM-DD 形式の有効な ISO 8601 カレンダー日付であることを検証します。

このルールは context.metadata[field] を読み取ります。これは YAML frontmatter に v2 の本文リストメタデータをマージしたものです(競合時は frontmatter が優先され、明示的な null/undefined の frontmatter 値はスキップされます)。したがって MADR v2(太字の - **Date**: および素の * Date: リスト項目)、v3、v4 をサポートします。

gray-matter はクォートされていない date: 2026-05-01 を JavaScript の Date にパースします。このルールは DatetoISOString().slice(0, 10) によって正規化し、string はそのまま保持し、それ以外(null, boolean, number)は欠落として扱います。検証には Date.UTC のラウンドトリップを使用するため、外部ライブラリなしでうるう年や月の日数が正しく扱われます。

  • missingDate — 設定されたフィールドが存在しない、またはその値が文字列 / Date ではありません。メッセージ: Metadata does not contain a "<field>" field (checked frontmatter and v2 bold-list)data.field を含みます。
  • invalidDate — 値は存在するものの、実在する YYYY-MM-DD 日付ではありません: 形式が不正(2026-5-1, 26-05-01, today)か、存在しないカレンダー日付(2026-13-01, 2026-02-31, 2025-02-29)です。メッセージ: Date "<date>" is not a valid ISO 8601 calendar date (YYYY-MM-DD)data.date を含みます。
---
date: 2026-05-01
---

うるう年の日付(YAML が文字列のまま保持するようクォート):

---
date: '2024-02-29'
---
Frontmatter診断理由
(date なし)missingDateフィールドが存在しない
date: 2026-13-01invalidDate13 月は存在しない
date: 2026-02-31invalidDate2 月に 31 日は存在しない
date: 2025-02-29invalidDate2025 年はうるう年ではない
date: '2026-5-1'invalidDate月/日がゼロ埋めされていない
date: '26-05-01'invalidDate2 桁の年
date: 'today'invalidDate日付文字列ではない
オプションデフォルト説明
fieldstring'date'読み取るメタデータキー(frontmatter または v2 本文リスト、キーの正規化あり)。createdupdated などを使用するプロジェクトでは上書きします。
import { defineConfig } from 'madr-lint';
export default defineConfig({
rules: {
'madr/date-iso8601': ['error', { field: 'created' }],
},
});
バージョン適用備考
v2はいメタデータブリッジ経由で、本文リストの - **Date**: 2026-05-01
v3はいfrontmatter の date: ...
v4はいfrontmatter の date: ...

異なる日付形式を使用するシステムから移行する場合は、madr/date-iso8601off にしてください。カスタムのメタデータキーを読み取るには、field を上書きすることを優先してください。

他のルールと同様、インラインコメントで抑制できます — ルールの抑制を参照してください。