Skip to content

【経緯の保管】preset-ja-spacing: 全角中黒・スラッシュ・コロン・波ダッシュ前後の半角スペース禁止ルール追加の検討 #15

@tomio2480

Description

@tomio2480

概要

tomio2480/blog-private の PR レビューで Gemini Code Assist から繰り返し指摘されている事項として,全角記号「・/:〜」 の前後に半角スペースが入る問題 がある.現在の preset-ja-spacing ではこの種のスペースを flag できず,スタイル一貫性が機械的に担保できない.

textlint で機械検出できないため手作業で sed 一括除去するパスが頻発している(blog-private#1blog-pipeline#1blog-private#8).

観測事例

Gemini からの指摘パターン(blog-private#8 より):

全角句読点(「.」「・」「/」「:」など)の後に半角スペースを入れないルールを適用してください。特に「CI ・ cron」 や「取得 ・ 差し替え」 などの箇所でスペースが混入しています。

該当する具体的な箇所:

  • CI ・ cronCI・cron
  • hatena / notehatena/note
  • source / url / titlesource/url/title
  • 2025-08-30 〜 2026-04-132025-08-30〜2026-04-13
  • (既に preset-ja-spacing でカバー済みだが取りこぼしあり)

既存ルールとの関係

preset-ja-spacing には以下のルールが含まれているが,全角中黒・全角スラッシュ・全角コロン・波ダッシュは「全角記号」 として認識されず flag 対象から外れている可能性 がある.

  • ja-no-space-around-parentheses :全角カッコ「()」 ・鈎カッコ「「」」 が対象.中黒等は対象外
  • ja-no-space-between-full-width :全角文字(ひらがな・カタカナ・漢字)どうしの間のスペース.全角記号は full-width として扱われない実装が多い
  • ja-space-between-half-and-full-width :半角と全角の境界.スペース必須側のルール

つまり 半角+スペース+全角中黒+スペース+半角 のような系列は,どのルールも flag できない.

提案する対応

案 A:preset-ja-spacing への追加ルール提案(上流)

textlint-ja/textlint-rule-preset-ja-spacing に新規ルール ja-no-space-around-fullwidth-symbols (全角中黒・スラッシュ・コロン等の前後スペース禁止)を提案する.

ただし上流対応は時間がかかるため当面は案 B / C で凌ぐ.

案 B:中央テンプレートに textlint-rule-no-mixed-zenkaku-and-hankaku-alphabet 等を追加

既存のサードパーティ textlint ルールで類似の検出ができるものがあれば,中央テンプレートに追加する.候補:

  • textlint-rule-ja-hiragana-fukushi (副詞のひらがな化)
  • textlint-rule-ja-no-space-around-symbol(仮名.要調査)

案 C:markdownlint-cli2 のカスタムルールで補う

中央 templates/.markdownlint-cli2.yaml にカスタムルール(regex ベース)を仕込んで「全角記号 + 半角スペース」 を検出する.

custom-rules:
  - name: no-space-around-fullwidth-symbol
    test: '(?:[・/:〜] | [・/:〜])'
    message: '全角記号の前後に半角スペースを入れないでください'

案 D:JTF スタイルチェッカー風の独自ルール

JTF 日本語標準スタイルガイド(既存 Issue #13で言及)に「全角句読点後にスペースを入れない」 規定がある.これを参考に独自 textlint ルールを書く.

推奨

案 C を短期,案 A を長期 で進めるのが現実的.案 C は中央テンプレートの 1 ファイル変更で利用者全員に展開できる.案 A は OSS 貢献として時間がかかるが,恒久対策として価値がある.

関連 Issue

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions