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

参考文献

RSS フィードで fwywd の技術記事を購読しよう

fwywd(フュード) のシェアボタンにある RSS フィードを利用すれば、新しい記事が出るたびに自動的に通知を無料で受け取ることができます。
Slack への連携はたったの5分で行うことができ、以下の記事でその手順を具体的に紹介しています。
ぜひ、fwywd(フュード) が日々更新する技術記事をキャッチアップしていただけると嬉しいです。
subscribe-rss-feed

fwywd では開発メンバーを募集しています

recruitment
fwywd では採用試験を無料で公開しています。
採用への応募の有無を問わず、Web アプリケーションの開発を学びたい多くの方にとって有益な試験内容となるように設計しています。 ぜひ、fwywd の面白い採用試験を覗いてみてください。