kakakakakku blog

Weekly Tech Blog: Keep on Learning!

textlint で句読点をチェックする

ブログ記事も含めて文章を書くときに使う句読点は に統一している.2006年頃から使っているからもう15年以上になる.macOS や Windows をセットアップするときに最初にデフォルト設定を変更するのも「句読点」だったりする.しかし,フォーマットが決められたビジネス文書など,句読点として を使わなければいけない場面もあるため,文章を書き終えてからエディタで一括置換をするという作業をよくやっている.今回は textlint で句読点をチェックして誤用を検出できるようにする.

例文

今回は以下の例文 hello.txt を使う.特に意味はなくブログ記事用に作る.

こんにちは!
僕は @kakakakakku です.
1年は,12ヶ月です.
hello, world.

案1. textlint-rule-preset-JTF-style

まず,案1として textlint-rule-preset-JTF-style を試す.README.md に書いてある通り,JTF(日本翻訳連盟)の基準として多くのルールが実装されている.この中に 1.2.1.句点(。)と読点(、)1.2.2.ピリオド(.)とカンマ(,) など,句読点に関係するルールがある.

github.com

以下の .textlintrc を作って textlint-rule-preset-JTF-style を有効化する.

{
  "rules": {
    "preset-jtf-style": true
  }
}

さっそく実行をすると 全角のピリオドとカンマは使用しません。 として検出できる.しかし,以下のエラーを見るとわかる通り 原則として、全角文字と半角文字の間にスペースを入れません。12ヶ月 => 12か月 など,他のエラーも検出されてしまう.技術文書を書く場合など,適用しにくいこともある.

$ npx textlint ./hello.txt

/Users/kakakakakku/xxx/hello.txt
  2:16  ✓ error  原則として、全角文字と半角文字の間にスペースを入れません。  jtf-style/3.1.1.全角文字と半角文字の間
  2:19  ✓ error  全角のピリオドとカンマは使用しません。                      jtf-style/1.2.2.ピリオド(.)とカンマ(,)
  3:4   ✓ error  12ヶ月 => 12か月                                            jtf-style/2.2.3.一部の助数詞の表記
  3:10  ✓ error  全角のピリオドとカンマは使用しません。                      jtf-style/1.2.2.ピリオド(.)とカンマ(,)4 problems (4 errors, 0 warnings)

そこで .textlintrc を以下のように更新して,不要なルールを明示的に無効化する.

{
  "rules": {
    "preset-jtf-style": {
      "1.2.1.句点(。)と読点(、)": true,
      "1.2.2.ピリオド(.)とカンマ(,)": true,
      "2.2.3.一部の助数詞の表記": false,
      "3.1.1.全角文字と半角文字の間": false
    }
  }
}

もう1度実行をすると 全角のピリオドとカンマは使用しません。 以外は検出されなくなった💡期待した挙動と言える👍

$ npx textlint ./hello.txt

/Users/kakakakakku/xxx/hello.txt
  2:19  ✓ error  全角のピリオドとカンマは使用しません。  jtf-style/1.2.2.ピリオド(.)とカンマ(,)
  3:10  ✓ error  全角のピリオドとカンマは使用しません。  jtf-style/1.2.2.ピリオド(.)とカンマ(,)2 problems (2 errors, 0 warnings)

しかし textlint-rule-preset-JTF-style には他にも多くのルールがあり,全てを .textlintrc で明示的に無効化するのも正直面倒に感じる.悩ましいところ🤔

案2. textlint-rule-prh

そこで,今度は textlint-rule-prh を試す.

github.com

textlint-rule-prh は表記揺れを検出するために普段からよく使っていて,以下の記事も書いたことがある.

kakakakakku.hatenablog.com

文章を書くときに句読点以外で を使う機会はほとんどなさそうという前提で,textlint-rule-prh を使って を検出することにした.以下のように .textlintrc を作る.

{
  "rules": {
    "prh": {
      "rulePaths": [ "prh-rules/rule.yml" ]
    }
  }
}

特に正規表現などは使わず,シンプルに を検出するように prh-rules/rule.yml を作る.

version: 1

rules:
  - expected:pattern:
      - - expected:pattern:
      - 

さっそく実行をすると,期待した通りに検出することができた👍

$ npx textlint ./hello.txt

/Users/kakakakakku/xxx/hello.txt
  2:19  ✓ error  . => 。  prh
  3:4   ✓ error  , => 、  prh
  3:11  ✓ error  . => 。  prh

✖ 3 problems (3 errors, 0 warnings)

結果的に textlint-rule-prh を使うのが個人的には1番シンプルに感じたため,最近はずっと使っていて,問題なく使えている.なお,textlint-rule-prh を使うアイデアは id:konifar に教えてもらった!ありがとうございました👏

まとめ

今回は textlint を使って句読点をチェックして誤用を検出できるようにする方法をまとめた.textlint-rule-preset-JTF-styletextlint-rule-prh を試したけど,結果的には textlint-rule-prh を使うのが個人的には1番シンプルに感じていて,最近使っている.

そもそも最初は「句読点をチェックするルール」を探したけど,見つからなかった.

もし他により良い方法があったら教えてください💡