KIMUSON.DEV

マークダウンブログにtextlintを導入して執筆体験を向上する

  • # ブログ
  • # VSCode
2020年10月22日

このブログはマークダウンファイルで記事を執筆&管理しているのですが、

zenn-cli + reviewdog + textlint + GitHub Actions で執筆体験を最高にする

こちらの記事が流れてきて、ESLint みたいなノリで文章校正できるのめっちゃ良さそうだなーって思ったので、このブログにも導入してみます。

Zenn は、Qiita のような技術知見共有サービスで、Github リポジトリで記事を管理できるのでこのブログのような SSG ベースの技術ブログと執筆体験がとても近いです。

textlint について

公式リポジトリは textlint/textlint: The pluggable natural language linter for text and markdown. です。

The pluggable linting tool for text and markdown. textlint is similar to ESLint, but it’s for use with natural language.

とのことです。

CUI からも走らせられますが、vscode-textlint - Visual Studio Marketplace という VSCode プラグインがあるのでこちらから走らせます。

とりえあず導入してみる

textlint をローカルインストールします。

$ yarn add -D textlint

vscode-textlint - Visual Studio Marketplace から、拡張機能を取得してインストールします。

僕は明示的に推奨設定に書いておきたかったので、.vscode/extensions.json に書いてます。

title=.vscode/extensions.json
{
  "recommendations": [
    "taichi.vscode-textlint",
  ]
}

自明なのであえて書くこともないですけど、textlint がインストールされている node_modules のパスと設定ファイルのパスを書いておきます。

title=.vscode/settings.json
{
  "textlint.nodePath": "./node_modules",
  "textlint.configPath": "./.textlintrc",
  "textlint.targetPath": "./content/"
}

これで、導入が終わりました。

日本語ルールの適用

textlint では、言語毎のルールを .textlintrc に書いていくことで適用したルールに基づいて VSCode が怒ってくれます。

ルールについては、

Collection of textlint rule # Rules: Japanese · textlint/textlint Wiki

に日本語ルールが集められています。

いちいち個別のルール選んでいくのは面倒なので、プリセットも公開されています。

Collection of textlint rule # Rule Presets: Japanese · textlint/textlint Wiki

まさにって感じの 技術文書向けの textlint ルールプリセット があったので、とりあえずこれを使って試してみます。

$ yarn add -D textlint-rule-preset-ja-technical-writing
title=.textlintrc
{
  "rules": {
    "preset-ja-technical-writing": {
      "ja-no-mixed-period": false,  // 文末が読点以外であることを許容
      "no-exclamation-question-mark": false  // !と?を許容
    }
  }
}

これで OK。

見ての通り、よろしくない表現を怒ってくれてます。

ファイル保存時に自動修正する

修正可能なエラー自体そんな無さそうなのでウザくもないかなーってことで自動修正も適用してみます。

title=.vscode/settings.json
{
  // ...
  "textlint.autoFixOnSave": true
}

よし、試そう!と思ったんですけど、そもそも自然言語だけあって自動修正可能な問題が見つからない。

結構試してみたけど全然当たらないんでこの頻度なら必要ないかなってことでオフりました。

とりあえずこれで終わります。 運用してみてまたなにかあったら追記します。

参考