vscodeでtextlintの使い方/表記揺れ/日本語ルール/prh

プログラミング学習

textlintの使い方の覚書です。

vscodeでtextlintの使い方

本体のインストール

nodeとnpmが必要です。Javascriptの開発環境が入っている人は元から入っているでしょう。

確認しましょう。入っていなかったらインストールが必要です。

node -v
npm -v

次に、textlintをインストールします。

npm install textlint --save-dev

save-dev?グローバル?

グローバルでインストールする方法もありますが、公式サイトには

Node.jsのpackage.jsonがあるプロジェクトなら–save-devとかでインストールして使うと良いと思います。(できればこちらをオススメします)

https://efcl.info/2015/09/10/introduce-textlint/

と書かれています。とりあえず、save-devの環境にインストールしています。

必要に応じてglobalでインストールしてもいいかもしれません。注意事項は以下。

実行してみましょう。npmの場合はnpxです。

npx textlint 1-00.md
== No rules found, textlint hasn’t done anything ==

Possible reasons:
* Your textlint config file has no rules.
* You have no config file and you aren’t passing rules via command line.
* Your textlint config has a syntax error.

=> How to set up rules?
textlint/configuring.md at master · textlint/textlint
The pluggable natural language linter for text and markdown. - textlint/configuring.md at master · textlint/textlint

ルールを設定していないと使えないようです。

スポンサーリンク

textlintのルール

ルールのインストール

textlintの開発者さんがルールもあわせて公開しているため、こちらのルールを利用します。

npm install textlint-rule-preset-ja-technical-writing --save-dev

textlint-rule-preset-ja-technical-writing

他のルール

textlintには他にもいろいろとルールがあります。この方はvscode+textlintみたいで結構、カスタマイズしていますね。boothでreactの本をいっぱい出版している方ですね。

他のルールのまとめです。

個人的に、「たりたり」を採用しました。

小説用もあります。

textlintとテキスト校正くんの違い

vscodeの拡張にテキスト校正くんがあります。

textlintとの違いが気になり、少し調べてみまいsた。

テキスト校正くんはそもそもtextlintを使っているようです。だから、細かいルールを設定したいのならtextlintを使うべきですかね。テキスト校正くんはルールを自分で設定するのが面倒な人向けですね。

スポンサーリンク

.textlintrcの作成(.textlintrc.jsの作り方)

(追記)現在はコメントがかける.textlintrc.jsに拡張子を変えて使っています。module.exportsをつける必要があるため注意しましょう。

module.exports = {
  "filters": {},
  "rules": {}
}`

次に設定ファイルを作成します。

ls
cd 校正したい文章が入っているmdファイルがある場所に移動

初期化して設定ファイルを作成。

npx textlint --init
.textlintrc is created.

.textlintrcが生成されます。拡張子はとくにありませんが、問題ありません。

なお、.textlintrc.jsonとしてもよさそうです。

{
  "filters": {},
  "rules": {}
}`

インストールされたルールを設定します。”preset-ja-technical-writing”: trueという一行を追加するとルールが有効化されます。あらかじめインストールしておけば勝手に記述されるようになったようです。

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

mdファイルに「今日は今日は雨です。。」みたいな下手な日本語を書ききます。

textlintのエラーチェック方法

次のコマンドをうつと、今度はエラーが表示されます。

npx textlint 1-00.md

こちらのコマンドでも同じ結果が得られます。

./node_modules/.bin/textlint 1-00.md

修正する場合は次のコマンドです。

npx textlint --fix 1-00.md

またはVS Codeを再起動しても起動時にチェックしてくれるようでエラーが表示されます

文章量が長いとtextlint反映までに少し時間がかかることがあります。ターミナルのProgramsにエラーがでます。

フォルダ一括でmdをチェックする

*を使うだけ。

npx textlint folder/*.md

複数のフォルダなら複数指定します。最終チェックに便利です。

npx textlint folder/*.md folder2/*.md
npx textlint folder/*.md folder/child/*.md

textlintでチェックするスクリプトを追加する(複数のmdをチェック)

今は上記のフォルダごとの方法が多いです。

複数のmdファイルを一括で修正する場合はpackage.jsonに次の記述を追加します。

  "scripts": {
    "lint": "textlint '*.md'",
    "fix": "textlint '*.md' --fix"
  },

フォンダの掘る場合は調整してください。

  "scripts": {
    "lint": "textlint 'ebooks/**/*.md'",
    "fix": "textlint 'ebooks/**/*.md' --fix"
  },

チェックだけする場合は次のとおりです。全ファイルチェックします。

