---
title: textlintで文章校正する方法
description: 日本語の文章をリアルタイムで校正するtextlintを、Zedエディタで使う方法。自作LSPサーバーの導入からルール設定、自動修正、無効化までを解説します。
---

## textlintとは

[textlint](https://textlint.github.io/) は、JavaScriptで書かれた文章校正ツールです。校正ルールをプラグインで自由に追加・設定できます。日本語に限らず、あらゆる言語のテキストを校正できます。

- 誤字脱字や表記ゆれを自動検出
- 「例えば」→「たとえば」のような表記統一
- ら抜き言葉・い抜き言葉のチェック
- 一文の長さや句読点の数をチェック

## Zed用がなかったのでつくりました

VSCode用の拡張機能はありましたが、私が最近愛用している[Zed](https://zed.dev/) にはなかったため、LSPサーバを自作しました（Powered by DeepSeek V4 Pro）。試していませんが、VS Code, Neovim, Emacsなどでも使えるものと思います。

## 2つのプログラム

| 名前 | 役割 | 状態 |
|---|---|---|
| `textlint-lsp` | LSPサーバー本体。Node.jsで動作 | [npmで公開済み](https://www.npmjs.com/package/textlint-lsp) |
| `zed-textlint` | Zed拡張機能。`textlint-lsp` を起動 | [PR提出済み](https://github.com/zed-industries/extensions/pull/6693) |

## できること

- 文字入力のたびに自動校正（同じ文章を再チェックしないので2回目以降は一瞬）
- 波線で問題箇所を表示
- `Ctrl+.`（または⚡アイコンをクリック）で修正候補を表示・適用
- ルール単位の無効化（行単位／全ルール）
- `prh.yml` による独自の表記ルール定義

![textlintの波線表示](/img/textlint-eg-1.png)

![コードアクションの修正候補](/img/textlint-eg-2.png)

## 導入方法

### 1. textlint-lsp をインストール

```bash
npm install -g textlint-lsp
```

### 2. プロジェクトにtextlintをセットアップ

```bash
npm install --save-dev textlint @textlint/markdown
npm install --save-dev @textlint-ja/no-synonyms prh
```

`.textlintrc.json` を作成：

```json
{
  "plugins": { "@textlint/markdown": true },
  "rules": {
    "@textlint-ja/no-synonyms": true,
    "prh": { "rulePaths": ["prh.yml"] }
  }
}
```

### 3. Zed拡張機能をインストール

#### 方法A：Zed拡張機能一覧から（PRマージ後）

Zedの拡張機能一覧に「textlint」が表示されたら、ワンクリックでインストールできます。

#### 方法B：Dev Extension として手動インストール

1. [zed-textlint.zip](/zed-textlint.zip) をダウンロードして展開
2. Zedで `Ctrl+Shift+P` → `zed: install dev extension` を実行
3. 展開した `zed-textlint` フォルダを指定

導入後、`.md` または `.mdx` ファイルを開くと自動的にlintが走ります。

## コードアクション（自動修正）

波線の上で `Ctrl+.` を押す（または⚡アイコンをクリックする）と、次の操作が選べます。

| アクション | 内容 |
|---|---|
| 修正を適用 | textlintの自動修正候補を適用 |
| 無効化:（ルール名） | その行だけ指定ルールを無効化 |
| 無効化: すべてのルール | その行以降の全ルールを無効化 |

## 無効化コメント

`.md` ファイルではHTMLコメント形式で記述します。

- `<!-- textlint-disable prh -->` で無効化
- `<!-- textlint-enable prh -->` で再有効化

`.mdx` ファイル（Starlight / Astro）では、MDXの構文制約のため、`{/* */}` で囲みます。

- `{/* <!-- textlint-disable prh --> */}` で無効化
- `{/* <!-- textlint-enable prh --> */}` で再有効化

:::note
##### 📝 MDXでの注意点
Zedのコードアクションから自動挿入されるので、普段は手動で書く必要はありません。
:::

## 公開について

### `textlint-lsp`（LSPサーバー）

[npmで公開済み](https://www.npmjs.com/package/textlint-lsp)です。`npm install -g textlint-lsp` で誰でもインストールできます。

### `zed-textlint`（Zed拡張機能）

[Zed拡張機能リポジトリにPR提出済み](https://github.com/zed-industries/extensions/pull/6693)です。マージまでは [zed-textlint.zip](/zed-textlint.zip) をDev Extensionとしてインストールしてください。

## トラブルシューティング

### MDXファイルで `{ }` がエラーになる

Mermaid図の `{{ }}` がMDXパーサにJSX式と誤認されることがあります。`{{` を `(` に置き換えてください。

### lintが遅い

初回のlintには数秒かかります。2回目以降は前回と同じ文章なら再チェックしないため、すぐに結果が表示されます。
