[自動化]文章校正を自動化するためにtextlintを導入してみた
ドキュメントやブログなどの文章を書く際、自己チェックやレビューに悩まされたことはありませんか?
執筆者やレビュワーは人なので、どこかですり抜けてしまってもおかしくないですよね…
今回の記事では、文章校正を自動で行ってくれるtextlintについて紹介させていただきます!
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について知りたい? ↓ ↓ ↓