Node.js (TypeScript) で、textlint を動かす方法

Node.js (TypeScript) で、textlint を動かす方法

はじめに

どーも、入田 / ぐるたか @guru_taka です!前回 textlint における文章の校正方法を紹介しました。
参考:textlint で日本語の文章を校正する方法 | fwywd(フュード)
本記事では、textlint を Node.js (TypeScript) で動かす方法を紹介します。

モチベーション

非エンジニアでも簡単に textlint の校正ができるように、textlint 用の API サーバーを開発することにしました。以下の記事で紹介されているようなことを目指しています。
そのために、ファーストステップとして、ローカル環境にて Node.js で textlint を動かしてみました

バージョン情報

  • textlint:2.1.1
  • typescript:4.3.2
  • node
    • npm を使用する場合:15.11.0
    • yarn を使用する場合:12.20.2

結論

今回は Node.js で textlint を動作させ、以下 2 つの手順で校正を行います。
  • ファイル指定 → 校正
  • テキスト指定 → 校正
コードは以下の通りです。
// ディレクトリ構成 src ├── app.ts └── lib └── proofreading.ts ├── index.md └── .textlintrc.json
// src/lib/proofreading.ts import { lintFile, lintText } from './lib/proofreading'; lintText('私はJavaScriptが大好きです') .then((result) => console.log(result)) .catch((err) => console.log(err)); lintFile('index.md') .then((result) => console.log(result)) .catch((err) => console.log(err));
// src/lib/proofreading.ts import { TextLintEngine } from 'textlint'; import path from 'path'; // 設定ファイルの絶対パス const options = { configFile: path.join(__dirname, '../../.textlintrc.json'), }; // ファイルのパスを引数に渡し、textlint で校正 export const lintFile = async (filePath: string) => { const engine = new TextLintEngine(options); const filePathList = [path.resolve(process.cwd(), filePath)]; const results = await engine.executeOnFiles(filePathList); return engine.isErrorResults(results) ? engine.formatResults(results) : 'All Passed!'; }; // テキストを引数に渡し、textlint で校正 export const lintText = async (text: string) => { const engine = new TextLintEngine(options); const results = await engine.executeOnText(text); return engine.isErrorResults(results) ? engine.formatResults(results) : 'All Passed!'; };
基本的な処理の流れは以下のようになります。
  1. .textlintrc.json のパスを、オプションとして設定
  2. TextLintEngine をインスタンス化
  3. メソッドである executeOnFiles / executeOnText を実行して、校正結果を取得

実行結果

Node.js (TypeScript) の環境下で app.ts を実行すると、以下のような構成結果が得られます。
# npm の場合 npx ts-node src/app.ts # yarn の場合 yarn ts-node src/app.ts
# 実行結果 <text> 1:2 ✓ error 原則として、全角文字と半角文字の間にスペースを入れます。 ja-spacing/ja-space-between-half-and-full-width 1:12 ✓ error 原則として、全角文字と半角文字の間にスペースを入れます。 ja-spacing/ja-space-between-half-and-full-width 1:18 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period ✖ 3 problems (3 errors, 0 warnings) ✓ 2 fixable problems. Try to run: $ textlint --fix [file] /~~~~/~~~~/~~~~/~~~~/textlint_node/index.md 1:2 ✓ error 原則として、全角文字と半角文字の間にスペースを入れます。 ja-spacing/ja-space-between-half-and-full-width 1:12 ✓ error 原則として、全角文字と半角文字の間にスペースを入れます。 ja-spacing/ja-space-between-half-and-full-width 1:18 error 文末が"。"で終わっていません。 ja-technical-writing/ja-no-mixed-period ✖ 3 problems (3 errors, 0 warnings) ✓ 2 fixable problems. Try to run: $ textlint --fix [file]

最後に

以上になります。textlint を Node.js で実行したい方の参考になれば幸いです。
ここまでご覧いただき、ありがとうございました!

株式会社キカガク コンテンツマーケティング責任者
入田 / ぐるたか
twitter: @guru_taka

参考文献