hotaruの蛍雪日記

競プロとゲームをしています

textlintを使う

textlintはテキストをlintするツール。

作者azuさんの解説。

textlintで日本語の文章をチェックする

インストール

textlintはNode.jsのツール。

textlintとそのルールはNode.jsのパッケージマネージャであるnpmからインストールする。

Windowsではインストーラからインストールした。 WSLではAPTでnpmをインストールした。

npmでtextlintとルールをグローバルインストールする。

npm i -g textlint textlint-plugin-latex2e textlint-rule-preset-ja-engineering-paper textlint-rule-preset-ja-spacing textlint-rule-preset-ja-technical-writing textlint-rule-preset-japanese textlint-rule-preset-jtf-style textlint-rule-spellcheck-tech-word

ルール

lintのルールは.textlintrcファイルに記述する。 .textlintrcは次のように書く。

{
  "rules": {
    "max-ten": {
      "max": 3
    },
    "spellcheck-tech-word": true,
    "no-mix-dearu-desumasu": true
  }
}

ルールがまとめてあるサイト。

prh

グローバルのja-engineering-paperはローカルのprhを使おうとする。 つまり./node_modules/prh/prh-rules/media/WEB+DB_PRESS.ymlを使おうとする。 原因はよくわからないがファイルが無いエラーを吐く。

そのため次のパスにある辞書を使うよう設定する。

  • Win: C:\\Users\\hotaru\\AppData\\Roaming\\npm\\node_modules\\textlint-rule-preset-ja-engineering-paper\\node_modules\\prh\\prh-rules\\media\\WEB+DB_PRESS.yml
  • WSL: /usr/local/lib/node_modules/textlint-rule-preset-ja-engineering-paper/node_modules/prh/prh-rules/media/WEB+DB_PRESS.yml
    "preset-ja-engineering-paper": {
      "prh": {
        "rulePaths": [
          "/usr/local/lib/node_modules/textlint-rule-preset-ja-engineering-paper/node_modules/prh/prh-rules/media/WEB+DB_PRESS.yml"
        ]
      },
    }

プロジェクトによっては自作辞書も使用する。 prh.ymlを使うようにしてprh.ymlを書く。 存在しない*.ymlを読み込もうとするとエラーが出るため、使わないなら指定しない。

    "prh": {
      "rulePaths": [
        "prh.yml"
      ]
    },
version: 1
rules:
  - expected: default
    pattern:  deflaut

plugins

textlint-plugins-latex2e

texファイルでもlintするプラグイン.textlintrc"plugins"に次のように記述してプラグインを有効化する。

{
  "plugins": ["latex2e"],
}

VSCode

拡張機能vscode-textlintを使う。

設定例

強いルール

グローバル・WSL用のファイル。

いろいろなルールを有効化した版。 WindowsならrulePathsを変更する。

C:\\Users\\hotaru\\AppData\\Roaming\\npm\\node_modules\\textlint-rule-preset-ja-engineering-paper\\node_modules\\prh\\prh-rules\\media\\WEB+DB_PRESS.yml ユーザー名は書き換える

// ~/.textlintrc.json
{
  "plugins": [
    "latex2e"
  ],
  "rules": {
    "preset-ja-engineering-paper": {
      "prh": {
        "rulePaths": [
            "/usr/local/lib/node_modules/textlint-rule-preset-ja-engineering-paper/node_modules/prh/prh-rules/media/WEB+DB_PRESS.yml"
        ]
      },
      "unify-kuten-and-touten": false
    },
    "preset-ja-spacing": {
      "ja-space-around-code": {
        "after": false,
        "before": false
      }
    },
    "preset-ja-technical-writing": {
      "max-kanji-continuous-len": {
        "allow": [
          "日本機械学会論文集"
        ],
        "max": 8
      },
      "sentence-length": {
        "max": 200
      }
    },
    "preset-japanese": {
      "sentence-length": {
        "max": 200
      }
    },
    "preset-jtf-style": true,
    "spellcheck-tech-word": true
  }
}

,.

、。ではなく,.を使うLinux用のファイル。

// ~/.textlintrc.json
{
  "plugins": [
    "latex2e"
  ],
  "rules": {
    "preset-ja-engineering-paper": {
      "prh": {
        "rulePaths": [
            "/usr/local/lib/node_modules/textlint-rule-preset-ja-engineering-paper/node_modules/prh/prh-rules/media/WEB+DB_PRESS.yml"
        ]
      }
    },
    "preset-ja-spacing": {
      "ja-space-around-code": {
        "after": false,
        "before": false
      }
    },
    "preset-ja-technical-writing": {
      "ja-no-mixed-period": {
        "periodMark": ""
      },
      "max-kanji-continuous-len": {
        "allow": [
          "日本機械学会論文集"
        ],
        "max": 8
      },
      "sentence-length": {
        "max": 200
      }
    },
    "preset-japanese": {
      "sentence-length": {
        "max": 200
      }
    },
    "preset-jtf-style": {
      "1.2.1.句点(。)と読点(、)": false,
      "1.2.2.ピリオド(.)とカンマ(,)": false,
      "4.1.3.ピリオド(.)、カンマ(,)": false
    },
    "spellcheck-tech-word": true
  }
}

f:id:hotarunx:20201209112152j:plain

運用

  • ルールが競合したり、意図せぬ語字が検出される。
  • 自動修正を無効化するかルールを弱めるか。
  • .textlintrcはカレントディレクトリ→ホームディレクトリの順で優先される。両方使われたりはしない。
  • グローバルには軽いルールを置いておいて、ローカルでは厳しいルールを置くとよさそう。
  • npmのパッケージはグローバルインストールするか。