textlintで日付の曜日をチェックする際の注意点と改良点

textlintの日付の曜日チェック

Webページを作成しているとページ内に日付 + 曜日を入れることがある。

例: 2021年3月3日(水)

日付に曜日を加えると記載されている曜日が正しいかどうかのチェックが必要になるが、カレンダーと見比べてチェックするのは結構手間がかかる。

しかし、textlintには曜日をチェックするtextlint-rule-date-weekday-mismatchがあるため、これをインストールすれば容易に曜日のチェックが可能になる。(.textlintrcのrulesへの追加も忘れずに)

{
  "rules": {
    "textlint-rule-date-weekday-mismatch": true,
    "prh": {
      "rulePaths": ["prh.yml"]
    }
  }
}

以下の記事を参考にしてtextlint-rule-date-weekday-mismatchを追加すれば簡単に試せるのでやってみてください。

Webサイトの特定ページのテキストをtextlintでチェックする方法

textlint 日付の曜日チェック用サンプルページ

■ サンプルページの内容
2021年3月3日(水)
2021年3月4日(金)
2021年3月6日(王)
3月7日(水)

カッコ内の曜日をprh.ymlでチェック

サンプルページの内容をtextlintでチェックすると以下のエラーが検出される。

 3:11  ✓ error  2021年3月4日(金) mismatch weekday.
 2021年3月4日(金) => 2021年3月4日(木)  date-weekday-mismatch 

見ての通り、2021年3月4日(金)はエラーとして検出されているが、2021年3月6日(王)と3月7日(水)は検出されていない。

textlint-rule-date-weekday-mismatchは括弧内の曜日の漢字が正しいかどうかのチェックは行われないので、カッコ内のチェックはprh.ymlに正規表現で日月火水木金土のいずれかの感じが含まれているかチェックする必要がある。

  - patterns: /(\d{1,2}[月\/]\d{1,2}日?\s?[\((][^日月火水木金土][\))])/
    expected: $1(曜日の間違い)

また、textlint-rule-date-weekday-mismatchは3月7日(水)のように日付に年が付いていないと曜日のチェックができないのでテキストに年を追加する必要がある。

簡単に年を追加したい場合はnew Date().getFullYear()で現在の年を取得してreplaceを使用して追加する。

現在の日付から現在か来年のどちらの年を付けるか分けたい場合やスラッシュにも対応する場合は工夫が必要。

const year = new Date().getFullYear()
const text = post.textContent.trim()
  .replace(/(\d{1,2}月\d{1,2}日)/gm, year + '年$1')
  .replace(/(\d{4}年)+/gm, '$1')

以上の点を修正後に再度textlintを実行すると2021年3月6日(王)や3月7日(水)もエラーとして検出できるようになる。

textlintで日付の曜日をチェックする際の注意点と改良点