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

## 作った理由

日本語の文章を書くとき、表記ゆれや誤字脱字のチェックに [textlint](https://textlint.github.io/) が便利です。しかし、愛用している [Zed](https://zed.dev/) エディタに拡張機能がなかったので、LSPサーバーを自作しました。

## 2つのプログラム

| 名前 | 役割 | 公開 |
|---|---|---|
| `textlint-lsp` | LSPサーバー本体。Node.jsで動作。Zed以外のエディタでも使える | npm（準備中） |
| `zed-textlint` | Zed拡張機能。Zed上で `textlint-lsp` を起動する | 開発中 |

LSPサーバーは汎用なので、VSCodeやNeovimなどほかのエディタでも動きます。

## できること

- 保存時に自動校正（編集を止めて10秒後にも自動実行）
- 波線で問題箇所を表示
- 修正候補の適用（`Ctrl+.`）
- ルール単位の無効化
- `prh.yml` による独自の表記ルール定義

## セットアップ

1. Node.js 18以上をインストール
2. プロジェクトにtextlintとルールを追加

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

3. `.textlintrc.json` を作成

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

4. `prh.yml` に独自ルールを定義

```yaml
version: 1
rules:
  - expected: たとえば
    pattern: 例えば
    prh: 漢字で書かず、ひらがなで書くと読みやすくなります
```

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

波線の上で `Ctrl+.` を押すと、次の操作が選べます。

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

## 無効化コメント

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

- `&lt;!-- textlint-disable prh --&gt;` で無効化
- `&lt;!-- textlint-enable prh --&gt;` で再有効化

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

- `{/* &lt;!-- textlint-disable prh --&gt; */}` で無効化
- `{/* &lt;!-- textlint-enable prh --&gt; */}` で再有効化

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

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

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

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

### lintが重い

`textlint-lsp` は保存時と、編集を止めてから10秒後に自動実行されます。編集のたびに走ることはありません。
