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でインストールしてもいいかもしれません。注意事項は以下。
textlint本体とルールが別の所にインストールされているのかもしれないですね。
— azu (@azu_re) May 4, 2017
npm install –global(-g)でインストールした場合はルールも-gでインストールしないと、違う場所にインストールされます。
(グローバルで textlintコマンドを入れる場合)
実行してみましょう。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/textlintThe 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-ja/textlint-rule-preset-ja-technical-writing: 技術文書向けのtextlintルールプリセッ…” https://t.co/x4BNKjtY1R
— azu (@azu_re) July 10, 2016
textlint-rule-preset-ja-technical-writing は技術書向けなので、結構strictな感じ。
— azu (@azu_re) November 27, 2017
。つける必要があるとか、感嘆符を使わないとか、ブログには向いてないルールがいくつか入ってる。
他のルール
textlintには他にもいろいろとルールがあります。この方はvscode+textlintみたいで結構、カスタマイズしていますね。boothでreactの本をいっぱい出版している方ですね。
textlint 各種フィルター、ルールセットを入れて『りあクト!』調文章に合わせてカスタマイズ、動くようにした!
— 大岡由佳『りあクト! 第3.1版』BOOTHにて/紙本も販売中 (@oukayuka) January 15, 2020
rule-preset-ja-technical-writing
rule-general-novel-style-ja
rule-preset-jtf-style
rule-preset-ja-spacing
rule-spacing
rule-prh
filter-rule-comments
filter-rule-whitelist
他のルールのまとめです。
個人的に、「たりたり」を採用しました。
小説用もあります。
textlintとテキスト校正くんの違い
vscodeの拡張にテキスト校正くんがあります。
textlintとの違いが気になり、少し調べてみまいsた。
テキスト校正くんはそもそもtextlintを使っているようです。だから、細かいルールを設定したいのならtextlintを使うべきですかね。テキスト校正くんはルールを自分で設定するのが面倒な人向けですね。
.textlintrcの作成(.textlintrc.jsの作り方)
(追記)現在はコメントがかける.textlintrc.jsに拡張子を変えて使っています。
次に設定ファイルを作成します。
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”は文末に。をつけるルールですが無効化しました。電子書籍の奥付(著者情報)は。をつけないからです。
普段は有効化しておいた方がいいでしょう。最後にエラーが残ると気持ちが悪いため、時々無効化しています。
ただの趣味の問題ですが、!と?は漫画のようなゆるい表現が好きなため外しています。ブログ用ならビックリマークやクエッッションマークは有効にしてもよいでしょう。
表記揺れの自動修正(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: ひらがなで書かず、漢字で書くと読みやすくなります
ほんの一部、漢字を優先させたところもあります。
# - 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にでるため、注意ください。
公式リファレンスはこちらのようです。
表記修正の悩みどころ
一部注意した方がよいものもあります。
いい => よい textlint
通常、よいに修正する気がします。けどSNSの「いいね」が「よいね」になってしまう。それ以外にも「お使いいただけます」が「お使よいただけます」に😓
アプリ => アプリケーション
アプリはもう一般的によく使うため、アプリでもいい気がします。
textlintの対応拡張子
nuxt(vue)の.vueの拡張子もチェックできるのかなと少し気になってぐぐりましたが、そんな記事はぜんぜんでてきませんでした。5分調査したところわかったのはこのぐらい。対応拡張子決まっていますね。
少しだからmdでチェックしてvueに流し込むかな!??😑
TextLint拡張が対応していなかったhttps://t.co/uSYFsn75Uj
— ししかわ/Shinya Ishikawa (@meganetaaan) November 14, 2019
プラグインでLint可能な拡張子を増やしているときは対応してほしいな〜
textlintを試してみてるんだけど、どうもファイル拡張子を見てるらしく、デフォルトだとtxtとかmdって拡張子じゃないとチェックしてくれないっぽい雰囲気を感じる。reだとちぇっくしてくれない。
— 実践Terraform@tmknom (@tmknom) May 2, 2019
textlint 11リリース🎉
— azu (@azu_re) July 22, 2018
任意の拡張子をText/Markdownとして扱えるオプションの追加。
Node.js 4のサポート終了や開発者向けの変更など。 “textlint 11 released · textlint” https://t.co/NrFwF0BRql
最終的にわかったこと: textlintはデフォルトではMarkdown、テキスト以外の拡張子のファイルは警告が出ることなく無視されるということ。どうやらプラグインを書かないといけない
— かと (@orangain) January 17, 2016
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なのでは、という感じぐらいいけています。校正者がいなくてもかなり品質があがる気がします。
ありがとうございます。
コメント