textlintとreviewdogを使ってCircleCIでテキスト校正する

アプリケーション

概要

長文の執筆をする際にテキスト校正を自動化しておきたかったのでやってみた。

構成

テキストはGithub上で管理するようにしており、ディレクトリ構成は以下のようになっている。

├── .circleci
│   └── config.yml
├── README.md
├── documents
│   ├── はじめに.md
│   └── おわりに.md
├── images
├── .textlintrc
├── package-lock.json
└── package.json

npmパッケージインストール

初期設定。

npm init -y

textlintとtextlintで使用するルールをインストール。

npm install --save-dev  textlint  textlint-rule-preset-ja-spacing     textlint-rule-preset-ja-technical-writing     textlint-rule-spellcheck-tech-word textlint-rule-preset-jtf-style textlint-rule-preset-japanese

textlintのルール設定

.textlintrc

{
  "filters": {},
  "rules": {
    "preset-ja-spacing": true,
    "preset-ja-technical-writing": true,
    "preset-japanese": true,
    "preset-jtf-style": true,
    "spellcheck-tech-word": true
  }
}

CircleCIの設定

Githubでrepoだけを許可したトークンを発行して、REVIEWDOG_GITHUB_API_TOKENという名前で環境変数をセットしておく。

config.ymlの設定は以下の通り。

version: 2
jobs:
  build:
    docker:
      - image: vvakame/review:latest
        environment:
          REVIEWDOG_VERSION: latest
    steps:
      - checkout
      - restore_cache:
          keys:
            - npm-cache-{{ checksum "package-lock.json" }}
      - run:
          name: Setup
          command: npm install
      - save_cache:
          key: npm-cache-{{ checksum "package-lock.json" }}
          paths:
            - ./node_modules
      - run:
          name: install reviewdog
          command: "curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh| sh -s $REVIEWDOG_VERSION"
      - run:
          name: lint for ja
          command: "$(npm bin)/textlint -f checkstyle documents/*.md | tee check_result"
      - run:
          name: reviewdog
          command: >
              if [ -n "$REVIEWDOG_GITHUB_API_TOKEN" ]; then
                cat check_result | ./bin/reviewdog -f=checkstyle -name=textlint -reporter=github-pr-review
              fi
          when: on_fail

CIを回してみる

textlintに引っかかるとreviewdogがコメントしてくれる。

スクリーンショット 2021-10-09 22 38 19

参考


関連書籍