
textlintでWebページをチェックする
テキストのチェックをする際にtextlintを使用することがある。
textlintは基本的にはテキストのファイルをチェックするためのものなのでtextlint自体にはWebサイトの特定ページのテキストをチェックするための機能はない。
しかし、node-fetchとjsdomをimportで読み込めばtextlintでWebサイトの特定ページのテキストをチェックができるようになる。
必要なライブラリをインストール
今回は以下のようなprh.ymlを作成してルールに一致するものはエラーで表示されるようにする。
version: 1 rules: - patterns: /whitelist/i expected: allowlist - patterns: /blacklist/i expected: denylist - patterns: ホワイトリスト expected: アローリスト - patterns: ブラックリスト expected: デニーリスト
まず、任意のディレクトリを作成してcdで移動したあと、次のコマンドで必要なものをすべてインストールする。
mkdir webtextlint; cd webtextlint; npm init -y; npm i -D textlint textlint-rule-prh node-fetch jsdom
次に.textlintrcファイルを作成して内容を以下の通りにする。
{ "rules": { "prh": { "rulePaths": ["prh.yml"] } } }
次に以下のコマンドでindex.mjsを作成する。
touch index.mjs; chmod 700 index.mjs
index.mjsファイルを作成したら、中身を以下のように記述する。
#!/usr/bin/env node import fetch from 'node-fetch'; import jsdom from 'jsdom'; import textlint from 'textlint'; const { JSDOM } = jsdom; const { TextLintEngine } = textlint; (async() => { const target = 'body' const res = await fetch(process.argv[2]) const html = await res.text() const dom = new JSDOM(html) const document = dom.window.document const post = document.querySelector(target) const text = post.textContent.trim() const engine = new TextLintEngine({ rulePaths: ["node_modules/textlint-rule-prh"] }) engine.executeOnText(text).then(results => { if (engine.isErrorResults(results)) { const output = engine.formatResults(results) console.log(output) } else { console.log('エラーはありませんでした。') } }) })()
あとはターミナルで./index.mjs 【URL】で実行すれば指定したページのURLのテキストをtextlintでチェックすることができる。
node -vでバージョンが14以上でない場合はアップデート推奨。
target = 'body' でbodyタグ全体のテキストをチェックするようになっているが、target = '.editArea' のようにすれば特定の要素内のテキストのみチェックすることができる。
# 実行例 $ ./index.mjs https://www.dentsu.co.jp/news/release/2019/0206-009744.html <text> 307:54 ✓ error ホワイトリスト => アローリスト prh 307:71 ✓ error ブラックリスト => デニーリスト prh 316:116 ✓ error Whitelist => allowlist prh 316:131 ✓ error ホワイトリスト => アローリスト prh 316:149 ✓ error Blacklist => denylist prh 316:166 ✓ error ブラックリスト => デニーリスト prh 317:30 ✓ error Whitelist => allowlist prh 317:165 ✓ error ホワイトリスト => アローリスト prh 317:411 ✓ error Blacklist => denylist prh 317:450 ✓ error Blacklist => denylist prh ✖ 10 problems (10 errors, 0 warnings)
ちなみにURLに?が含まれている場合はクォーテーションで囲む必要がある。
$ ./index.mjs 'https://example.com/?p=1234'
Webサイトの特定ページのテキストをtextlintでチェックするサンプル