textlint と GitHub Actions でドキュメントの自動校正のCIを構築

textlint と GitHub Actions でドキュメントの自動校正のCIを構築

2022-02-127 min read

目次

  1. 概要
  2. 利用する技術について
  3. ワークフローの実装
  4. リンク

概要

GitHub で Markdownで管理しているブログに対して textlint で校正を行いレビューを自動化する CI を GitHub Actionsで構築しました。

具体的には次のようなワークフローを構築しています。

  1. ライターが markdown で記事を書き、プルリクを行う
  2. GitHub Actions スタート
  3. textlint で記事に対して校正を行う
  4. reviewdog でプルリクにミス内容を記載する
  5. 問題がなかったらオーナーはプルリク承認、終了。NGだったら以下に進む。
  6. ライターがミス内容を修正して再度push
  7. 再度、GitHub Actions スタート以下略...

利用する技術について

textlint

textlint/textlint: The pluggable natural language linter for text and markdown.

markdownで書いた文章について、表現の揺れや句読点、typoなどを機械的に抽出してくれるツールです。

GitHub Actionsについて

Actions | GitHub

GitHubで利用できるCI/CDサービスです。

GitHubリポジトリの.github/workflowsディレクトリ以下にワークフローを定義したファイルを配置しておくことでpushやプルリクをトリガーに定義したイベントを実行することができます。

reviewdog

reviewdog/reviewdog: 🐶 Automated code review tool integrated with any code analysis tools regardless of programming language

プログラミング言語に依存しないコード分析と自動コードレビューが統合されたツールです。

ワークフローの実装

.github/workflows/textlint.yml について次のように定義しました。

ワークフロー

name: textlint

on:
  push:
    branches:
      - develop
  pull_request:
    branches:
      - master

jobs:
  textlint:
    name: reviewdog
    runs-on: ubuntu-latest

    steps:
      - uses: reviewdog/action-setup@v1
        with:
          reviewdog_version: latest

      - uses: actions/setup-node@v2
      - uses: actions/checkout@v2

      - name: Install textlint
        run:  'npm install --save-dev textlint textlint-rule-max-ten textlint-rule-spellcheck-tech-word textlint-rule-no-mix-dearu-desumasu'

      # note: コンテンツが多すぎると exit code 1となる
      - name: Exec textlint
        run: |
          npx textlint --rule no-mix-dearu-desumasu --rule max-ten --rule spellcheck-tech-word ./ 2>&1 | tee ./.textlint.log

      # note: textlintで文章上のミスがあった場合のみ、reviewdogを実行
      - name: Run reviewdog
        if: failure()
        env:
          REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          cat .textlint.log | reviewdog -f=checkstyle -name="textlint" -reporter="github-pr-review"

説明

  • ブランチ

develop への push、もしくは master へのプルリクのイベントの時にワークフローを実行する様にしています。

  • textlintのセットアップ
- name: Install textlint
  run:  'npm install --save-dev textlint textlint-rule-max-ten textlint-rule-spellcheck-tech-word textlint-rule-no-mix-dearu-desumasu'

でtextlintをセットアップしています。

ルールとして textlint-rule-max-ten textlint-rule-spellcheck-tech-word textlint-rule-no-mix-dearu-desumasu を利用しています。

  • textlintの実行
- name: Exec textlint
  run: |
    npx textlint --rule no-mix-dearu-desumasu --rule max-ten --rule spellcheck-tech-word ./ 2>&1 | tee ./.textlint.log

markdownファイルに対してtextlintで自動校正を行なっています。

  • reviewdogの実行
- name: Run reviewdog
  if: failure()
  env:
    REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  run: |
    cat .textlint.log | reviewdog -f=checkstyle -name="textlint" -reporter="github-pr-review"

textlintでエラーがあった場合に、PRにレビューコメントを行います。

リンク

Author
githubzennqiita
ただの備忘録です。

※外部送信に関する公表事項