やったこと

GitHub上でMarkdown等のテキストファイルの変更を含むPull Requestを作ると、自動でそのテキストの内容をチェックして下画像のようなレビューコメントを書いてくれる仕組みをGitHub Actions上に作りました。

中身的には、textlintDangerdanger-textlintを組み合わせたものを、GitHub ActionsでPull Requestが作成、または変更されるたびに実行するという構成になっています。そのために、Dangerからtextlintを実行するdanger-textlint-actionsというGitHub Actionを作成しました。

レビューコメントが書かれている様子

レビューコメントが書かれている様子

実際にこの仕組を構築したサンプルリポジトリも作ったので、参考にしてみて下さい。

セットアップの仕方

今回作成したdanger-textlint-actionsを使って自動レビューを実現するには、2つのステップが必要です。

  1. textlintのセットアップ
  2. GitHub Actionsのワークフローの作成

textlintのセットアップ

textlintを使うには、package.jsonDangerfile.textlintrcの3つのファイルが必要です。自動レビューを設定したいリポジトリにこの3つのファイルを追加します。

package.json

今回の例では、textlintのルールとしてtextlint-rule-preset-japaneseを使います。

{
  "name": "danger-textlint-actions-demo",
  "version": "1.0.0",
  "dependencies": {
    "textlint": "^11.2.3",
    "textlint-rule-preset-japanese": "^2.0.1"
  }
}

Dangerfile

Dangerからtextlintを実行するため、Dangerの設定ファイルもおいておく必要があります。textlint.lintでtextlintを実行します。

textlint.lint

.textlint

textlintの設定ファイルです。今回の例ではpackage.jsonで宣言したpreset-japaneseルールを使うように設定します。

{
  "filters": {},
  "rules": {
    "preset-japanese": true
  }
}

GitHub Actionsのワークフローの作成

ここまででお膳立てが出来たので、実際に自動レビューを行うワークフローを作成します。GitHub Actionsのワークフローを作成するには、GitHub Actionsが有効になっているリポジトリで.github/main.workflowという名前で下記の内容のファイルを作ります。

このワークフローでは、まずはじめにtextlintの実行環境を作るためにnpm installを行い、その後今回作成したdanger-textlint-actionsを使って実際にtextlintを実行します。

workflow "textlint" {
  resolves = "danger"
  on = "pull_request"
}

action "npm install" {
  uses = "actions/npm@c555744"
  args = "install"
}

action "danger" {
  needs = ["npm install"]
  uses = "yuichielectric/danger-textlint-actions@master"
  secrets = ["GITHUB_TOKEN"]
}

これでPull Requestイベントをトリガーにして、Dangerを使ってtextlintのチェック内容をPull Request上にコメントしてくれるようになります!

まとめ

Danger、textlint、GitHub Actionsを組み合わせて、テキストファイルに対する自動レビューの仕組みを作りました。textlintは様々なルールを組み合わせることができるので、実際に使う際には利用するプロジェクトに応じてカスタムしてみて下さい。

こういった仕組みをGitHub Actionsで構築することで、他のプロジェクトで自動レビューをやりたいとなったときにもファイルを設定ファイルをコピーするだけで簡単にワークフローをセットアップできて嬉しいですね。