Windows上のVS Codeでtextlintを使うためにやるべきことは以下の通り。
Node.jsとnpmをインストールする
textlintはNode.js製のプログラムなのでまずはNode.jsとNode.js用のパッケージ管理ツールであるnpmをインストールする。
例えば次のようなページが参考になる⇒Node.js / npmをインストールする(for Windows) - Qiita
上記のページに従って、公式サイトにアクセスし、Windows用のバイナリをダウンロードしてインストールする。
インストールに成功していれば以下のコマンドでバージョンを確認できる。
PS D:\> node --version
v8.10.0
PS D:\> npm --version
5.6.0
textlintをインストールする
npmを使ってtextlintをインストールする。ここでは手っ取り早くグローバルインストールする*1。
また、ルールを一から設定するのは手間なので、azuさん作の日本語の技術文書向けプリセットであるtextlint-rule-preset-ja-technical-writingをインストールする。
ついでに例外を明示するためにtextlint/textlint-filter-rule-commentsとtextlint/textlint-filter-rule-whitelistもインストールする。
PS D:\> npm install -global textlint textlint-rule-preset-ja-technical-writing textlint-filter-rule-comments textlint-filter-rule-whitelist
textlintを設定する
インストール後には設定ファイルを作成する必要がある。
textlintの対象にしたいフォルダへ移動してtextlint --init
すると設定ファイルである.textlintrc
が生成される。
PS D:\> cd D:\hoge
PS D:\hoge> textlint --init
PS D:\hoge> ls
ディレクトリ: D:\hoge
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2018/03/23 22:53 34 .textlintrc
-a---- 2018/03/23 22:06 1174 textlintのインストール.md
あとは生成された設定ファイルで、先ほどインストールしたプリセットルールを有効にする。
{
"filters": {
"comments": true
},
"rules": {
"preset-ja-technical-writing": true
}
}
ここまでやって動くと思いきや、エラーでるのでそのトラブルシューティング。
textlintが動作しない
[Error - 23:04:48] Server initialization failed.
Message: Request initialize failed with message: Failed to resolve module: textlint
Code: -32603
textlintへのパスが通っていないから発生したエラー。VS Codeを再起動して解決。
モジュールが利用できない
PS D:\Users\username\hoge> textlint --config .\.textlintrc .\textlintのインストール.md
× Error
Failed to load textlint's filter rule module: "comments" is not found.
See FAQ: https://github.com/textlint/textlint/blob/master/docs/faq/failed-to-load-textlints-module.md
× Stack trace
ReferenceError: Failed to load textlint's filter rule module: "comments" is not found.
See FAQ: https://github.com/textlint/textlint/blob/master/docs/faq/failed-to-load-textlints-module.md
at TextLintModuleResolver.resolveFilterRulePackageName (C:\Users\username\AppData\Roaming\npm\node_modules\textlint\lib\textlint\src\engine\textlint-module-resolver.js:116:19)
at TextLintModuleLoader.loadFilterRule (C:\Users\username\AppData\Roaming\npm\node_modules\textlint\lib\textlint\src\engine\textlint-module-loader.js:221:43)
at C:\Users\username\AppData\Roaming\npm\node_modules\textlint\lib\textlint\src\engine\textlint-module-loader.js:80:23
at Array.forEach (<anonymous>)
at TextLintModuleLoader.loadFromConfig (C:\Users\username\AppData\Roaming\npm\node_modules\textlint\lib\textlint\src\engine\textlint-module-loader.js:79:32)
at TextLintEngine.AbstractTextLintEngine (C:\Users\username\AppData\Roaming\npm\node_modules\textlint\lib\textlint\src\engine\textlint-engine-core.js:97:27)
at new TextLintEngine (C:\Users\username\AppData\Roaming\npm\node_modules\textlint\lib\textlint\src\textlint-engine.js:22:47)
at Object.executeWithOptions (C:\Users\username\AppData\Roaming\npm\node_modules\textlint\lib\textlint\src\cli.js:133:26)
at Object.execute (C:\Users\username\AppData\Roaming\npm\node_modules\textlint\lib\textlint\src\cli.js:90:25)
at C:\Users\username\AppData\Roaming\npm\node_modules\textlint\bin\textlint.js:34:20
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
at Function.Module.runMain (module.js:695:11)
at startup (bootstrap_node.js:188:16)
commentsモジュールが見つからずに発生したエラー。再度全モジュールをnpm install -global
して解消。
textlintのVS Code拡張は以下の条件で動作するので、ファイル単位ではなく、フォルダ(プロジェクト)単位で開く必要がある。フォルダを開いて解決。
既に、textlintの設定をしているプロジェクト(node_modulesにtextlintやルールがインストールされていて、.textlintrcが配置されている場所)なら、VS Codeでそのディレクトリを開くだけで動作します。
VS Codeでtextlintを使って文章をチェックする - Qiita
指定のルールだけ設定を変更したい場合(2018/06/24追記)
‘preset-ja-technical-writing‘で一部のルールを無効化したり、設定を変更したりしたいときは、以下のように入れ子に記載する。
{
"filters": {
"comments": true
},
"rules": {
"preset-ja-technical-writing": {
"sentence-length": {
"max": 100
}
}
}
}
おわりに
ここまでできれば、リアルタイムにlintしながら文章を書くことができる。
ただ、この時点ではデフォルト設定がのみなので、効果は限定的だ。より効果を出すためには、 .textlintrc
をカスタマイズして辞書やフィルタを育てていけばよい。
楽をするために頑張って、退屈なことは機械にやらせよう。