見出し画像

[自動化]文章校正を自動化するためにtextlintを導入してみた

ドキュメントやブログなどの文章を書く際、自己チェックやレビューに悩まされたことはありませんか?

執筆者やレビュワーは人なので、どこかですり抜けてしまってもおかしくないですよね…

今回の記事では、文章校正を自動で行ってくれるtextlintについて紹介させていただきます!

【ライターの紹介】
AKIHISA
第4開発事業部に所属しているAWSがちょっと得意な開発エンジニア
 食べることと料理が好き。
お腹が気になってきたのでジムに通い始めた


textlintとは


テキストファイルの文章公正を行うためのオープンソースの静的解析ツールです

一般的にLinterはプログラムのソースコードの分析し、問題点を指摘する静的解析ツールのことです

対象が文章になったLinterということですね!

参考

textlintを使うメリットとしては次のものが挙げられます

特定のルールに沿って検出できる

「ら抜き言葉を除外したい」「である調・ですます調を統一したい」などの様々なルールがあり、組み合わせて使うことができます
ルールは提供されているものを組み合わせて使えるほか、自作のルールも追加できます

迅速にチェックできる

人力でチェックする際は、最低限一通りの文章を読む必要があるためそれなりの時間がかかります

textlintを使えば、ものの数秒でチェックできるのでチェックコストが大幅に減らせます

自動的に修正できるルールもある

ルールの中には、引っかかった文章をそのまま修正できるものがあります

全てのルールで適応できるわけではないですが、修正の手間を減らせます

環境


textlintをインストールするためには、Node.js及びnpmのインストールが必須です

もし準備できていない方は、次を参考にご準備ください

textlintの設定


インストール

textlintをインストールします

npm i textlint

お試しで使用するtextlintルールのプリセットをインストールします

npm i textlint-rule-preset-ja-technical-writing

preset-ja-technical-writingは技術文書向けのtextlintルールプリセットです

「読点は1文中に3つまで」「同じ助詞を連続で使用しない」など、20種類以上のルールがまとめられています

参考

設定

textlintにルールを設定するために、設定ファイルを作成します

参考

npx textlint --init

次のファイルが作成されます

.textlintrc.json

{
  "plugins": {},
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": true
  }
}

rulesの中にルールセットを設定します

preset-ja-technical-writingがインストール済みなので、初期化時に有効化されてますね

やってみた


準備が整いました

僕が以前書いた記事にtextlintをかけてみます(ドキドキ)

記事はMarkDownで書いているので、ファイルを指定してコマンドを実行します

$ npx textlint index.md
index.md

5:10   error    Disallow to use "!"                                                                                        ja-technical-writing/no-exclamation-question-mark
5:27   error    Disallow to use "!"                                                                                        ja-technical-writing/no-exclamation-question-mark
7:29   error    Disallow to use "?"                                                                                        ja-technical-writing/no-exclamation-question-mark
9:79   error    Disallow to use "!"                                                                                        ja-technical-writing/no-exclamation-question-mark
13:5    error    文末が"。"で終わっていません。                                                                              ja-technical-writing/ja-no-mixed-period
15:3    error    漢字が7つ以上連続しています: 開発事業部所属                                                                 ja-technical-writing/max-kanji-continuous-len

〜 中略 〜

482:39   error    Disallow to use "?"                                                                                        ja-technical-writing/no-exclamation-question-mark

✖ 72 problems (72 errors, 0 warnings)
✓ 1 fixable problem.
Try to run: $ textlint --fix [file]

ギャーーー!72件ものエラーがでてます.....

しかしよく見ると、「Disallow to use "!"」や「文末が"。"で終わっていません。」だらけです...!

テックブログなので硬い文章にはしたくなかったので、これらのルールは無視します

ルールを無視するには、エラーメッセージに書いてあるルール名を.textlintrc.jsonのfalseに設定します

エラーメッセージ

5:10   error    Disallow to use "!"  ja-technical-writing/no-exclamation-question-mark

.textlintrc.json

{
  "plugins": {},
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": {
      "ja-no-mixed-period": false,
      "no-exclamation-question-mark": false
    },
    "aws-service-name": true
  }
}

もう1回textlintにかけてみましょう!

$ npx textlint index.md

