textlint 12リリース、ブラウザで動くtextlint editorをベータリリース
日本語などの文章を校正できるルールをもっているLintツールであるtextlint v12をリリースしました。 Markdownプラグインのアップデートと各パッケージのバージョン統一が主な変更となります。
リリースノートは次のページにも書いているので、興味がある人は見てください。
簡単に変更のサマリを書いておきます。
textlint利用者向けの変更点
次のコマンドでtextlint 12へアップデートできます。
npm install textlint@12
# or
yarn install textlint@12
textlintは、文章の構文を認識してLintすることで誤検知を減らしています。 たとえば、MarkdownのCodeBlockの中のコードを単純にスペルチェックしてしまうと赤線だらけになってしまいます。 textlintの各ルールには、CodeBlockの中はチェックしないといったように、各ルールごとに文章のどの構文(リンクやテキスト、リスト、コードなど)を対象にチェックするかといった実装を含んでいます。
この構文を認識するために、textlintでは各ファイルフォーマットごとにプラグインが用意してあって、ビルトインではテキストとMarkdownが含まれています。 外部のプラグインとしてHTML、Re:VIEW、LaTeX2などがあります。
プラグインの一覧は次のページにまとまっています。
textlint 12ではこのビルトインで含まれていているMarkdownプラグインが大きく変更されています。 内部的に使っているMarkdownのパーサが大きく変わっています。
- feat(markdown-to-ast): update to remark-parse@9 by azu · Pull Request #767 · textlint/textlint
- Release 13.0.0 (micromark) · remarkjs/remark
このアップデートで、今まで上手く認識できていなかった箇所も認識されるようになる場合があります。 その場合は、文章を変更してなくても新しいエラーが見つかるようになるかもしれません。(メジャーアップデートの主な理由です)
また、textlint 12からNode.js 12以上が必須となっています。 Node.js 10以下はサポートが終了しているので、Node.js 12、14、16などへアップデートしてください。
textlintのルールを作っている人向けの変更点
textlint-tester
とtextlint-scripts
がアップデートされて、どちらも12
となっています。
create-textlint-ruleのコマンド経由でルールを作ってる人は次のテンプレートが使われていると思います。
- textlint/textlint-rule-template-ts: TEMPLATE repository for textlint rule that is written by TypeScript
- textlint/textlint-rule-template: This is TEMPLATE REPOSITORY for creating textlint rule.
この場合は、次のコマンドでtextlint-tester
とtextlint-scripts
をそれぞれアップデートしてください。
npm install textlint-scripts@12 textlint-tester@12 --save-dev
# or
yarn install textlint-scripts@12 textlint-tester@12 --dev
基本的に機能的な変更はありませんが、textlint-tester@12
では、ES Modulesの export default
でエクスポートするようになりました。
そのため、使う側も import TextLintTester from "textlint-tester"
でインポートする必要があります。
次のように require
で書いている場合は、import
に変更してみてください。
- const TextLintTester = require("textlint-tester");
+ import TextLintTester from "textlint-tester";
実際の変更例は、次のPRが参考になると思います。
- Update textlint-scripts and textlint-tester by massongit · Pull Request #8 · textlint-ja/textlint-rule-no-insert-dropping-sa
- Update textlint-scripts and textlint-tester by massongit · Pull Request #5 · textlint-rule/textlint-rule-no-unmatched-pair
何かtextlintのルールを書いてみたい!という人がいたら、次のIssueにルールのアイデアが溜まっているので実装してみると良いかもしれません。 Issueやtextlint-ja/textlint-ja - Gitterとかで相談してみてください。
先ほども書いていたように、MarkdownのパーサがアップデートされたことでTxtASTのvalue
が微妙に変わっていることがあります。
基本的にはあまり影響ないはずですが、CommonMarkの仕様で、パラグラフの前後にスペースがある場合に、
Str
の value
にはそのスペースが含まれなくなっています。
なので、文章の先頭や末尾のスペースを Str
nodeで扱う場合には工夫が必要になります。(親であるParagraph
nodeの方を見るなどが必要)
また、このアップデートにあわせて AST explorer もアップデートしています。 URLで保存もできるようになってるので、プラグイン周りのバグレポートなどにも利用出来ます。
textlint 12では、プラグインが生成するASTがTxtAST Interfaceとしてvalidかを判定する@textlint/ast-tester
もアップデートしています。
エラーメッセージがわかりやすくなっているので、新しいファイルフォーマットのプラグインを作る場合には利用してください。
- feat(ast-tester): improve error message by azu · Pull Request #783 · textlint/textlint
- Plugin · textlint
使われているプラグイン周りは、メンテナは複数人いた方がいいので関連するIssueをいくつか立てています。
- Looking for new maintainer · Issue #21 · textlint/textlint-plugin-html
- improve collaboration · Issue #20 · seikichi/textlint-plugin-asciidoctor
textlintの日本語のGitterでも話したりしているので、プラグインのメンテナンスに興味がある人は来てみてください。
基本的には textlint orgとかに移管して複数人でメンテナンスできる状態にするのが健全なのかなと思っています。
内部的な変更点
textlint/textlint: The pluggable natural language linter for text and markdown.はmonorepoですが、今まで各パッケージのバージョンはIndependent(それぞれバラバラ)にしていました。
一つのプロダクトを扱うmonorepoでバージョンがバラバラだとやっぱりわかりにくいので、textlint 12ですべてのパッケージのバージョンを12.0.0
へと統一しました。
Breaking Changes | Package | Previous version | Current version |
---|---|---|---|
✔ | textlint | 11.9.1 | 12.0.0 |
✔ | textlint-tester | 5.3.5 | 12.0.0 |
✔ | textlint-scripts | 3.0.0 | 12.0.0 |
@textlint/ast-node-types | 4.4.3 | 12.0.0 | |
@textlint/ast-traverse | 2.3.5 | 12.0.0 | |
@textlint/ast-tester | 2.3.5 | 12.0.0 | |
@textlint/feature-flag | 3.3.5 | 12.0.0 | |
@textlint/fixer-formatter | 3.3.5 | 12.0.0 | |
@textlint/kernel | 3.4.5 | 12.0.0 | |
@textlint/linter-formatter | 3.3.5 | 12.0.0 | |
@textlint/module-interop | 1.2.5 | 12.0.0 | |
✔ | @textlint/textlint-plugin-markdown | 5.3.5 | 12.0.0 |
@textlint/textlint-plugin-text | 4.3.5 | 12.0.0 | |
✔ | @textlint/types | 1.5.5 | 12.0.0 |
@textlint/utils | 1.2.5 | 12.0.0 |
この過程でtextlint-scripts
もmonorepoへ追加しました。
textlint editorのベータリリース
ブラウザ拡張としてtextlintを任意のサイトで動かせる@textlint/editorをベータリリースしています。
textlint editorの目的は次の記事やスライドで話しています。
- textlint editor - ブラウザでも動くPrivacy Firstの文章校正ツールを作る話
- サーバにデータを送る必要がない文章の校正ツール、スペルチェッカーを作っている | Web Scratch
textlint editorはテキストエリア上で赤線を出して修正したりするWordとかgrammarlyみたいなものです。 各人のtextlintの設定を使えるようにしているので、カスタマイズ性は維持しています。
CIとかコマンドラインで継続的に回してチェックとして使うtextlintと違って、 エディタなら必ずエラーを直さなくても良くて無視するという選択もある気がします。 そのため、日本語向けみたいな安易なプリセットを用意しておくのが良いのかなとか思ったりしています。
また、ベータなので@textlint/editorにバグレポートやドキュメントのPRとか待っています。
あとブラウザ拡張として動くということは、普通にtextlintがブラウザで動くということです。 textchecker-elementという汎用的なtextareaにオーバーレイする仕組みと、@textlint/script-compilerというtextlintと設定をWeb Workersとしてコンパイルするツールを作っています。
まだAPIとかは安定してないので変わると思いますが、普通にウェブサービスとかにもtextlintを簡単に組み込んだりできるようになる気がするので、 この辺どういうものがあるといいとかのアイデアをください。
Thanks to Support!
最近、VELC(ヴェルク)さんがOpen Source Sponsorになってくれたりしました。
- 会社(ヴェルク)としてGithub Sponsorsになりました - ヴェルク - IT起業の記録 (Japanese blog)
他にも70名以上の人がGitHub Sponsorsになってくれています。 あらためてありがとうございます!
自分のGitHub Sponsorsのページは https://github.com/sponsors/azu です。 興味がある人は見てください。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。