npm run lint

修正する場合は次のとおりです。

npm run fix

textlint-rule-preset-ja-technical-writingの一部のルールを無効化する

{
  "rules": {
    "preset-ja-technical-writing": true,
    "ja-technical-writing/ja-no-mixed-period": false,
    "ja-technical-writing/no-exclamation-question-mark": false,
  }
}

ルールの中に自分のルールとあわないものがあるでしょう。そのような場合は一部無効化できます。

一文に二回以上利用されている助詞 “が” がみつかりました。 (ja-technical-writing/no-doubled-joshi)がうざい。。。

一部ルールを無効化したい場合もあるでしょう。”ja-technical-writing/ja-no-mixed-period”は文末に。をつけるルールですが無効化しました。電子書籍の奥付(著者情報)は。をつけないからです。

普段は有効化しておいた方がいいでしょう。最後にエラーが残ると気持ちが悪いため、時々無効化しています。

ただの趣味の問題ですが、!と?は漫画のようなゆるい表現が好きなため外しています。ブログ用ならビックリマークやクエッッションマークは有効にしてもよいでしょう。

"ja-technical-writing/ja-no-successive-word": false

上記のルールは、あるあるや英英辞典などもエラーがでます。連続しているため。

falseにしましたが、うっかり「またまた」とか書いてしまうかもしれません。最後に有効化して確認することにします。

スポンサーリンク

表記揺れの自動修正(textlint-rule-prh)

vscode→ VS Code のような表記の統一をするために、表記揺れの自動修正するものがあります。

textlint-rule-prh、textlint-rule-proofdictなど、調べたらいろいろとでてきましたけど、textlint-rule-prhが圧倒的にダウンロード数と情報量が多かったです。こちらを使いました。

なお、うっかりと入れてしまいましたが、textlint-rule-spellcheck-tech-wordは移転しているようでいりませんでした。

いずれもazuさんが開発者のようです。

npm install textlint-rule-prh --save-dev

ルール(techbooster.ymlやWEB+DB_PRESS.yml)

例によってルールは自分でも作れるようです。けれど技術書はさほど変わらないでしょうと、ありものを使います。楽させてもらいます。

techbooster.yml
WEB+DB_PRESS.yml

が.textlintrcに追記すればOKです。ルールの中に書きます。

  "rules": {
    "preset-ja-technical-writing": true,
    "ja-technical-writing/ja-no-mixed-period": false,
    "ja-technical-writing/no-exclamation-question-mark": false,
    "prh": {
      "rulePaths": [
        "node_modules/prh/prh-rules/media/WEB+DB_PRESS.yml",
        "node_modules/prh/prh-rules/media/techbooster.yml"
      ]
    }
  }

修正箇所が多いと若干表示に時間がかかるようですが、無事表示されるようになりました。

複数のルールは無限ループにハマる!?(WEB+DB_PRESS.ymlとtechbooster.ymlのコンフリクト!?)

WEB+DB_PRESS.ymlとtechbooster.ymlのルールって両方を使うと一部、対立しているんですよね。

だから修正後、再度修正するとまた元に戻るという無限ループにハマったことがありました。片方が修正されると別のルールにひっかかって再度修正されてしまうようです。

たとえば、

# - expected: ユーザー$1
#   pattern:  /ユーザ([^ー])/
  - expected: ユーザビリティ
    pattern:  /ユーザービリティ/

他にもありましたが、WEB+DB_PRESS.ymlを直下きして対応しました。正規表現が使えるようですが、手っ取り早くバッティングしているところをコメントアウトする方法もあります。

また、WEB+DB_PRESS.ymlとtechbooster.ymlのルールもバッティングしているようです。

漢字よりひらがながいいよ。ひらがなより漢字がいいよ…の無限ルールにはまりました。

個人的には優しいひらがな派なので、ひらがな優先したいですね。漢字が多めのtechbooster.ymlをコメントアウト。

#   - expected: 他の
#     pattern:  ほかの
#     prh: ひらがなで書かず、漢字で書くと読みやすくなります
# - expected: 分かる
#   pattern:  わかる
#    prh: ひらがなで書かず、漢字で書くと読みやすくなります
  #- pattern: /わかれ([^ば])/
  #  expected: 分かれ$1
  #- pattern: /わけ([らるれろてよ、])/
  #  expected: 分け$1

ほんの一部、漢字を優先させたところもあります。

 # - expected: もっとも
 #   pattern:  最も
 #   prh: ひらがなで書かず、漢字で書くと読みやすくなります

どちらかというと、

