文書校正ツール textlint を使ってみた話

記事タイトルとURLをコピーする

みなさん、こんにちは。AWS CLI が好きな AWSサポート課の市野です。

今日は、AWS の特定分野の話題ではなくオープンソースの文書チェックツールである textlint を使ってみた話です。

そもそも textlint とは

文章の校正や表記ゆれのチェックを行うことができるオープンソースのツールです。
句読点や助詞の重複など文章のタイプに合わせたルールが多数用意されており、独自のルールを作成することも可能となっています。

余談

せっかくなので「強化された CLI エージェントとして」2025 年 3 月 6 日 の AWS ブログで発表された Amazon Q Developer for CLI にも聞いてみました。

完全に AWS と関係ない話題でしたが知っているようですね。
しかも、技術ブログの下書きをしていたディレクトリで q chat を実施したので、カレントディレクトリ配下の内包物の考慮の跡が伺えます。

aws.amazon.com

使ってみる

インストール

前提として Node.js の動作環境は整っているものとします。

textlint のインストール

% npm install textlint

ルールのインストール

textlint のルールは自作もできますが、すでに公開されているルールやいくつかのルールを束ねたプリセットを導入可能です。 さらに、日本語文書に特化したルールを扱うコミュニティとして textlint-ja という GitHub Organization も存在しています。

今回は、該当の GitHub Organization から以下のルール(プリセット)を導入してみます。

% npm install textlint-rule-preset-japanese \
  textlint-rule-preset-ja-technical-writing

単体のルールでの校正

インストール済みのルールのうち単体のルールを利用し校正する場合は npx textlint --rule <rule名> <文書ファイル> の要領で実施可能です。
ここでは、先日私が書いた AWS マネジメントコンソールで同時に複数の AWS アカウントへログインできるようになりました の元原稿を校正してみます。
私は元々 Markdown でブログ原稿を書いているので、こういう時にツールが楽に適用できていいですね。

まずは、textlint-rule-preset-japanese のルールだけを使って校正してみます。

% npx textlint --rule textlint-rule-preset-japanese docs/blog/posts/sign-in-for-multiple-AWS-accounts.md

/Users/xxx/xxx/blog/docs/blog/posts/sign-in-for-multiple-AWS-accounts.md
  26:413   error  Line 26 sentence length(126) exceeds the maximum sentence length of 100.
Over 26 characters                      japanese/sentence-length
  30:548   error  Line 30 sentence length(134) exceeds the maximum sentence length of 100.
Over 34 characters                      japanese/sentence-length
  32:57    error  一文に二回以上利用されている助詞 "が" がみつかりました。

次の助詞が連続しているため、文を読みにくくしています。

- "が"
- "が"

同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。
  japanese/no-doubled-joshi
  34:932   error  Line 34 sentence length(152) exceeds the maximum sentence length of 100.
Over 52 characters                      japanese/sentence-length
  36:1235  error  Line 36 sentence length(126) exceeds the maximum sentence length of 100.
Over 26 characters                      japanese/sentence-length
  44:2135  error  Line 44 sentence length(164) exceeds the maximum sentence length of 100.
Over 64 characters                      japanese/sentence-length
  51:2521  error  Line 51 sentence length(136) exceeds the maximum sentence length of 100.
Over 36 characters                      japanese/sentence-length
  59:46    error  一文に二回以上利用されている助詞 "でも" がみつかりました。

次の助詞が連続しているため、文を読みにくくしています。

- "でも"
- "でも"

同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。
  japanese/no-doubled-joshi
  61:3080  error  Line 61 sentence length(106) exceeds the maximum sentence length of 100.
Over 6 characters                      japanese/sentence-length
  67:3337  error  Line 67 sentence length(187) exceeds the maximum sentence length of 100.
Over 87 characters                      japanese/sentence-length
  69:3524  error  Line 69 sentence length(138) exceeds the maximum sentence length of 100.
Over 38 characters                      japanese/sentence-length
  71:3764  error  Line 71 sentence length(112) exceeds the maximum sentence length of 100.
Over 12 characters                      japanese/sentence-length
  71:3978  error  Line 71 sentence length(118) exceeds the maximum sentence length of 100.
Over 18 characters                      japanese/sentence-length
  81:4380  error  Line 81 sentence length(215) exceeds the maximum sentence length of 100.
