textlintのruleプリセットtextlint-rule-preset-ja-technical-writingを掘り下げる

f:id:tanabebe:20190929180448p:plain

前回記事でtextlintで文章校正を見直しました。ただ、校正を見直すのは良いのですがインストールしたruleについて書き手がしっかりと理解することも大事だと思います。今回はtextlint-rule-preset-ja-technical-writingruleプリセットについて少しだけ掘り下げていきます。

textlint-rule-preset-ja-technical-writingに含まれているルール一覧

表でまとめてみました。

Rule Name Description
textlint-rule-sentence-length 1文の長さは100文字以下とする
textlint-rule-max-comma カンマは1文中に3つまで
textlint-rule-max-ten 読点は1文中に3つまで
textlint-rule-max-kanji-continuous-len 連続できる最大の漢字長は6文字まで
textlint-rule-preset-JTF-style 漢数字と算用数字を使い分けます
textlint-rule-no-mix-dearu-desumasu 「ですます調」、「である調」を統一します
textlint-ja/textlint-rule-ja-no-mixed-period 文末の句点記号として「。」を使います
textlint-rule-no-double-negative-ja 二重否定は使用しない
textlint-rule-no-dropping-the-ra ら抜き言葉を使用しない
textlint-rule-no-doubled-conjunctive-particle-ga 逆接の接続助詞「が」を連続して使用しない
textlint-rule-no-doubled-conjunction 同じ接続詞を連続して使用しない
textlint-rule-no-doubled-joshi 同助詞を連続して使用しない
textlint-rule-no-nfd UTF8-MAC 濁点を使用しない
https://github.com/textlint-rule/textlint-rule-no-invalid-control-character 不必要な制御文字を使用しない
textlint-rule-no-exclamation-question-mark 感嘆符!!、感嘆符??を使用しない
textlint-rule-no-hankaku-kana 半角カナを使用しない
textlint-rule-ja-no-weak-phrase 弱い日本語表現の利用を使用しない
textlint-rule-ja-no-successive-word 同一の単語を間違えて連続しているのをチェックする
textlint-rule-ja-no-abusage よくある日本語の誤用をチェックする
textlint-rule-ja-no-redundant-expression 冗長な表現をチェックする
textlint-rule-ja-unnatural-alphabet 入力ミスで発生する不自然なアルファベットをチェックする
textlint-rule-no-unmatched-pair 対になっていない括弧をチェックする

ruleを掘り下げていく

今回は以下のルールについて掘り下げてみました。

また、以降で実際に試した内容については以下リポジトリにあげてあります。 github.com

textlint-rule-preset-ja-technical-writing

このrule長過ぎる文についてチェックを行います。デフォルト値は100です。以下のとおり試してみます。

f:id:tanabebe:20190928024241p:plain

textlintのコマンドを実行すると以下の通り、エラーとなります。

~/rule-sandbox ❯❯❯ npx textlint textlint-rule-sentence-length/file.md

/Users/n_tanabe/rule-sandbox/textlint-rule-sentence-length/file.md
  11:1  error  Line 11 sentence length(101) exceeds the maximum sentence length of 100.
Over 1 characters  ja-technical-writing/sentence-length

✖ 1 problem (1 error, 0 warnings)

~/rule-sandbox ❯❯❯ 

デフォルト値に設定されている100文字を超えている文があるとチェックしてくれていますね。

設定値の変更方法

次はチェックの最大値を100文字から90文字へ変更してみます。.textlintrcファイルを以下のように修正します。

{
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": {
      "sentence-length": {
        "max": 90
      },
    }
  }
}

再度textlintのコマンドを実行します。想定だと全ての文章に対してエラーが出るはずです。

f:id:tanabebe:20190928031650p:plain

以下の通り、エラーとなり文字数に対してのチェックが適切に行われていることがわかります。

~/rule-sandbox ❯❯❯ npx textlint textlint-rule-sentence-length/file.md

