proofread-helper

proofread-helperは@vvakameさんが作っている文章の校正補助ツールです。(TechBoosterとかの執筆で使っている?らしいです)

機能としては表記ゆれの辞書を指定して、そのルールに則って文章のチェック、また期待する単語への書き換えを行うことができます。

ものすごくざっくり書くと、期待する単語と表記ゆれを補足する正規表現の組み合わせを持った辞書を作ってチェックするような形です。

仕組み的にはazu/technical-word-rulesと殆ど同じですが、辞書をyaml形式で書けたり、辞書内に期待通りに動いているのかの簡単なテストも書くことができます。 なので、辞書の追加や管理がしやすいと思います。

例えば、以下のように辞書を書くことができます。

version: 1
rules:
# expectedのみだと 大文字小文字全角半角の統一 されてるかをチェックできる
  - expected: jQuery
    specs:
      - from: jquery
        to:   jQuery
      - from: JQUERY
        to:   jQuery
# patternにマッチするものはexpecetedが本来の表現であるというルール
# ディフォルト => デフォルト
# 表現の統一を図る
  - expected: デフォルト
    pattern:  ディフォルト

今回このproofread-helpertextlintから扱えるazu/textlint-rule-prhというルールを作ってみました。

textlintとは

textlintについてはMarkdownなどをルールを元にチェックできるツールで、詳しくは以下の記事を見てみて下さい。

インストール/使い方

実際にインストールとして文章をチェックしてみます。 次のリポジトリに同様の設定を行ったサンプルを用意してあります。

(サンプルでは-gではなく-Dでインストールしています)

1: textlintとtextlint-rule-prhをインストール

npm install -g textlint textlint-rule-prh

2: proofread-helperの辞書を追加する

proofread-helperにはデフォルトでWEB+DBをベースとした辞書が入っています。 今回は最小限のルールにしたいので、prh.ymlという名前でproofread-helperの辞書を追加します。

version: 1
rules:
  - expected: jQuery
    specs:
      - from: jquery
        to:   jQuery
      - from: JQUERY
        to:   jQuery

3: .textlintrcを作成する

.textlintrc はtextlintの設定ファイルで、どのルールを使うかとルール別の設定を追加できます。

textlint-rule-prhはrulePathsにproofread-helperの辞書ファイルへのパスを設定する必要があります。

今回は先ほど作成したprh.ymlへのファイルパスを指定します。

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

文章をチェックする

textlintを使って文章をチェックしてみます。

$ textlint README.md
# サンプルプロジェクトではnpm run-script経由
# npm run textlint

実行結果を見てみると

> textlint README.md

/Users/azusa_okayama/.ghq/github.com/azu/prh-textlint-example/README.md
  10:1  error  JQuery => jQuery  prh

✖ 1 problem (1 error, 0 warnings)

10行目の1列目にJQueryとなっていますが、それはjQueryが正しいのでは?と提案してくれます。

$ textlint -f preety-errorpreety-errorというフォーマッターを使ってみるともう少し見た目でも分かりやすいです。

result

Markdownを安全に処理する

これはtextlintの特徴なのですが、textlintはMarkdownをパースしてASTを介してルールが処理するので、単純なキーワードマッチとは少し異なります。

例えば、textlint-rule-prhでは次のようなリンクはチェックの対象から外しています。

[jquery.com](http://jquery.com/) というリンクの文字列は無視できる。 

リンクや引用などは自分で書いた文字列じゃない事があるので、この部分の文字列をチェックして引っかかるとストレスなので、無視するようになっています。

proofread-helperでもignoreのルールが書けますが、正規表現で書くことになるのでtextlint経由で使った場合との違いになると思います。

辞書の追加

先程も書いたようにproofread-helperはyamlファイルに追加するだけで、 辞書を追加していけるのでプロジェクトごとの辞書を持ちやすいです。

JavaScript-Plugin-Architectureという書籍でも、この書籍内でのみ使うルールを管理して使っています。

例えば、"プラグインアーキテクチャ"という単語で表記ゆれが起きていたので、 辞書に以下のようなルールを追加してから修正するということが簡単に行えます。

version: 1
rules:
  - expected: プラグインアーキテクチャ
    pattern:
      - プラグイン機構
      - プラグインのアーキテクチャ

定義済み辞書

自分が利用している定義済みの辞書は以下にあります。

WEB+DB PRESS用語統一ルールやJavaScriptの関連用語、JSer.infoで利用してるルールなどが定義されています。

おわりに

textlintからproofread-helperを扱えるazu/textlint-rule-prhというtextlintルールについて紹介しました。

proofread-helperは簡単にルールを追加できて文章の表記ゆれをチェックするのに、とても便利です。

今回はtextlintから扱うことでMarkdownを安全に処理できるようになり、他のtextlintルールと合わせて使えるようにしました。