--- 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コメント形式で記述します。 - `<!-- textlint-disable prh -->` で無効化 - `<!-- textlint-enable prh -->` で再有効化 `.mdx` ファイル(Starlight / Astro)では、MDXの構文制約のため、`{/* */}` で囲みます。 - `{/* <!-- textlint-disable prh --> */}` で無効化 - `{/* <!-- textlint-enable prh --> */}` で再有効化 :::note ##### 📝 MDXでの注意点 Zedのコードアクションから自動挿入されるので、普段は手動で書く必要はありません。 ::: ## トラブルシューティング ### MDXファイルで `{ }` がエラーになる このPCではMermaid図の `{{ }}` がMDXパーサーにJSX式と誤認されることがあります。`{{` を `(` に置き換えてください。 ### lintが重い `textlint-lsp` は保存時と、編集を止めてから10秒後に自動実行されます。編集のたびに走ることはありません。