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/docs/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
他のルールのまとめです。
個人的に、「たりたり」を採用しました。
小説用もあります。
.textlintrcの作成(.textlintrc.jsの作り方)
(追記)現在はコメントがかける.textlintrc.jsに拡張子を変えて使っています。module.exportsをつける必要があるため注意しましょう。
module.exports = {
"filters": {},
"rules": {}
}`
次に設定ファイルを作成します。
ls
cd 校正したい文章が入っているmdファイルがある場所に移動
初期化して設定ファイルを作成。もちろんVsCode上で直接作ってもかまいません。
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
textlintで自動修正する
修正する場合は次のコマンドです。ただし、すべてのルールが自動修正をサポートしていていません。その場合は手動修正します。
npx textlint --fix 1-00.md
階層がある場合は、階層を含めてパスを指定します。
npx textlint --fix md/1-00.md
fixをぬくとターミナルにエラーが表示されます。
npx textlint md/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にしましたが、うっかり「またまた」とか書いてしまうかもしれません。最後に有効化して確認することにします。
VS Codeでtextlintが動かない原因と解決方法
- エラーがでている(エラー名でぐぐってください)
- ルールが間違えている
- 修正するものがない(わざと変な文章を作って動作確認)
- 階層が間違えている(何もエラーがでない)
たとえば、docというフォルダがある場合、次のような指定になります。
npx textlint doc/text.md
.textlintrc.jsやpackage.jsonがあるファイルから打ちます。
textlintでひっかりやすいエラー
error 一文に二回以上利用されている助詞 "が" がみつかりました。
圧倒的に助詞が多い気がします。
がある場合があります。
みたいなのが多いですね。で + を+ [動詞]場合があります。である場合があります。とかでしょうか。
表記揺れの自動修正(textlint-rule-prh)
長くなったため別記事にしました。
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なのでは、という感じぐらいいけています。校正者がいなくてもかなり品質があがる気がします。
ありがとうございます。
コメント