Github連携されたZennの記事をtextlintで自動チェックする
はじめに
Zennの記事を公開する際に、誤字や脱字、適切な日本語を使えているか、記事を見直して校正作業を行うのは面倒です。
自分で記述した文章の校正作業は間違いに気づきにくく、文章量に比例して作業時間も増えていきます。
そこで、Github連携されたZennの記事をGithubActionsを利用してプッシュの度に文章校正する方法を共有します。
前提
GithubActionsを使用するため、Zennの記事をGithub連携している必要があります。
Github連携する方法はZennの公式が記事に起こしているため、こちらを参考にします。
同様にZenn CLIも導入する必要があります。
導入することによりローカルエディタで記事の作成・編集が可能になります。
こちらもZenn公式から記事が出ているので参考にしましょう。
今回できるようになること
例えば以下のような文章をリモートリポジトリへプッシュしてみます。
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-comments
は textlint-rule-preset-ja-technical-writing
と併せて利用することを想定されているfilter(例外を明示できる)ルールのプラグインです。Zennの記事ではtextlintでエラーになる例外的な文章を書くことがあります。filter設定をすることで明示的にtextlintを無視できます。
textlint-rule-preset-ja-spacing
textlint-rule-preset-ja-spacing
は「半角文字と全角文字の間にスペースを入れるか」や「インラインコードの周りにスペースを入れるか」といったスペースに関するルールのプラグインです。
textlintrcでルールの詳細設定
.textlintrcファイルでルールの詳細な有効無効設定ができます。
ディレクトリ直下に .textlintrc
ファイルを作成し以下を記述します。
filters:
comments: true
rules:
preset-ja-technical-writing:
no-exclamation-question-mark: false
max-kanji-continuous-len: false
sentence-length:
max: 120
preset-ja-spacing:
ja-space-around-code:
before: true
after: true
package.jsonの設定
ローカルでtextlintを実行できるように、 package.json
のscriptに以下の記述を追加します。
articlesとbooks配下のmdファイルを対象にtextlintを実行します。
"scripts": {
"textlint": "textlint \"./{articles,books}/*.md\""
}
以下を実行するとローカルでtextlintを実行できるようになりました。
yarn textlint
実行結果の例
GithubActionsの導入
GithubActionsとは?
GithubActionsは、GitHubプラットフォームのイベントをトリガーとしてワークフローを起動できます。 GitHubが公式に提供しているCI/CDツールでワークフローの記述次第では様々なジョブを実行できます。
GithubActionsの設定を行いプッシュのたびにtextlintを実行できるようにします。
ディレクトリ直下に .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のルールをどれだけ緩めるかの見極めが重要になりそうです。
参考資料
追記
20220410.textlintrc
内に sentence-length
のルールを追加しました。
sentence-length
はデフォルトで100文字ですが、少し厳しすぎたので120文字にしました。
Discussion
構成
->校正
でしょうか?🕵️ご指摘ありがとうございます!!!
修正致しました!🙇♂️