/Users/n_tanabe/rule-sandbox/textlint-rule-sentence-length/file.md
   3:1  error  Line 3 sentence length(99) exceeds the maximum sentence length of 90.
Over 9 characters    ja-technical-writing/sentence-length
   7:1  error  Line 7 sentence length(100) exceeds the maximum sentence length of 90.
Over 10 characters   ja-technical-writing/sentence-length
  11:1  error  Line 11 sentence length(101) exceeds the maximum sentence length of 90.
Over 11 characters  ja-technical-writing/sentence-length

✖ 3 problems (3 errors, 0 warnings)

チェックの例外

こちらのREADMEでは以下とあり、引用もしくはリンクで書かれた文はチェック対象外となります。

Exception

  • Except BlockQuote
  • Except a single link node

こちらも試してみます。 f:id:tanabebe:20190928034231p:plain

見ての通り、引用で書かれた文とリンクについてはチェック対象外となりました。これでtextlint-rule-sentence-lengthのカスタマイズ方法チェックの例外パターンについて確認が出来ました。

textlint-rule-max-comma

このrule1文中のカンマが出現する個数についてチェックを行います。こちらをみるとデフォルト値は4とあるのですが、textlint-rule-preset-jtf-styleに含まれるtextlint-rule-max-commaデフォルト値は3です。動作を試してみます。

f:id:tanabebe:20190929100605p:plain

textlintのコマンドを実行すると以下の通り、エラーとなります。

~/rule-sandbox ❯❯❯ npx textlint textlint-rule-max-comma/file.md

/Users/n_tanabe/rule-sandbox/textlint-rule-max-comma/file.md
  5:1  error  This sentence exceeds the maximum count of comma. Maximum is 3  ja-technical-writing/max-comma

✖ 1 problem (1 error, 0 warnings)

文にカンマが何個あるかチェックが行われています。ここでは4つ以上のカンマが含まれているのでエラーとなります。

設定値の変更方法

次はカンマの最大個数を3つから4つへ変更してみます。.textlintrcファイルを以下のように修正します。

{
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": {
      "sentence-length": {
        "max": 90
      },
      "max-comma": {
        "max": 4
      },
    }
  }
}

再度実行します。 f:id:tanabebe:20190929083408p:plain

想定通り、カンマが5つ以上存在している文のチェックが行われています。これでtextlint-rule-max-commaのカスタム方法がわかりました。このruleについてもOKですね。

チェックの例外

textlint-rule-max-commaについてのチェック例外は言及されていないため、なしと考えて良いでしょう。

textlint-rule-max-ten

このrule1文に利用できるの数をチェックします。デフォルト値は3です。動作を試してみます。

f:id:tanabebe:20190929101436p:plain

textlintのコマンドを実行すると以下の通り、エラーとなります。

~/rule-sandbox ❯❯❯ npx textlint textlint-rule-max-ten/file.md

/Users/n_tanabe/rule-sandbox/textlint-rule-max-ten/file.md
  9:22  error  一つの文で""3つ以上使用しています  ja-technical-writing/max-ten

✖ 1 problem (1 error, 0 warnings)

文に読点が何個あるかチェックが行われています。ここでは読点が3つ以上存在する文がエラーとなります。

設定値の変更方法

次はチェックの最大値を3から4へ変更してみます。.textlintrcファイルを以下のように修正します。

{
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": {
      "sentence-length": {
        "max": 90
      },
      "max-comma": {
        "max": 4
      },
      "max-ten": {
        "max": 4
      },
    }
  }
}

チェックの例外

このruleについてはこちらにある通り、以下となります。

<名詞>、<名詞> のように名詞に挟まれた読点はカウントしません。 箇条書きとしての区切り文字として使われているため無視します。

試してみます。 f:id:tanabebe:20190929102434p:plain

textlintのコマンドを再度実行すると以下の通り、エラーとなります。

~/rule-sandbox ❯❯❯ npx textlint textlint-rule-max-ten/file.md

/Users/n_tanabe/rule-sandbox/textlint-rule-max-ten/file.md
  13:32  error  一つの文で""4つ以上使用しています  ja-technical-writing/max-ten

