diff options
| author | Yasutake Yohei <yohei@yasutakeyohei.com> | 2026-06-30 23:19:34 +0900 |
|---|---|---|
| committer | Yasutake Yohei <yohei@yasutakeyohei.com> | 2026-06-30 23:19:34 +0900 |
| commit | a95bea6568520f0def40e7cc5f8740207e8f5a27 (patch) | |
| tree | ba88ef513f1ad13bc183cb77832d213ef5528e0d | |
| parent | 10fb18a394684d0e14f9705e9f21432eeefb29c7 (diff) | |
Add textlint guide page with sidebar link
| -rw-r--r-- | astro.config.mjs | 4 | ||||
| -rw-r--r-- | src/content/docs/textlint-guide.mdx | 113 |
2 files changed, 51 insertions, 66 deletions
diff --git a/astro.config.mjs b/astro.config.mjs index 4d5e8e7..6940396 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -152,6 +152,10 @@ export default defineConfig({ label: "Whisperで文字起こしする方法", link: "/whisper-to-ai-moji-okoshi/", }, + { + label: "textlintではじめる日本語文章校正", + link: "/textlint-guide/", + }, { label: "コンタクト", link: "/contact/" }, ], customCss: ["./src/styles/custom.css"], diff --git a/src/content/docs/textlint-guide.mdx b/src/content/docs/textlint-guide.mdx index de90a1a..f2813e1 100644 --- a/src/content/docs/textlint-guide.mdx +++ b/src/content/docs/textlint-guide.mdx @@ -1,53 +1,58 @@ --- -title: textlintではじめる日本語文章校正 -description: Zedエディタ上で日本語の文章をリアルタイム校正する方法。textlintの導入からルール設定、自動修正までを解説します。 +title: textlintではじめる日本語文章校正 — Zedでも動くLSPサーバーを作りました +description: 日本語の文章をリアルタイムで校正するtextlintを、Zedエディタで使えるようにするLSPサーバーを自作しました。導入方法からルール設定、自動修正、無効化までを解説します。 --- -import { Steps, Aside } from '@astrojs/starlight/components'; +## textlintと出会うまで -## textlint とは +議員として議会質問やブログ記事を書く中で、日本語の表記ゆれや誤字脱字に悩まされてきました。「例えば」を「たとえば」と書くべきか、「こども」か「子ども」か——校正のたびに手で直すのは限界があります。 -[textlint](https://textlint.github.io/) は日本語の自然言語テキスト向けのプラグイン可能な文章校正ツールです。ESLint のように、校正ルールを個別に追加・設定できるのが特長です。 +そんなとき見つけたのが [textlint](https://textlint.github.io/) です。ESLintのように校正ルールを自由に組み合わせられる、プラグイン可能な日本語文章校正ツールです。 + +しかし、愛用している [Zed](https://zed.dev/) エディタにはtextlintの拡張機能がありませんでした。VSCode用はあるのに。 + +**なければ作ろう。** そうして生まれたのが、Zedでtextlintを動かすLSPサーバー `textlint-lsp` と、そのZed拡張機能です。 + +## 2つのプログラム + +| 名前 | 役割 | 公開 | +|---|---|---| +| `textlint-lsp` | LSPサーバー本体。Node.jsで動作。Zed以外のエディタでも使える | npm(準備中) | +| `zed-textlint` | Zed拡張機能。Zed上で `textlint-lsp` を起動する | 開発中 | + +LSPサーバーは汎用なので、VSCodeやNeovimなど他のエディタでも動きます。 ## できること -- 誤字・脱字の検出 -- 表記ゆれの指摘(「例えば」→「たとえば」) -- ら抜き言葉・い抜き言葉の検出 -- 冗長な表現の指摘 -- 一文の長さチェック -- です・ます調とである調の混在チェック +- 保存時に自動校正(編集を止めて10秒後にも自動実行) +- 波線で問題箇所を表示 +- 修正候補の適用(`Ctrl+.`) +- ルール単位の無効化 +- `prh.yml` による独自の表記ルール定義 ## セットアップ -<Steps> -1. Node.js 18 以上をインストール -2. `textlint` とルールをプロジェクトにインストール +1. Node.js 18以上をインストール +2. プロジェクトにtextlintとルールを追加 ```bash npm install --save-dev textlint @textlint/markdown -npm install --save-dev @textlint-ja/no-synonyms ja-no-abusage ja-no-redundant-expression prh +npm install --save-dev @textlint-ja/no-synonyms prh ``` 3. `.textlintrc.json` を作成 ```json { - "plugins": { - "@textlint/markdown": true - }, + "plugins": { "@textlint/markdown": true }, "rules": { "@textlint-ja/no-synonyms": true, - "ja-no-abusage": true, - "ja-no-redundant-expression": true, - "prh": { - "rulePaths": ["prh.yml"] - } + "prh": { "rulePaths": ["prh.yml"] } } } ``` -4. `prh.yml` に独自ルールを定義(必要な場合) +4. `prh.yml` に独自ルールを定義 ```yaml version: 1 @@ -57,63 +62,39 @@ rules: prh: 漢字で書かず、ひらがなで書くと読みやすくなります ``` -</Steps> - -## エディタ連携 - -### Zed - -本サイトでは、Zed 用のカスタム LSP サーバー `textlint-lsp` を開発しています。 -保存時に自動でlintが走り、波線で問題箇所を表示します。 - -<Aside type="note"> -現在 `textlint-lsp` は開発中のため、npm では未公開です。 -公開準備が整い次第、`npm install -g textlint-lsp` で導入可能になる予定です。 -</Aside> - -### VSCode - -[textlint.vscode-textlint](https://marketplace.visualstudio.com/items?itemName=taichi.vscode-textlint) 拡張機能が利用できます。 - -### CLI - -```bash -npx textlint "**/*.md" -``` - ## コードアクション(自動修正) -Zed 上では、波線の上で `Ctrl+.` を押すと以下の操作が可能です。 +波線の上で `Ctrl+.` を押すと、以下の操作が選べます。 | アクション | 内容 | |---|---| -| 修正を適用 | textlint の自動修正候補を適用 | -| 無効化:(ルール名) | 指定したルールをその行だけ無効化 | +| 修正を適用 | textlintの自動修正候補を適用 | +| 無効化:(ルール名) | その行だけ指定ルールを無効化 | | 無効化: すべてのルール | その行以降の全ルールを無効化 | ## 無効化コメント -`.md` ファイルでは、HTMLコメント形式で記述します: - -- 特定のルールだけ無効化: `<!-- textlint-disable prh -->` -- 再有効化: `<!-- textlint-enable prh -->` +`.md` ファイルではHTMLコメント形式で記述します。 -`.mdx` ファイル(Starlight / Astro)では、JSXコメントで囲みます: +- `<!-- textlint-disable prh -->` で無効化 +- `<!-- textlint-enable prh -->` で再有効化 -- 特定のルールだけ無効化: `{/* <!-- textlint-disable prh --> */}` -- 再有効化: `{/* <!-- textlint-enable prh --> */}` +`.mdx` ファイル(Starlight / Astro)では、MDXの構文制約のため、`{/* */}` で囲みます。 -## トラブルシューティング +- `{/* <!-- textlint-disable prh --> */}` で無効化 +- `{/* <!-- textlint-enable prh --> */}` で再有効化 -### MDX ファイルで `<!-- -->` がエラーになる +:::note +##### 📝 MDXでの注意点 +Zedのコードアクションから自動挿入されるので、普段は手動で書く必要はありません。 +::: -MDX は `<!-- -->` を許可しません。代わりに `{/* <!-- ... --> */}` で囲んでください。 +## トラブルシューティング -### 誤検出が多い +### MDXファイルで `{ }` がエラーになる -該当ルールを `.textlintrc.json` で `false` に設定するか、`prh.yml` で除外パターンを追加してください。 +このPCではMermaid図の `{{ }}` がMDXパーサーにJSX式と誤認されることがあります。`{{` を `(` に置き換えてください。 -### lint が重い +### lintが重い -`textlint-lsp` は保存時と、編集を止めてから 10 秒後に自動実行されます。 -それでも重い場合は、`didChange` 時の lint を無効にすることも可能です。 +`textlint-lsp` は保存時と、編集を止めてから10秒後に自動実行されます。編集のたびに走ることはありません。 |
