はじめに
本記事では、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!';
};
基本的な処理の流れは以下のようになります。
.textlintrc.json
のパスを、オプションとして設定
TextLintEngine
をインスタンス化
- メソッドである
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
参考文献