日本語にtextlintをかけると便利、という話をチラっと聞いたのでブログに応用すべく導入してみました。

まず、textlint自体がこちら。

textlint/textlint
The pluggable natural language linter for text and markdown. - textlint/textlint

そして、日本語技術文書用のルールプリセットがこちらです。

textlint-ja/textlint-rule-preset-ja-technical-writing
技術文書向けのtextlintルールプリセット. Contribute to textlint-ja/textlint-rule-preset-ja-technical-writing development by creating an account on GitHub.

ブログに応用するという観点で考えると、Hugoのルートディレクトリがよさそうです。

% npm install textlint
% npm install textlint-rule-preset-ja-technical-writing

としてtextlint本体とルールをインストールします。-gでインストールしなかったのはNetlifyで自動ビルドすることを想定したためです。

次のような形でファイルやディレクトリを指定して文書チェックが可能です。

# ファイル指定
% ./node_modules/textlint/bin/textlint.js ./content/posts/xxxxxx.md

# ディレクトリ指定
% ./node_modules/textlint/bin/textlint.js ./content/

試しにある日の投稿をチェックしてみると、

% ./node_modules/textlint/bin/textlint.js ./content/posts/2018-07-21-codepush.md

./content/posts/2018-07-21-codepush.md
  18:15  error  弱い表現: "思います" が使われています。  preset-ja-technical-writing/ja-no-weak-phrase
  26:16  error  二重否定: 〜ないことはない               preset-ja-technical-writing/no-double-negative-ja
  34:51  error  弱い表現: "思います" が使われています。  preset-ja-technical-writing/ja-no-weak-phrase
  51:26  error  文末が"。"で終わっていません。           preset-ja-technical-writing/ja-no-mixed-period

✖ 4 problems (4 errors, 0 warnings)

このようにエラーが出力されます。くせになっている表現なんかがみつかるのでとても良さそう。

全記事一気にチェックしたらどうなるのかなっとやってみたところ、だいぶ長いこと待たされ、こんな結果になりました。timeコマンドで時間を測ってやりましたとも。

% time ./node_modules/textlint/bin/textlint.js ./content

(略)

✖ 2176 problems (2176 errors, 0 warnings)
✓ 128 fixable problems.
Try to run: $ textlint --fix [file]

./node_modules/textlint/bin/textlint.js ./content  249.03s user 45.99s system 112% cpu 4:22.55 total

450近くのファイルを処理するのにトータルで6分ちょいかかり、2000を超える指摘がありました。この時間、この量を考えるとNetlifyでビルド前に確認するというのはあまり現実的ではなさそうです。

そうなると新しく追加する記事はチェックするとか、気が向いたときに少しずつ修正するというのが現実的な解になりそう。

ちなみに先程の出力を見てみると✓ 128 fixable problems.という表示が目に付きます。これは自動的に修復可能な問題箇所だということで、--fixオプションをつけると自動的に直してくれるようです。

早速実施してみましょう。

% ./node_modules/textlint/bin/textlint.js ./content --fix

(略)

  42:35  ✔   一つ => 1つ
数量を表現し、数を数えられるものは算用数字を使用します。任意の数に置き換えても通用する語句がこれに該当します。                                                preset-ja-technical-writing/arabic-kanji-numbers
  24:53  ✔   "することができる機能"は冗長な表現です。"することが"を省き簡潔な表現にすると文章が明瞭になります。参考: http://qiita.com/takahi-i/items/a93dc2ff42af6b93f6e0  preset-ja-technical-writing/ja-no-redundant-expression

(略)

✔ Fixed 128 problems
✖ Remaining 348 problems

どうもすることができるという表現を使ってしまいがちなようです。

textlintで細かい点を改善していきます。最後はこの記事にlintをかけてPush!