node_modules/prh/prh-rules/media/WEB+DB_PRESS.yml

を優先して使っています。

ルールがバッティングしたときは個別対応で上書きしたらうまくいきますかね。

prh.ymlの独自ファイル修正

独自のルール修正ファイルを作る場合は、prh.ymlというファイルを作成します。

version: 1

rules:
  - expected: CodePen
    pattern:
    - Codepen
    - codepen

CodePenという文字を修正する設定です。

そののちに、.textlintrcにprh.ymlを追加します。

  "rules": {
    "preset-ja-technical-writing": true,
    "ja-technical-writing/ja-no-mixed-period": false,
    "ja-technical-writing/no-exclamation-question-mark": false,
    "prh": {
      "rulePaths": [
        "./prh.yml"
      ]
    }
  }

prh.ymlの指定がおかしい場合、ターミナルにエラーがでます。大抵、パス間違えなどの凡ミスですかね。ただ、タブのoutputにでるため、注意ください。

公式リファレンスはこちらのようです。

prh/prh.yml at master · prh/prh
proofreading helper. Contribute to prh/prh development by creating an account on GitHub.

表記修正の悩みどころ

一部注意した方がよいものもあります。

いい => よい textlint

通常、よいに修正する気がします。けどSNSの「いいね」が「よいね」になってしまう。それ以外にも「お使いいただけます」が「お使よいただけます」に😓

ひとまずこれで様子見。

#  - pattern: いい
#    expected: よい
  - pattern: /いい([で])/
    expected: よい$1
アプリ => アプリケーション

アプリはもう一般的によく使うため、アプリでもいい気がします。

スポンサーリンク

textlintの対応拡張子

nuxt(vue)の.vueの拡張子もチェックできるのかなと少し気になってぐぐりましたが、そんな記事はぜんぜんでてきませんでした。5分調査したところわかったのはこのぐらい。対応拡張子決まっていますね。

少しだからmdでチェックしてvueに流し込むかな!??😑

excel(csv)でtextlint

excel(csv)もmdに変換するのは簡単なので1回mdに変換して校正すればよさそうです。

VsCodeの場合、MarkdownTableMakerは現在使えませんが、Excel to Markdown tableがあります。

相互に変換できるオンラインツールもありました。

vue/javascriptでtextlint

vue内で書かれた日本語をチェックしたかったのですけど、ちょっとだけだったのでmdファイルにコピペしました。企画(ドキュメント)用の別リポジトリを用意しました。ソースコードをコピペしたため、いろいろとひっかかったため下記のルールを追加したら、日本語のエラーだけになりました。

"rules": {
  "ja-technical-writing/max-comma": false,  // カンマの数は指定なし
  "ja-technical-writing/sentence-length": false, //100文字数制限の無効化
  "ja-technical-writing/no-unmatched-pair": false
}

htmlでtextlint(プラグインあり)

htmlはプラグインがでています。

npm install textlint-plugin-html --save-dev
{
    "plugins": [
        "html"
    ]
}

.htmlファイルをチェックします。

vueのtemplateもこの方法でチェックできました。なお、textlint-plugin-vueやtextlint-plugin-javascriptみたいなプラグインは見当たりませんでした。

textlintのエラー

No rules found, textlint hasn’t done anything

No rules found, textlint hasn’t done anything

,の忘れかもしれません。ハイライトがないため、うっかりミスです、たぶん。。

もしくはルールがない階層で実行しています。

Error while loading rule ‘prh’: ENOENT: no such file or directory

Error while loading rule 'prh': ENOENT: no such file or directory, open '/Users/name/rules.yml'

1、独自のファイルがない場合はエラーが発生しました。

コマンド+クリックすると、CreateFileできるようです。再起動でエラーが消えました。。自分で作る場合、rules.ymlにルールを記述していくようですが、このファイルは必要のようです。

2、うっかり、.textlintrcとnode_modulesが同じ階層になくエラーが発生したこともあります。

いずれにせよファイルがないという凡ミスですね。

Message: Request initialize failed with message: Failed to resolve module: textlint

Message: Request initialize failed with message: Failed to resolve module: textlint

textlintにパスを通っていないためVsCodeを再起動します。

textlinはすごい!

電子書籍元年以降ePUBなどのフォーマッチが出現しましたが、個人的にイマイチな気がしました。しかし電子書籍の革命はこの執筆環境textlintなのでは、という感じぐらいいけています。校正者がいなくてもかなり品質があがる気がします。

ありがとうございます。

公式サイト

コメント

タイトルとURLをコピーしました