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でそのディレクトリを開くだけで動作します。
おわりに
ここまでできれば、リアルタイムにlintしながら文章を書くことができる。
ただ、この時点ではデフォルト設定がのみなので、効果は限定的だ。より効果を出すためには、 .textlintrc
をカスタマイズして辞書やフィルタを育てていけばよい。
楽をするために頑張って、退屈なことは機械にやらせよう。