✖ 1 problem (1 error, 0 warnings)

チェックの例外時パターンについて確認が出来ました。これでtextlint-rule-max-tenについてはOKですね。

textlint-rule-max-kanji-continuous-len

このruleは1文に利用できる漢字が連続する最大文字数をチェックします。デフォルト値は6です。動作を試してみます。

f:id:tanabebe:20190929110152p:plain

textlintのコマンドを実行すると以下の通り、エラーとなります。

~/rule-sandbox ❯❯❯ npx textlint textlint-rule-max-kanji-continuous-len/file.md

/Users/n_tanabe/rule-sandbox/textlint-rule-max-kanji-continuous-len/file.md
  9:1  error  漢字が7つ以上連続しています: 倍精度浮動小数  ja-technical-writing/max-kanji-continuous-len

✖ 1 problem (1 error, 0 warnings)

エラーの通り、連続する漢字の個数のチェックが行われています。ここでは連続する漢字が7つ以上存在するとエラーとなります。

設定値の変更方法

次はチェックの最大値を6から5へ変更します。更に許可する固有名詞(チェックの例外)を登録します。 .textlintrcファイルを以下のように修正します。

{
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": {
      "sentence-length": {
        "max": 90
      },
      "max-comma": {
        "max": 4
      },
      "max-ten": {
        "max": 4
      },
      "max-kanji-continuous-len": {
        "max"  : 5,
        "allow": ["漢字百科大事典"]
      }
    }
  }
}

チェックの例外

上記にある通りallowオプションに固有名詞を記述することでチェック対象外とする事が出来ます。動作を試してみます。

f:id:tanabebe:20190929110443p:plain

textlintのコマンドを実行すると以下の通り、エラーとなります。

~/rule-sandbox ❯❯❯ npx textlint textlint-rule-max-kanji-continuous-len/file.md

/Users/n_tanabe/rule-sandbox/textlint-rule-max-kanji-continuous-len/file.md
  5:1  error  漢字が6つ以上連続しています: 一二三四五六    ja-technical-writing/max-kanji-continuous-len
  9:1  error  漢字が6つ以上連続しています: 倍精度浮動小数  ja-technical-writing/max-kanji-continuous-len

✖ 2 problems (2 errors, 0 warnings)

連続する漢字の個数が変更されているのと、allowオプションで追加した漢字百科大辞典についてはチェック対象外となっていますね。想定通りの動きです。
設定値の変更による連続する漢字の個数チェックチェックの例外時パターンについて確認が出来ました。

textlint-rule-preset-JTF-style

このrule算用数字と漢数字の使い分けをチェックします。ベースとなっているのはJTF日本語標準スタイルガイド 第3.0版です。 またtextlint-rule-preset-ja-technical-writing内で有効なrule"arabic-kanji-numbers": trueと書いてあり、2.2.2.算用数字と漢数字の使い分けがデフォルトで有効となっています。こちらも試していきましょう。

textlintのコマンドを実行すると以下の通り、エラーとなります。

f:id:tanabebe:20190929141804p:plain

~/rule-sandbox ❯❯❯ npx textlint textlint-rule-preset-JTF-style/file.md

/Users/n_tanabe/rule-sandbox/textlint-rule-preset-JTF-style/file.md
  5:1  ✓ error  第3=> 第三者
慣用的表現、熟語、概数、固有名詞、副詞など、漢数字を使用することが一般的な語句では漢数字を使います。  ja-technical-writing/arabic-kanji-numbers
  6:1  ✓ error  世界1 => 世界一
慣用的表現、熟語、概数、固有名詞、副詞など、漢数字を使用することが一般的な語句では漢数字を使います。  ja-technical-writing/arabic-kanji-numbers
  7:1  ✓ error  1部の => 一部の
慣用的表現、熟語、概数、固有名詞、副詞など、漢数字を使用することが一般的な語句では漢数字を使います。  ja-technical-writing/arabic-kanji-numbers