Over 115 characters                      japanese/sentence-length
  94:5064  error  Line 94 sentence length(126) exceeds the maximum sentence length of 100.
Over 26 characters                      japanese/sentence-length

✖ 15 problems (15 errors, 0 warnings)

なんだかんだと 15 ヶ所指摘されました。

複数ルールでの総合的な校正

textlint 本体の Usage を確認すると npx textlint --init コマンドでインストールされているルールから .textlintrc.json を作成されると解説があります。

github.com

.textlintrc.json の作成と確認
% npx textlint --init
.textlintrc.json is created.

% cat .textlintrc.json
{
  "plugins": {},
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": true,
    "preset-japanese": true
  }
}

上記の cat の結果の通り、インストールしたルールから .textlintrc.json が作成されました。
.textlintrc.json がカレントディレクトリに存在している場合 --rule オプションの有無に関わらず、.textlintrc.jsontrue となっているルールに基づいた校正をします。

% npx textlint docs/blog/posts/sign-in-for-multiple-AWS-accounts.md

/Users/xxx/xxx/blog/docs/blog/posts/sign-in-for-multiple-AWS-accounts.md
  13:42    error  弱い表現: "思います" が使われています。                                                             ja-technical-writing/ja-no-weak-phrase
  26:413   error  Line 26 sentence length(126) exceeds the maximum sentence length of 100.
Over 26 characters                            ja-technical-writing/sentence-length
  30:135   error  箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である  : 0
ですます: 20
                        ja-technical-writing/no-mix-dearu-desumasu
  30:548   error  Line 30 sentence length(134) exceeds the maximum sentence length of 100.
Over 34 characters                            ja-technical-writing/sentence-length
  32:57    error  一文に二回以上利用されている助詞 "が" がみつかりました。

次の助詞が連続しているため、文を読みにくくしています。

- "が"
- "が"

同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。
        ja-technical-writing/no-doubled-joshi
  32:62    error  箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である  : 0
ですます: 20
                        ja-technical-writing/no-mix-dearu-desumasu
  34:155   error  箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である  : 0
ですます: 20
                        ja-technical-writing/no-mix-dearu-desumasu
  34:932   error  Line 34 sentence length(152) exceeds the maximum sentence length of 100.
Over 52 characters                            ja-technical-writing/sentence-length
  35:53    error  箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である  : 0
ですます: 20
                        ja-technical-writing/no-mix-dearu-desumasu
  36:127   error  箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である  : 0
ですます: 20
                        ja-technical-writing/no-mix-dearu-desumasu
  36:1235  error  Line 36 sentence length(126) exceeds the maximum sentence length of 100.
Over 26 characters                            ja-technical-writing/sentence-length
  37:63    error  箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である  : 0
ですます: 20
                        ja-technical-writing/no-mix-dearu-desumasu
  38:126   error  箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である  : 0
ですます: 20
                        ja-technical-writing/no-mix-dearu-desumasu
  39:70    error  箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である  : 0
ですます: 20
                        ja-technical-writing/no-mix-dearu-desumasu
  40:111   error  箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である  : 0
ですます: 20
                        ja-technical-writing/no-mix-dearu-desumasu
  42:74    error  箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である  : 0
ですます: 20
                        ja-technical-writing/no-mix-dearu-desumasu
  43:30    error  【dict5】 "ロールを行う"は冗長な表現です。"ロールする"など簡潔な表現にすると文章が明瞭になります。
解説: https://github.com/textlint-ja/textlint-rule-ja-no-redundant-expression#dict5  ja-technical-writing/ja-no-redundant-expression
  43:121   error  箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である  : 0
ですます: 20
                        ja-technical-writing/no-mix-dearu-desumasu
  44:165   error  箇条書き: "である"調 でなければなりません
=> "である"調 であるべき箇所に、次の "ですます"調 の箇所があります: "ます。"
Total:
である  : 0
ですます: 20
                        ja-technical-writing/no-mix-dearu-desumasu
  44:2135  error  Line 44 sentence length(164) exceeds the maximum sentence length of 100.
Over 64 characters                            ja-technical-writing/sentence-length
  51:2521  error  Line 51 sentence length(136) exceeds the maximum sentence length of 100.
