prh と textlint-rule-prh
テキストファイルの表記揺れをチェックする Node.js 製ツールに、proofread-helper (prh) というものがあります。
これを使うと、例えば、テキストファイル内の javascript
という文字列を JavaScript
に自動的に修正できたりします(大文字・小文字の構成)。
textlint の作者の azu さんが、この prh を textlint から使えるようにするルール定義 textlint-rule-prh を作成してくれています。 prh を直接使うよりも、Markdown ファイルの構文をうまく扱ってくれるみたいです(リンク内のテキストは対象外にするなど)。
インストール
ルールのインストール
textlint 用のルールモジュールである textlint-rule-prh
は、次のようにインストールします(textlint 自体はインストール済みであるとします)。
proofread-helper を別途インストールする必要はありません。
$ npm install --save-dev textlint-rule-prh
設定ファイルの作成
proofread-helper (prh) の設定ファイル(表記揺れチェックルール)は、下記のような感じで Yaml ファイルで作成します。
version: 1
rules:
# 大文字小文字全角半角の統一
- expected: JavaScript
- expected: jQuery
textlint の設定ファイルで textlint-rule-prh
を有効にし、上記のルールファイルのパスを指定します。
{
"rules": {
"prh": {
"rulePaths": [
"./rules.yml"
]
}
}
}
実行
あとは、textlint を実行すれば、表記揺れを検出してくれます。
$ textlint "content/**/*.md"
/Users/maku/blog/content/page1.md
175:1 ✓ error jquery => jQuery prh
/Users/maku/blog/content/page2.md
237:1 ✓ error javascript => JavaScript prh
✖ 2 problem (2 error, 0 warnings)
✓ 2 fixable problem.
Try to run: $ textlint --fix [file]
textlint-rule-prh
は auto fix に対応しているので、 --fix
オプションを指定して実行すれば、ファイル内の表記揺れを自動で修正して保存してくれます。
$ textlint --fix "content/**/*.md"
表記揺れルール
proofread-helper (prh) では柔軟な表記揺れルールを定義することができます。 書き方のサンプルは 本家の記述例 を見ると分かりやすいですが、いくつかポイントをまとめておきます。
大文字と小文字の統一
rules:
- expected: jQuery
このように expected
のみを指定しておくと、大文字・小文字の違いだけがある単語を検出してくれます(例: JQuery
→ jQuery
)。
パターンに一致したものを修正
rules:
- expected: ソフトウェア
pattern: ソフトウエア
pattern
に一致する単語が見つかったら、それを expected
に修正するよう促します。
次のように pattern
に複数の単語を指定することもできます(pattern
と patterns
は同義)。
rules:
- expected: ソフトウェア
patterns:
- ソフトウエア
- ソフトウエアー
- ソフトウェアー
pattern
の部分に /正規表現/
という指定も可能です。
rules:
- expected: ソフトウェア
patterns:
- /ソフトウ[エ|ェ]アー/
- ソフトウエア
変換のテスト仕様を記述する
正規表現でパターン指定した場合は、 specs
プロパティでテストを記述しておくことよいでしょう。
設定したルールで from
を to
にうまく変換できない場合は、spec failed となり動作を停止します。
rules:
- expected: 技術書典
pattern: /技術書(店|点|展|てん)/
specs:
- from: 技術書点
to: 技術書典
- from: 技術書展
to: 技術書典
サフィックスを追加するときの注意
rules:
- expected: サーバー
pattern: /サーバ(?!ー)/
specs:
- from: サーバ
to: サーバー
prh: 最後に伸ばすのが最近の主流みたいです。
例えば、「サーバ」を「サーバー」にするなど、既存の単語にサフィックスを追加する場合はちょっと注意が必要です。
単純に pattern
に「サーバ」と指定すると、既に「サーバー」になっているものを「サーバーー」に修正しようとしてしまうので、上記のように指定しておく必要があります。
「ユーザ」を「ユーザー」にしたいときなども同様です。
スペースが必要な単語
rules:
- expected: VS Code
pattern: /vs ?code/i
specs:
- from: vscode
to: VS Code
- from: vs code
to: VS Code
- from: VS Code
to: VS Code
スペースなしの VSCode
を、スペースありの VS Code
に修正するよう促します。
上記の正規表現だと、もともと正しい VS Code
にもヒットしてしまいそうですが、その場合はうまいこと無視してくれるみたいです。
短い英単語では wordBoundary 指定しておく
js
や id
といった、短い単語の大文字・小文字を変換するときは、次のように wordBoundary
オプションを true
に設定しておくのがよいようです。
こうしておくと、ある単語の部分文字列として出現したときに無視してくれるようになります。
rules:
- expected: js
# pattern: "/\b[JjJj][SsSs]\b/g" # と等価 \b が前後に付与される
options:
wordBoundary: true
specs:
- from: foo JS bar
to: foo js bar
- from: foo altJS bar
to: foo altJS bar
# 日本語+単語境界の仕様は自分で調べてね…!
- from: 今日もJS祭り
to: 今日もjs祭り