普段ESLintやstylelintでソースコードをLintすることはありますが、文章のLintはしたことがなかったので、試してみました。
textlintを導入する
まず、textlint本体とルールプリセットをインストールし、設定ファイルを作成します。JS形式なのは私の好みです。
$ npm i -D textlint textlint-rule-preset-ja-spacing textlint-rule-preset-ja-technical-writing textlint-rule-spellcheck-tech-word
$ touch .textlintrc.js
設定ファイルはこんな感じ。preset-ja-technical-writing
に関してはデフォルトよりゆるめにしています。
module.exports = {
rules: {
// Youtube→YouTubeなど、技術系用語のスペルチェック
"spellcheck-tech-word": true,
// 技術系記事を書くためのルール
"preset-ja-technical-writing": {
// 一文あたりの最大文字数
"sentence-length": {
max: 120,
},
// 漢字が連続してよい最大文字数
"max-kanji-continuous-len": {
max: 8,
},
// 全角の「!?」を許容する
"no-exclamation-question-mark": {
// allow to use !
allowHalfWidthExclamation: false,
// allow to use !
allowFullWidthExclamation: true,
// allow to use ?
allowHalfWidthQuestion: false,
// allow to use ?
allowFullWidthQuestion: true,
},
},
// スペース関連のルール
"preset-ja-spacing": true,
},
};
コマンドを叩いてみます。私はHexoを使っているので、パスは下記のようになります。
$ npx textlint source/**/*.md
11:17 ✓ error Youtube => YouTube spellcheck-tech-word
16:92 error 一つの文で"、"を3つ以上使用しています ja-technical-writing/max-ten
30:2 ✓ error %o => %o spellcheck-tech-word
30:65 ✓ error %} => %} spellcheck-tech-word
32:5 ✓ error Youtube => YouTube spellcheck-tech-word
37:2 ✓ error %o => %o spellcheck-tech-word
37:54 ✓ error %} => %} spellcheck-tech-word
44:2 ✓ error %o => %o spellcheck-tech-word
44:37 ✓ error %} => %} spellcheck-tech-word
51:2 ✓ error %o => %o spellcheck-tech-word
51:66 ✓ error %} => %} spellcheck-tech-word
58:2 ✓ error %o => %o spellcheck-tech-word
58:50 ✓ error %} => %} spellcheck-tech-word
65:2 ✓ error %o => %o spellcheck-tech-word
65:60 ✓ error %} => %} spellcheck-tech-word
72:2 ✓ error %o => %o spellcheck-tech-word
72:45 ✓ error %} => %} spellcheck-tech-word
79:2 ✓ error %a => %a spellcheck-tech-word
100:27 error "ほど" が連続して2回使われています。 ja-technical-writing/ja-no-successive-word
(...後略)
大量にエラーが出ました。「✓」がついたものは--fix
オプションで自動的に修正できます。右側に表示されているのが引っかかったルールです。これは許容したい、というものがあれば設定ファイルに追記します。私の場合はHEXOの独自記法が引っかかったので、これを許容するようにルールを変えてみます。
$ npm i -D textlint-filter-rule-allowlist
プラグインをインストールできたら、設定ファイルに下記のように追記します。
module.exports = {
// 前略
filters: {
allowlist: {
allow: [
// HEXOの独自記法
"/\\{%\\w+\\s.+\\s%\\}/",
],
},
},
};
正規表現で該当箇所を指定すると、エラーが出なくなります。
VSCodeと連携する
vscode-textlintをインストールします。私はtextlint.autoFixOnSave
をオンにして、保存時にfixも走るようにしました。
私はVSCodeにPrettierを入れて保存時に自動修正が走るようにしているのですが、これがpreset-ja-spacing
の「英数字と日本語の間にスペースを開けない」とバッティングしてしまいました。PrettierリポジトリのIssueにもちょくちょく上がっているようなのですが、なかなか対応されていないようです。幸いMarkdownにおいてはPrettierがないと困るほどではないので、settings.jsonに下記を追記して無効化しました。
"prettier.disableLanguages": ["markdown"]
とりあえずこれでしばらく運用してみます。まずは更新ペースを上げなくては…。