Over 36 characters                            ja-technical-writing/sentence-length
  59:46    error  一文に二回以上利用されている助詞 "でも" がみつかりました。

次の助詞が連続しているため、文を読みにくくしています。

- "でも"
- "でも"

同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。
        ja-technical-writing/no-doubled-joshi
  61:3080  error  Line 61 sentence length(106) exceeds the maximum sentence length of 100.
Over 6 characters                            ja-technical-writing/sentence-length
  67:3337  error  Line 67 sentence length(187) exceeds the maximum sentence length of 100.
Over 87 characters                            ja-technical-writing/sentence-length
  69:233   error  弱い表現: "かも" が使われています。                                                                 ja-technical-writing/ja-no-weak-phrase
  69:3524  error  Line 69 sentence length(138) exceeds the maximum sentence length of 100.
Over 38 characters                            ja-technical-writing/sentence-length
  71:3764  error  Line 71 sentence length(112) exceeds the maximum sentence length of 100.
Over 12 characters                            ja-technical-writing/sentence-length
  71:3978  error  Line 71 sentence length(118) exceeds the maximum sentence length of 100.
Over 18 characters                            ja-technical-writing/sentence-length
  75:10    error  Disallow to use "?"                                                                                ja-technical-writing/no-exclamation-question-mark
  81:4380  error  Line 81 sentence length(215) exceeds the maximum sentence length of 100.
Over 115 characters                            ja-technical-writing/sentence-length
  94:5064  error  Line 94 sentence length(126) exceeds the maximum sentence length of 100.
Over 26 characters                            ja-technical-writing/sentence-length

✖ 31 problems (31 errors, 0 warnings)

textlint-rule-preset-japanese だけの校正にはなかった、以下のような指摘が加わりました。

13:42 error 弱い表現: "思います" が使われています。
30:135 error 箇条書き: "である"調 でなければなりません
43:30 error 【dict5】 "ロールを行う"は冗長な表現です。"ロールする"など簡潔な表現にすると文章が明瞭になります。

結果の末尾にある ja-technical-writing/ja-no-weak-phrase などの記述から、どのルールで判定されたものかが判別できます。
プリセットに含まれる場合はどのプリセットに入っているかも判別可能です。

結果として、技術文書として弱い表現となる "思います" の使用や、箇条書きで "である"調 が使われていない点の指摘が加わっています。

また、助詞の繰り返しや、一行の長さも判定してくれますし、今回はありませんでしたが文中に「、」が 4 つ以上出現した場合にも注意が促されます。
そのような場合は 2 文に分けるなどの文書構成の再検討が望ましいと考えられます。

おまけ

今回検証から外しましたが、VS Code のエクステンション vscode-textlint を利用することで、VS Code での記述中に自動での校正も可能です。

npx コマンドでの確認の場合、文書を作成・保存してから適宜コマンドを実行して判定する必要がありますが、VS Code エクステンションでの場合は書きながら判定してもらうことが可能です。
技術文書を書く頻度が高い方は導入を検討してみても良いかもしれません。

marketplace.visualstudio.com

おわりに

私自身がテクニカルサポートという職種に従事していることもあり、なるべくわかりやすい文章を書こうと心がけてはいました。

ただ、ちょっと一行が長くなりすぎかななど、書きながら感覚で調整していた部分もあり、先日書いたブログでも 31 箇所の指摘があることに少々びっくりしました。
そのため、これまでにご案内をしてきた問い合わせチケットでも、冗長な書き方や意図が伝わりにくい表現をしていたかもしれないと反省しています。

文面の内容の正確さは自身で担保しつつ、より読みやすく誤解の少ない文章の組み立てに、このようなツールの利用は有用だと感じました。

この記事が、何らかの技術文書や日本語文書を書く方のお役に立てば幸いです。

ではまた。

市野 和明 (記事一覧)

マネージドサービス部・テクニカルサポート課

お客様から寄せられたご質問や技術検証を通じて得られた気づきを投稿していきます。

情シスだった前職までの経験で、UI がコロコロ変わる AWS においては GUI で手順を残していると画面構成が変わってしまって後々まごつくことが多かった経験から、極力変わりにくい AWS CLI での記事が多めです。

X(Twitter):@kazzpapa3(AWS Community Builder)