ブログ記事も含めて文章を書くときに使う句読点は ,
と .
に統一している.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.ピリオド(.)とカンマ(,)
など,句読点に関係するルールがある.
以下の .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 を試す.
textlint-rule-prh は表記揺れを検出するために普段からよく使っていて,以下の記事も書いたことがある.
文章を書くときに句読点以外で ,
と .
を使う機会はほとんどなさそうという前提で,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-style の 1.2.1 は期待した挙動をしたけど,JTF には他にもルールが含まれているから個別に無効化をしないといけなかったりしてちょっと面倒だなーと😅
— カック@テックブロガー (@kakakakakku) 2021年8月20日
もっとうまいやり方はあるかもしれませんが、prhでルール組めばできそうですhttps://t.co/3TqEpOTuyA
— こにふぁー (@konifar) 2021年8月20日
まとめ
今回は textlint を使って句読点をチェックして誤用を検出できるようにする方法をまとめた.textlint-rule-preset-JTF-style と textlint-rule-prh を試したけど,結果的には textlint-rule-prh を使うのが個人的には1番シンプルに感じていて,最近使っている.
そもそも最初は「句読点をチェックするルール」を探したけど,見つからなかった.
- textlint-rule-max-ten
、,
や。.
など句読点の設定はできるけど「個数を制限する」ルールになっている- GitHub - textlint-ja/textlint-rule-max-ten: textlint rule that limit maxinum ten(、) count of sentence.
- textlint-rule-ja-no-mixed-period
。.
など句点の設定はできるけど「文末の句点を強制する」ルールになっている- GitHub - textlint-ja/textlint-rule-ja-no-mixed-period: 文末の句点(。)の統一 と 抜けをチェックするtextlintルール
- textlint-rule-preset-ja-engineering-paper
- unify-kuten-and-touten として JTF の
1.2.1.句点(。)と読点(、)
が拡張されているけど単独では使えない - GitHub - kn1cht/textlint-rule-preset-ja-engineering-paper: textlint rule preset for Japanese academic papers of enginering
- unify-kuten-and-touten として JTF の
もし他により良い方法があったら教えてください💡