textlint × VSCodeを使用した文章校正チェック

はじめに

こんにちは、エムティーアイ テクノロジー本部の上野です。

本記事では文章校正ツールであるtextlintの紹介とVisual Studio Code(以下VSCode)を使用した実例について解説します。

textlintとは

textlint is an open source text linting utility written in JavaScript. It is hard to lint natural language texts, but we try to resolve this issue by pluggable approach.

公式ドキュメントより抜粋。

平たくはESLintに代表される各種Lintツールの自然言語バージョンです。

プレーンテキストやMarkdownテキストを対象にいわゆる文章校正を自動的に走らせて、ルールに応じて自動修正も適用できます。

環境

  • Windows 11 Pro 22631.4460
  • Visual Studio Code 1.73.1
  • Node.js v22.7.0
  • npm 10.8.2
  • textlint 14.3.0
  • vscode-textlint v0.11.0

セットアップ

前提としてNode.jsのインストールが必要です。

未インストールの方は事前にNode.jsのインストールを実施ください。

次の例では任意のディレクトリでNode.jsのプロジェクトを作成します。

npm init -y

プロジェクトが作成されましたらtextlintおよび後述する各種ルールおよびプリセットをインストールします。

npm install --save-dev `
    textlint `
    textlint-rule-max-ten `
    textlint-rule-preset-ja-spacing `
    textlint-rule-preset-ja-technical-writing `
    textlint-rule-preset-jtf-style `
    textlint-rule-no-doubled-joshi `
    textlint-rule-ja-unnatural-alphabet

VSCodeの設定

エディター上から校正を有効化するために以下の拡張機能をインストールします。

vscode-textlint - Visual Studio Marketplace

ルールリスト

今回使用するルールのリストは以下になります。それぞれ概要と対象リポジトリのリンクを掲載いたします。

GitHub - textlint-ja/textlint-rule-max-ten

一文に利用できるの数を制限するtextlintルールです。

GitHub - textlint-ja/textlint-rule-preset-ja-spacing

textlintのスペース関連のmonorepoです。

日本語周りにおけるスペースの有無を決定するtextlintルールプリセットを提供します。

GitHub - textlint-ja/textlint-rule-preset-ja-technical-writing

技術文書向けのtextlintルールプリセットです。

GitHub - textlint-ja/textlint-rule-preset-JTF-style

JTF日本語標準スタイルガイド(翻訳用) for textlint.

2016年2月22日改訂第2.2版を元にしています。

GitHub - textlint-ja/textlint-rule-no-doubled-joshi

1つの文中に同じ助詞が連続して出てくるのをチェックするtextlintルールです。

GitHub - textlint-ja/textlint-rule-ja-unnatural-alphabet

不自然なアルファベットを検知するtextlintルール。

使用例

本記事自体を実際にtextlintを使用し解析します。

セットアップが完了すると以下のような指摘事項が問題として検出されます。

textlint_default_chk

お試しで全角文字と半角文字との間にスペースを強制するルールを適用してみます。

以下に従い、.textlintrc.jsonに以下の記述を追加します。

textlint-rule-preset-ja-spacing/packages/textlint-rule-ja-space-between-half-and-full-width at master · textlint-ja/textlint-rule-preset-ja-spacing · GitHub

 {
   "filters": {},
   "rules": {
     "preset-ja-spacing": {
       "ja-space-between-half-and-full-width": {
             "space": "always"
         }
     },

更新後、一度VSCodeを再起動します。すると今度はスペースが無い箇所に関して問題を検出するようになりました。

textlint_update_rule

またエラーの内容からルール同士で矛盾のある指摘を出すようになりました。

jtf-styleはスペースを入れないルールですが、先ほど変更したja-spacingはスペースを入れることを提示しています。

textlint_rule_duplication

ここから分かる通り各ルールはそれぞれの規定に基づいた判定を返すため、複数のルールを使用する場合は注意してください。

この場合スペースを入れる際には以下のように記述します。

  "rules": {
     "preset-ja-spacing": {
       "ja-space-between-half-and-full-width": {
             "space": "always"
         }
     "preset-jtf-style": {
       "3.1.1.全角文字と半角文字の間": false
     }
   }
}

以上、本項ではスペースを設ける方法について解説してまいりましたが最終的にスペース無しの見栄えが好ましいとしたためデフォルトのまま執筆しております。

番外編

上記で個々のローカル環境においてtextlintの利用について触れていきましたが、本来はチームなどの組織単位で利用することが推奨されます。

各プロダクトや状況に応じてルールを設定することは勿論、可能な限り手軽に管理されることが望ましいです。

ここではCI/CDを通じて自動で校正する仕組みの例を提示いたします。

Azure Pipline CI/CD

当社ではAzure DevOpsの利用が盛んであるためAzure Piplineを使用したCI/CDの最もシンプルな例を提示いたします。

trigger:
- main

pool:
  vmImage: ubuntu-latest

steps:
- task: UseNode@1
  inputs:
    version: '22.x'
  displayName: 'Install Node.js'

- script: |
    npm init -y
  displayName: 'npm init'

- script: |
    npm install --save-dev textlint textlint-rule-preset-ja-technical-writing
    npx textlint --init
  displayName: 'Setup textlint'

- script: |
    npx textlint "./*.md"
  displayName: 'Review and Apply'

上記例ではプロジェクトの初期化を行っておりますが事前に定義されたpackage.json等があれば実施は不要です。

また使いやすさを加味するとDockerなどのコンテナを併用しての利用も考えられます。

まとめ

エディターを介した文章校正ツールの利用方法と各種ルールについて解説してまいりました。

これらを通じて皆様の執筆ライフが良くなれば幸いです。

最後までお読みいただきありがとうございました。