Fusic Tech Blog

Fusion of Society, IT and Culture

textlintを使って校閲を自動化する
2020/09/06

textlintを使って校閲を自動化する

こんにちは。 最近は個人的にもの書きに勤しんでいる岡嵜です。

文章を書く時に手間なのが校閲作業。日本語としての誤りであれば読んでいて違和感があるのでまだ気付きやすいですが、ちょっとした表記揺れや書き方に起因する読みにくさは検出が難しいと感じています。

そこで、今回はtextlintを使って、校閲作業を自動化する方法を紹介します。

textlintによる校閲

textlintのインストール

nodeがインストールされた環境で、次のコマンドを実行するとインストールできます。

$ mkdir textlint-test
$ cd textlint-test
$ npm init # 対話形式で諸々入力を求められるが全てデフォルトでOK
$ npm install textlint

textlint-rule-preset-ja-technical-writingをインストール

textlint-rule-preset-ja-technical-writingは技術文書向けのtextlintルールプリセットです。技術文書に特化して文章を校閲をしてくれます。

次のコマンドを実行してインストールします。

$ npm install textlint-rule-preset-ja-technical-writing

インストールが完了したら、.textlintrc を作成してルールを有効化しましょう。

{
  "rules": {
    "preset-ja-technical-writing": true,
  }
}

textlintを実行する

準備ができたので、textlintを実行してみましょう。

今回はこちらの記事から引用した次の文章を校閲対象とします。

$ cat test.txt
Producer(送信者)がBrokerを経由してConsumer(受信者)にメッセージを送ります。構成だけ見るとMQTTに似ていますね。

Kafkaの特徴の一つに「Brokerがスケーラブルである」という点があります。Brokerがスケールアウトして複数台構成となっても、メッセージの送受信を分散処理することでパフォーマンスを維持します。

Broker間の連携を担うのがZppKeeperの役目です。

ちなみに、数日前に出たこちらの記事によると、KafkaをZookeeperに依存しない形にする計画も始まっているようです。 https://www.confluent.io/blog/removing-zookeeper-dependency-in-kafka/

次のコマンドでtextlintを実行します。

$ ./node_modules/textlint/bin/textlint.js test.txt

/textlint-test/test.txt
  3:10   ✓ error  一つ => 1つ
数量を表現し、数を数えられるものは算用数字を使用します。任意の数に置き換えても通用する語句がこれに該当します。  ja-technical-writing/arabic-kanji-numbers
  7:45   error    一文に二回以上利用されている助詞 "に" がみつかりました。                                                        ja-technical-writing/no-doubled-joshi
  7:131  error    文末が"。"で終わっていません。                                                                                  ja-technical-writing/ja-no-mixed-period

✖ 3 problems (3 errors, 0 warnings)1 fixable problem.
Try to run: $ textlint --fix [file]

このように、技術文書としてイマイチな書き方となっている箇所を指摘してくれます。便利ですね。

textlint-rule-prhをインストール

表記揺れを検出するためprhを導入します。今回はtextlintのルールとしてprhを組み込むため、textlint-rule-prhを利用します。

$ npm install textlint-rule-prh

prhを使用するためにはルールを定義する必要があるのですが、今回はこちらを使わせていただきました。

https://github.com/prh/rules/blob/master/media/WEB%2BDB_PRESS.yml

次のコマンドで取得します。

$ wget https://raw.githubusercontent.com/prh/rules/master/media/WEB%2BDB_PRESS.yml

ルールにprhを追加するため、 .textlintrb を追記します。

{
  "rules": {
    "preset-ja-technical-writing": true,
    "prh": {
      "rulePaths" :["./WEB+DB_PRESS.yml"]
    }
  }
}

textlint+prhを実行する

次はこちらの記事から引用した、次の文章を校閲対象とします。

$ cat test.txt
例えば、弊社オフィスのエアコンをIoT化したいとします。

温度が高いときは自動的にエアコンをOFFに、低いときは自動的にエアコンをONにする簡単なシステムです。この場合、温度は温度センサーを使うことで計測ができます。

一方、エアコンのON/OFFはどのように実現できるでしょうか?ちなみに、弊社のエアコンはこのようなコントローラからしか制御できません。赤外線リモコンもありません。

実行するコマンドはprh追加前と同じです。

$ ./node_modules/textlint/bin/textlint.js test.txt

/Users/yokazaki/src/github.com/yuuu/textlint-test/test.txt
  1:1   ✓ error  例えば => たとえば    prh
  3:62  ✓ error  センサー => センサ    prh
  5:9   ✓ error  ON/OFF => オン/オフ  prh
  5:31  error    Disallow to use "?"  ja-technical-writing/no-exclamation-question-mark

✖ 4 problems (4 errors, 0 warnings)3 fixable problems.
Try to run: $ textlint --fix [file]

いかにも表記ゆれが起こりがちな箇所をしっかり指摘してくれています。

そのほかのTips

GitHub ActionsでCIする

執筆原稿をGitHubで構成管理している場合、push時にtextlintを自動実行すると便利です。次のような .github/workflows/lint.yml を作成するとGitHub Actionsが有効となります。

name: Lint
on: [push]
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: npm install
        run: npm install
        shell: bash
      - name: textlint
        run: ./node_modules/textlint/bin/textlint.js test.txt
        shell: bash

文書フォーマットがMarkdownの場合の設定

@textlint/textlint-plugin-markdownをインストールすると、Markdown記法を考慮して校閲できます。

執筆ツール Re:VIEW を使う場合の設定

textlint-plugin-reviewをインストールすると、Re:VIEWの記法を考慮して校閲できます。

一部の文章を校閲対象外とする

固有名詞を使っている等、特定の文章に対する指摘を無視したい場合があります。textlint-filter-rule-commentsをインストールすると、コメントを書くことで部分的にtextlintを無効化できます。

まとめ

この記事はtextlintで校閲済みです。(執筆時点では5個の指摘がありました)

yuuu

yuuu

2018年の年明けに組込み畑からやってきた、2児の父 兼 Webエンジニアです。 mockmockの開発・運用を担当しており、組込みエンジニア時代の経験を活かしてデバイスをプログラミングしたり、簡易的なIoTシステムを作ったりしています。主な開発言語はRuby、時々Go。