✖ 3 problems (3 errors, 0 warnings)3 fixable problems.

文に漢数字を使用することが一般的ではない語句のチェックしてくれています。ここでは第3者世界11部の語句が対象です。

設定値の変更方法

次はruleカタカナカタカナの長音について有効化します。.textlintrcファイルを以下のように修正します。

{
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": {
      "sentence-length": {
        "max": 90
      },
      "max-comma": {
        "max": 4
      },
      "max-ten": {
        "max": 4
      },
      "max-kanji-continuous-len": {
        "max"  : 5,
        "allow": ["漢字百科大事典"]
      }
    },
    "preset-jtf-style": {
      "2.1.5.カタカナ": true,
      "2.1.6.カタカナの長音": true
    }
  }
}

f:id:tanabebe:20190929142113p:plain

~/rule-sandbox ❯❯❯ npx textlint textlint-rule-preset-JTF-style/file.md

/Users/n_tanabe/rule-sandbox/textlint-rule-preset-JTF-style/file.md
  17:3   ✓ error  アベレイジ => アベレージ                jtf-style/2.1.5.カタカナ
  21:1   ✓ error  サーバ間通 => サーバー間通              jtf-style/2.1.6.カタカナの長音
  21:13  ✓ error  コンピュータ同士 => コンピューター同士  jtf-style/2.1.6.カタカナの長音

✖ 3 problems (3 errors, 0 warnings)
✓ 3 fixable problems.

エラーにある通り、カタカナカタカナの長音についてチェックが行われていることがわかります。

チェックの例外

textlint-rule-preset-JTF-styleに含まれているruleを除外したい場合は有効化されているrulefalseとし、無効化を行います。例えばtextlint-rule-preset-ja-technical-writing内で使用されている"2.2.2.算用数字と漢数字の使い分け"を無効化したい場合は以下のようにします。

{
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": {
      "sentence-length": {
        "max": 90
      },
      "max-comma": {
        "max": 4
      },
      "max-ten": {
        "max": 4
      },
      "max-kanji-continuous-len": {
        "max"  : 5,
        "allow": ["漢字百科大事典"]
      },
      // preset-ja-technical-writing内の中でfalseとする
      "arabic-kanji-numbers": false
    },
    "preset-jtf-style": {
      "2.1.5.カタカナ": true,
      "2.1.6.カタカナの長音": true
    }
  }
}

rule名がarabic-kanji-numbersとして宣言されているのとpreset-ja-technical-writingの中に含まれているという点において注意が必要です。これでtextlint-rule-preset-JTF-styleで対応するルールのカスタマイズも変更出来ることが確認出来ました。

textlint-rule-no-mix-dearu-desumasu

このruleですます調である調の混在をチェックします。チェックするのは見出し、本文、箇条書きを対象としてくれます。デフォルト値は以下となります。

{
    "rules": {
        "no-mix-dearu-desumasu": {
            "preferInHeader": "",
            "preferInBody": "ですます",
            "preferInList": "である",
            "strict": false
        }
    }
}

""は多く使われている表記を自動的に優先します。各値の対象は以下となります。

Param Target
preferInHeader 見出し
preferInBody 本文
preferInList 箇条書き
strict 文末以外でも厳しくチェックするかどうか

動きを試す前にtextlint-rule-preset-JTF-style本文、箇条書きに対してですます調あるいはである調を統一するためのruleがあるので.textlintrcを以下の通り修正し、無効化しています。

{
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": {
      "sentence-length": {
        "max": 90
      },
      "max-comma": {
        "max": 4
      },
      "max-ten": {
        "max": 4
      },
      "max-kanji-continuous-len": {
        "max"  : 5,
        "allow": ["漢字百科大事典"]
      },
      "arabic-kanji-numbers": false,
    },
    "preset-jtf-style": {
      "1.1.1.本文": false,
      "1.1.3.箇条書き": false,
      "2.1.5.カタカナ": true,
      "2.1.6.カタカナの長音": true
    },
  }
}

この状態で試していきましょう。

