Github連携されたZennの記事をtextlintで自動チェックする


はじめに

Zennの記事を公開する際に、誤字や脱字、適切な日本語を使えているか、記事を見直して校正作業を行うのは面倒です。
自分で記述した文章の校正作業は間違いに気づきにくく、文章量に比例して作業時間も増えていきます。

そこで、Github連携されたZennの記事をGithubActionsを利用してプッシュの度に文章校正する方法を共有します。

前提

GithubActionsを使用するため、Zennの記事をGithub連携している必要があります。
Github連携する方法はZennの公式が記事に起こしているため、こちらを参考にします。

https://zenn.dev/zenn/articles/connect-to-github

同様にZenn CLIも導入する必要があります。
導入することによりローカルエディタで記事の作成・編集が可能になります。
こちらもZenn公式から記事が出ているので参考にしましょう。

https://zenn.dev/zenn/articles/install-zenn-cli

今回できるようになること

例えば以下のような文章をリモートリポジトリへプッシュしてみます。

Zennの記事でGithubActionsで連携してtextlintしてみた

以下のようにGithubActionsで文章校正をしてくれるようになります。

   10:22   error    一文に二回以上利用されている助詞 "で" がみつかりました。

手順

  • ZennをGithubに連携する(省略)
  • Zenn CLIを導入する(省略)
  • textlintの導入
    • textlintのインストール
    • textlintのルールのインストール
    • textlintrcでルールの詳細設定
  • package.jsonの設定
    • yarn textlint
  • GithubActionsの導入
    • ワークフローの設定

textlintの導入

textlintとは?

textlintとは名前の通り、テキストに対してlintを実行してくれるツールです。
校正ルールをプラグインとして追加することで、間違った日本語や冗長的な文章を指摘してくれます。

textlintのインストール

まずはtextlintをインストールします。
公式ではローカルにインストールすることが推奨されているので、devDependencies にインストールします。

yarn add -D textlint

textlintのルールのインストール

textlintでは文章校正のルールを別途インストールする必要があります。
様々なルールがコレクションズにまとまっているため、用途によって必要なルールをインストールしましょう。
今回は3つのルールをインストールします。

yarn add -D textlint-rule-preset-ja-technical-writing
yarn add -D textlint-filter-rule-comments
yarn add -D textlint-rule-preset-ja-spacing

textlint-rule-preset-ja-technical-writing

textlint-rule-preset-ja-technical-writing は技術文書向けのルールのプラグインです。

textlint-filter-rule-comments

textlint-filter-rule-commentstextlint-rule-preset-ja-technical-writing と併せて利用することを想定されているfilter(例外を明示できる)ルールのプラグインです。Zennの記事ではtextlintでエラーになる例外的な文章を書くことがあります。filter設定をすることで明示的にtextlintを無視できます。

textlint-rule-preset-ja-spacing

textlint-rule-preset-ja-spacing は「半角文字と全角文字の間にスペースを入れるか」や「インラインコードの周りにスペースを入れるか」といったスペースに関するルールのプラグインです。

textlintrcでルールの詳細設定

.textlintrcファイルでルールの詳細な有効無効設定ができます。
ディレクトリ直下に .textlintrc ファイルを作成し以下を記述します。

.textlintrc
filters:
  comments: true
rules:
  preset-ja-technical-writing:
    no-exclamation-question-mark: false
    max-kanji-continuous-len: false
  preset-ja-spacing:
    ja-space-around-code:
      before: true
      after: true

package.jsonの設定

ローカルでtextlintを実行できるように、 package.json のscriptに以下の記述を追加します。
articlesとbooks配下のmdファイルを対象にtextlintを実行します。

package.json
  "scripts": {
    "textlint": "textlint \"./{articles,books}/*.md\""
  }

以下を実行するとローカルでtextlintを実行できるようになりました。

yarn textlint

実行結果の例

GithubActionsの導入

GithubActionsとは?

GithubActionsは、GitHubプラットフォームのイベントをトリガーとしてワークフローを起動できます。 GitHubが公式に提供しているCI/CDツールでワークフローの記述次第では様々なジョブを実行できます。

GithubActionsの設定を行いプッシュのたびにtextlintを実行できるようにします。
ディレクトリ直下に .github/workflows/textlint.yml を作成し、以下を記述します。

.github/workflows/textlint.yml
name: textlint
on: push
jobs:
  build:
    name: check textlint
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: 14.x
      - run: yarn install
      - name: Check Textlint
        run: yarn run textlint

以上を設定すると、リモートにプッシュしたタイミングで yarn textlint を実行します。
校正対象となるファイルはarticles,books配下のmdファイルが該当し、実行結果はGithubのActionsタブで確認できます。

textlintのActionsが失敗している場合、Actionsの詳細からエラー箇所を見ることもできます。

終わりに

今回は文章校正チェックまでをGithubActionsで自動化しました。
textlintを使うことで統一性のある技術的な文章になる一方で、Zennの記事としては読みにくいものになると感じました。
最適なルールのプラグインを選定することや、textlintのルールをどれだけ緩めるかの見極めが重要になりそうです。

参考資料

https://efcl.info/2015/09/10/introduce-textlint/
https://fwywd.com/tech/textlint-proofreading
https://zenn.dev/zenn/articles/connect-to-github
https://zenn.dev/yuta28/articles/blog-lint-ci-reviewdog
https://zenn.dev/hrtk/scraps/f1fb9bf5ffcb34
https://zenn.dev/ria/articles/45632471ce94dd8f1b38