aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/content/docs/textlint-guide.mdx
blob: de90a1a6c9a93ab69ec280fc11fb2c0c5686c38c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
---
title: textlintではじめる日本語文章校正
description: Zedエディタ上で日本語の文章をリアルタイム校正する方法。textlintの導入からルール設定、自動修正までを解説します。
---

import { Steps, Aside } from '@astrojs/starlight/components';

## textlint とは

[textlint](https://textlint.github.io/) は日本語の自然言語テキスト向けのプラグイン可能な文章校正ツールです。ESLint のように、校正ルールを個別に追加・設定できるのが特長です。

## できること

- 誤字・脱字の検出
- 表記ゆれの指摘(「例えば」→「たとえば」)
- ら抜き言葉・い抜き言葉の検出
- 冗長な表現の指摘
- 一文の長さチェック
- です・ます調とである調の混在チェック

## セットアップ

<Steps>
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
```

3. `.textlintrc.json` を作成

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

4. `prh.yml` に独自ルールを定義(必要な場合)

```yaml
version: 1
rules:
  - expected: たとえば
    pattern: 例えば
    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+.` を押すと以下の操作が可能です。

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

## 無効化コメント

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

- 特定のルールだけ無効化: `&lt;!-- textlint-disable prh --&gt;`
- 再有効化: `&lt;!-- textlint-enable prh --&gt;`

`.mdx` ファイル(Starlight / Astro)では、JSXコメントで囲みます:

- 特定のルールだけ無効化: `{/* &lt;!-- textlint-disable prh --&gt; */}`
- 再有効化: `{/* &lt;!-- textlint-enable prh --&gt; */}`

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

### MDX ファイルで `&lt;!-- --&gt;` がエラーになる

MDX は `&lt;!-- --&gt;` を許可しません。代わりに `{/* &lt;!-- ... --&gt; */}` で囲んでください。

### 誤検出が多い

該当ルールを `.textlintrc.json` で `false` に設定するか、`prh.yml` で除外パターンを追加してください。

### lint が重い

`textlint-lsp` は保存時と、編集を止めてから 10 秒後に自動実行されます。
それでも重い場合は、`didChange` 時の lint を無効にすることも可能です。