textlintのコマンドを実行すると以下の通り、エラーとなります。

f:id:tanabebe:20190929155806p:plain

~/rule-sandbox ❯❯❯ npx textlint textlint-rule-no-mix-dearu-desumasu/file.md

/Users/n_tanabe/rule-sandbox/textlint-rule-no-mix-dearu-desumasu/file.md
  3:19  error  見出し: "である"調 と "ですます"調 が混在
=> "である" がである調
Total:
である  : 1
ですます: 1
    ja-technical-writing/no-mix-dearu-desumasu
  6:15  error  本文: "である"調 と "ですます"調 が混在
=> "である。" がである調
Total:
である  : 1
ですます: 1
      ja-technical-writing/no-mix-dearu-desumasu
  8:20  error  箇条書き: "である"調 と "ですます"調 が混在
=> "です。" がですます調
Total:
である  : 1
ですます: 1
  ja-technical-writing/no-mix-dearu-desumasu

✖ 3 problems (3 errors, 0 warnings)

見出し、本文、箇条書きである調とですます調が混在していることのチェックが行われていることが確認出来ました。

設定値の変更方法

次はrule文末以外でも厳しくチェックするよう.textlintrcファイルを以下のように修正します。

{
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": {
      "sentence-length": {
        "max": 90
      },
      "max-comma": {
        "max": 4
      },
      "max-ten": {
        "max": 4
      },
      "max-kanji-continuous-len": {
        "max"  : 5,
        "allow": ["漢字百科大事典"]
      },
      "arabic-kanji-numbers": false,
      "no-mix-dearu-desumasu": {
        "preferInHeader": "",
        "preferInBody": "ですます",
        "preferInList": "である",
        "strict": true
      }
    },
    "preset-jtf-style": {
      "1.1.1.本文": false,
      "1.1.3.箇条書き": false,
      "2.1.5.カタカナ": true,
      "2.1.6.カタカナの長音": true
    },
  }
}

これで文末以外のチェックも行うので、先程よりエラーの内容が増えるはずです。では試していきます。

textlintのコマンドを実行すると以下の通り、エラーとなります。

f:id:tanabebe:20190929161156p:plain

~/rule-sandbox ❯❯❯ npx textlint textlint-rule-no-mix-dearu-desumasu/file.md

/Users/n_tanabe/rule-sandbox/textlint-rule-no-mix-dearu-desumasu/file.md
  3:19  error  見出し: "である"調 と "ですます"調 が混在
=> "である" がである調
Total:
である  : 1
ですます: 1
    ja-technical-writing/no-mix-dearu-desumasu
  6:15  error  本文: "である"調 と "ですます"調 が混在
=> "である。" がである調
Total:
である  : 1
ですます: 2
      ja-technical-writing/no-mix-dearu-desumasu
  8:20  error  箇条書き: "である"調 と "ですます"調 が混在
=> "です。" がですます調
Total:
である  : 2
ですます: 2
  ja-technical-writing/no-mix-dearu-desumasu
  9:8   error  箇条書き: "である"調 と "ですます"調 が混在
=> "ですが、" がですます調
Total:
である  : 2
ですます: 2
  ja-technical-writing/no-mix-dearu-desumasu

✖ 4 problems (4 errors, 0 warnings)

チェックが厳しくなっているので、エラーが1つ増えているのとである調ですます調の接続的な文についてのカウント数が増えているのがわかります。文章を厳密にチェックするというのであればとても有用ですね。

チェックの例外

このruleについてのチェック例外は言及されていないため、なしと考えて良いでしょう。

textlint-rule-ja-no-mixed-period

このrule文末の句点の抜けについてパラグラフを対象にチェックします。

動きを試す前にtextlint-rule-preset-JTF-styleには本文と箇条書きに対し、句読点に関する4.1.3.ピリオド(.)カンマ(,)ruleがあるので.textlintrcを以下の通り修正し、無効化しています。