index.md
15:3    error    漢字が7つ以上連続しています: 開発事業部所属                                                                 ja-technical-writing/max-kanji-continuous-len
56:892  error    Line 56 sentence length(121) exceeds the maximum sentence length of 100.
Over 21 characters                                    ja-technical-writing/sentence-length
118:7    error    【dict5】 "構築を行う"は冗長な表現です。"構築する"など簡潔な表現にすると文章が明瞭になります。
解説: https://github.com/textlint-ja/textlint-rule-ja-no-redundant-expression#dict5              ja-technical-writing/ja-no-redundant-expression
183:54   error    一文に二回以上利用されている助詞 "に" がみつかりました。

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

- "に"
- "に"

同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。
            ja-technical-writing/no-doubled-joshi

〜 中略 〜

✖ 8 problems (8 errors, 0 warnings)
✓ 1 fixable problem.
Try to run: $ textlint --fix [file]

エラーは8件にまで減りました...!

文章の構文に関わる指摘がはいってますね

"構築を行う"は冗長な表現です。"構築する"など簡潔な表現にすると文章が明瞭になります

同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。

指摘されてハッとしちゃいました...非常に参考になります

これを自動でやっちゃうので、レビューにあてる時間がかなり短縮できそうです

自動修正をやってみる

textlintでは、警告が出ている項目を自動修正できる機能があります

参考

先ほどの実行結果を眺めると、次のメッセージが入っていることに気づきます

1 fixable problem.
Try to run: $ textlint --fix [file]

修正するコマンドを実行します

$ npx textlint --fix index.md

index.md
  476:29  ✔   【dict2】 "することができまし"は冗長な表現です。"することが"を省き簡潔な表現にすると文章が明瞭になります。
解説: https://github.com/textlint-ja/textlint-rule-ja-no-redundant-expression#dict2  ja-technical-writing/ja-no-redundant-expression

✔ Fixed 1 problem

該当している箇所を確認すると、修正されていました

- Dev Containerを使ってCDKの開発環境を構築することができました
+ Dev Containerを使ってCDKの開発環境を構築できました

いろんなルールを見てみる


「textlint-ja」をみるとtextlintの日本語に関するルールがまとまっています

参考

ルールやルールのプリセットがあるので、使いやすいものを紹介します

使い方の詳細までは説明しないので、各ルールのページのREADMEをご確認ください

textlint-rule-preset-ja-technical-writing

本記事でも紹介した、技術文書向けのルールプリセットです

やはり基本的なルールが一通り入っているので、このプリセットを基点としてカスタマイズするのがよさそうです

textlint-rule-no-synonyms

同義語の表記揺れをチェックするルールです

「サーバ」「サーバー」・「リハーサル」「リハ」など、文章中で表記が揺れている箇所を見つけられます

$ npx textlint index.md

index.md
  274:21  error  同義語である「リハーサル」と「リハ」が利用されています  @textlint-ja/no-synonyms
  277:1   error  同義語である「サーバ」と「サーバー」が利用されています  @textlint-ja/no-synonyms

✖ 2 problems (2 errors, 0 warnings)

textlint-filter-rule-comments

コメントを利用して警告を無視できるルールです

例えば、本記事で書いた次の文章は記事をtextlintに通すと警告がでてしまいます

「サーバ」「サーバー」・「リハーサル」「リハ」など、文章中で表記が揺れている箇所を見つけられます
$ npx textlint index.md

index.md
  274:21  error  同義語である「リハーサル」と「リハ」が利用されています  @textlint-ja/no-synonyms
  277:1   error  同義語である「サーバ」と「サーバー」が利用されています  @textlint-ja/no-synonyms

✖ 2 problems (2 errors, 0 warnings)

わざと書いているのですが、そのためにルールを変えたくありません

この時に、次のようにコメントで挟むと警告を出さなくなります

<!-- textlint-disable -->

「サーバ」「サーバー」・「リハーサル」「リハ」など、文章中で表記が揺れている箇所を見つけられます

<!-- textlint-enable -->

この文章だけどうしても例外にしたい...!という時に役立ちます

まとめ


textlintを使って文章校正を自動でやってみました

ルールに沿ったレビューなので、文章の内容についてはレビューは行えません

ただし人間が同様のことを行うと、「時間がかかる」「指摘が多いと集中力がもたない」「指摘漏れがある」...など懸念点が多いです

任せられるところは機械に任せてしまい、レビュワーの負担を軽減して有益な指摘ができるような環境にしたいですね!



ALHについて知る



↓ ↓ ↓ 採用サイトはこちら ↓ ↓ ↓


↓ ↓ ↓ コーポレートサイトはこちら ↓ ↓ ↓


↓ ↓ ↓ もっとALHについて知りたい? ↓ ↓ ↓