📝

GitHub Actions + textlintで記事を校正する

2022/03/04に公開

Zennやはてなブログなどで記事を公開する際には、公開前に軽く誤字や脱字の確認をしていました。ただ、人の目での確認だと不備の見逃しがあったり、何より手間がかかります。この問題の解決するために、今回はGitHub Actionsとtextlintを使って校正作業を楽にしました。

はじめに

GitHub Actionsとtextlintについては、それぞれ下記のドキュメントが参考になると思います。

GitHub Actionsは、GitHub上でさまざまな操作に応じて任意の処理を実行できる機能です。

textlintは、テキストファイルに書かれた文章を校正するJavaScript製のツールです。

textlintにはデフォルトでルールが設定されていないため、下記に記載されているルールのうち、必要なものをインストールする必要があります。

https://github.com/textlint/textlint/wiki/Collection-of-textlint-rule

textlintの設定

今回は私の文章に馴染みそうなSmartHR用ルールプリセットをベースにします。

さらに、単語の表記ゆれをチェックするtextlint-rule-prhと特定の文字列や文章をチェックしないようにするtextlint-filter-rule-allowlistを使います。

textlintの設定ファイル.textlintrcは下記のように作成しました。

{
    "rules": {
        "preset-smarthr": {
            "sentence-length": {
                max: 150
            }
        },
        "prh": {
            "rulePaths": [
                "dict/prh.yml",
                "dict/WEB+DB_PRESS.yml"
            ]
        },
   },
    "filters": {
        "allowlist": {
            "allow": [
                "/http(.+):embed:cite/",    (1)
                "/.+👀/",                   (2)
                "/.+🐱/"                    (3)
            ]
        }
    }
}

preset-smarthrにはデフォルトで多くのルールが含まれており、一文の最大文字数は120文字までとされています。私の感覚だと150文字くらいまで許容してほしいので、変更しています。他のルールはデフォルト値のままです。
 prhには表記ゆれをチェックする単語の辞書ファイルを指定しています。preset-smarthrでもデフォルトで一部の単語をチェックしてくれますが、物足りないと感じたのでWEB+DB PRESS用語統一ルールをprh形式にしたWEB+DB_PRESS.ymlを少し改良して使っています。公開されている辞書ファイルでカバーできない場合は、辞書ファイルを自分で作成できます。こちらを参考に作成すると良いでしょう。
 allowlistにはtextlintでチェックしてほしくない文章のパターンを正規表現で指定しています。(1)では、はてなブログでURLの埋め込みをした場合になぜか[が閉じられていないというエラーが出てしまうので無視するようにしています。(2)と(3)は、文末が絵文字で終わっている場合に句点で終わっていないというエラーが出てしまうので無視するようにしています。絵文字については、この方法だと絵文字ごとに許可ルールを追加しないといけないため、正規表現で書けるなら書きたいな~という気持ちです。

GitHub Actionsの設定

GitHub Actionsの設定ファイルは、textlint.ymlとして作成しました。このファイルを.github/workflows/配下に保存してリポジトリにpushすることで、それ以降はmainブランチへのpush時にジョブが実行されます。

name: textlint

on:
  push:
    branches: [ main ]

jobs:
  textlint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - uses: actions/setup-node@v2

      - name: Install textlint
        run: >
          npm install --save-dev
          textlint
          textlint-rule-preset-smarthr
          textlint-rule-prh
          textlint-filter-rule-allowlist

      - name: Install dependent module
        run: npm install

      - name: Execute textlint
        run: npx textlint "articles/**/*.md"

textlintジョブの中で行っているのは下記です。

  1. リポジトリのファイルをチェックアウト
  2. Node.js環境のセットアップ
  3. textlintとプリセットルールなどのインストール
  4. その他、依存パッケージのインストール
  5. articlesディレクトリ配下のMarkdown形式のファイルにtextlintを実行

実行

本記事の初稿をリポジトリにpushしたときのtextlint実行結果は下記になります。

指摘箇所の行番号と指摘内容が表示されるので、指摘に従って修正する感じです。
smarthr/prh-rulesprhの二重に指摘されていたりするので、今後改善できればと思っています。

https://github.com/miyuush/articles

おわりに

今回のGitHub Actionsとtextlintを使った校正作業の効率化は、下記の記事を参考に実施しました。また、textlintによる指摘事項をGitHubのPull Requestにコメントしてくれるreviewdogというツールもあるみたいですが、わざわざブランチを切ってPull Requestを作成するのは面倒だと感じたので導入しませんでした。

Discussion