{
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": {
      "sentence-length": {
        "max": 90
      },
      "max-comma": {
        "max": 4
      },
      "max-ten": {
        "max": 4
      },
      "max-kanji-continuous-len": {
        "max"  : 5,
        "allow": ["漢字百科大事典"]
      },
      "arabic-kanji-numbers": false,
      "no-mix-dearu-desumasu": {
        "preferInHeader": "",
        "preferInBody": "ですます",
        "preferInList": "である",
        "strict": true
      }
    },
    "preset-jtf-style": {
      "1.1.1.本文": false,
      "1.1.3.箇条書き": false,
      "1.2.1.句点(。)と読点(、)" :false,
      "2.1.5.カタカナ": true,
      "2.1.6.カタカナの長音": true,
      "4.1.3.ピリオド(.)、カンマ(,)": false
    },
  }
}

この状態で試していきましょう。

f:id:tanabebe:20190929164947p:plain

~/rule-sandbox ❯❯❯ npx textlint textlint-rule-ja-no-mixed-period/file.md

/Users/n_tanabe/rule-sandbox/textlint-rule-ja-no-mixed-period/file.md
  5:15  error    文末が""で終わっていません。  ja-technical-writing/ja-no-mixed-period
  7:16  ✓ error  文末が""で終わっていません。  ja-technical-writing/ja-no-mixed-period

✖ 2 problems (2 errors, 0 warnings)1 fixable problem.

文末の句点の抜けについてチェックが行われていることが確認出来ました。

設定値の変更方法

次はチェックのrule文末の句点(半角ピリオド)になるよう.textlintrcファイルを以下のように修正します。

{
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": {
      "sentence-length": {
        "max": 90
      },
      "max-comma": {
        "max": 4
      },
      "max-ten": {
        "max": 4
      },
      "max-kanji-continuous-len": {
        "max"  : 5,
        "allow": ["漢字百科大事典"]
      },
      "arabic-kanji-numbers": false,
      "no-mix-dearu-desumasu": {
        "preferInHeader": "",
        "preferInBody": "ですます",
        "preferInList": "である",
        "strict": true
      },
      "ja-no-mixed-period": {
        "periodMark": "."
      },
    },
    "preset-jtf-style": {
      "1.1.1.本文": false,
      "1.1.3.箇条書き": false,
      "1.2.1.句点(。)と読点(、)" :false,
      "2.1.5.カタカナ": true,
      "2.1.6.カタカナの長音": true,
      "4.1.3.ピリオド(.)、カンマ(,)": false
    },
  }
}

これで文末に.(半角ピリオド)が存在しないとエラーとなるはずです。では試していきます。

textlintのコマンドを実行すると以下の通り、エラーとなります。

f:id:tanabebe:20190929165009p:plain

~/rule-sandbox ❯❯❯ npx textlint textlint-rule-ja-no-mixed-period/file.md

/Users/n_tanabe/rule-sandbox/textlint-rule-ja-no-mixed-period/file.md
   5:15  error    文末が"."で終わっていません。  ja-technical-writing/ja-no-mixed-period
  12:15  ✓ error  文末が"."で終わっていません。  ja-technical-writing/ja-no-mixed-period

✖ 2 problems (2 errors, 0 warnings)1 fixable problem.

先程エラーになった7行目がエラーにならない事が確認出来ました。これで文末の句点の変更が可能となります。

チェックの例外

このruleについてのチェック例外は言及されていないため、なしと考えて良いでしょう。

まとめ

textlint-rule-preset-ja-technical-writingruleを掘り下げる事で各ruleのカスタマイズ方法が理解出来ました。私の場合textlintをインストールしたものの扱いがわからないruleなどがあったので、根気良くドキュメントを眺めたりnode_module内のプログラムを眺めたりし、理解を深めました。当記事で紹介したrule以外をインストールした場合にぶつかり合うruleが今後出てくる可能性はあるので、各ruleに慣れておくことは自分なりのruleを定義する上で非常に重要だと言えます。

参考

github.com

github.com

github.com

github.com

github.com

github.com

github.com

github.com