JavaScript
CI
TravisCI
textlint

reviewdogを使ってtextlintの結果をPull Requestに書き込む方法

More than 1 year has passed since last update.

この記事は、textlintのチェックでエラーとなった結果を、Pull Requestのレビューコメントとして書く設定をする手順をまとめたものです。

textlintを使っているCI環境に数行追加する程度で、次のようにPull Requestのコメントに指摘内容が自動で書き込めるようになります。

textlint-reviewdog-example 2017-02-10 23-23-17

reviewdogを使うことで、CIからレビューコメントとしてLintの結果を書き込むことができます。

CIでLintがエラーとなった場合、CIの画面までエラーを見に行く必要があって面倒です。
reviewdogを使うことで、PRの画面上にLintのエラーが表示されるので手間が省けて便利です。

基本的には次の記事と同様です。

textlintとは

textlintはNode.jsで書かれた拡張可能な自然言語のLintツールです。
ESLintのようにルールをプラグインとしてインストールし、MarkdownやText、Re:VIEWなどといったファイルを対象にLintを行えます。

Lintするだけでなく--fixで自動修正することも一部ルールでは対応しています。
textlint-rule-no-dead-linkを使ってリンク切れを見つけたり、textlint-rule-terminologytextlint-rule-prhを使ってプロジェクトに沿った辞書を作ったり、技術文書向けのtextlintルールプリセットなどもあります。

サンプルプロジェクト

この記事で作成したサンプルプロジェクトは次のようになっています。

textlintでのテストをTravis CIで動かし、reviewdogでtextlintの結果をレビューコメントとして書き込めます。

textlintのインストール

npm init
npm install -D textlint textlint-rule-no-todo

ルールはこちらにまとめられています。

textlintの設定をする

以下のコマンドでpackage.jsonでインストールしているルール元に、.textlintrcが作成されます。

$(npm bin)/textlint --init

.textlintrc:

{
  "filters": {},
  "rules": {
    "no-todo": true
  }
}

textlintを動かす

$(npm bin)/textlint README.md

/Users/azu/.ghq/github.com/azu/textlint-reviewdog-example/README.md
  13:3  error  Found TODO: '- [ ] Write usage instructions'  no-todo

✖ 1 problem (1 error, 0 warnings)

Travis CIを設定する

基本的にtextlintESLintと互換のある--formatを持っているので、s/eslint/textlintすると大体動きます。

詳細はreviewdogのREADMEを見てみてください。

.travis.ymlを次のように設定します。

sudo: false
language: node_js
node_js: "stable"
env:
  - REVIEWDOG_VERSION=0.9.5
install:
  # reviewdogのバイナリを落としてパスを通す
  - mkdir -p ~/bin/ && export export PATH="~/bin/:$PATH"
  - curl -fSL https://github.com/haya14busa/reviewdog/releases/download/$REVIEWDOG_VERSION/reviewdog_linux_amd64 -o ~/bin/reviewdog && chmod +x ~/bin/reviewdog
  - npm install
script:
  # ここではtextlintでチェックしてるだけ
  - $(npm bin)/textlint README.md
after_failure:
  # テストが落ちた = textlintで見つかるエラーがある
  # PRの時のみreviewdogでレビューコメントを書き込む
  - test $TRAVIS_PULL_REQUEST && $(npm bin)/textlint -f checkstyle README.md | reviewdog -f=checkstyle -name="textlint" -ci="travis"

REVIEWDOG_GITHUB_API_TOKENを設定

reviewdogでは、GitHubのPull Requestに書き込むためにGitHubのAPI Tokenが必要です。

New personal access tokenからrepoに権限を付けたTokenを発行します。

repo

そして、Travis CIの設定に秘密の環境変数としてREVIEWDOG_GITHUB_API_TOKEN=<token>を設定します。

ウェブ上の画面やtravisコマンドから環境変数を設定できます。

travis env set REVIEWDOG_GITHUB_API_TOKEN 作ったトークン

設定できたかは、Travis CIのサイト上や次のコマンドで確認することができます。

$ travis env list
# environment variables for azu/textlint-reviewdog-example
REVIEWDOG_GITHUB_API_TOKEN=[secure]

これでtextlintで文章をチェックして、Lint結果にエラーがあるなら、そのPull Requestにレビューコメントとして書き込まれます。
書き込みするアカウントはREVIEWDOG_GITHUB_API_TOKENで設定したTokenの持ち主のアカウントになります。

Pull Requestを出してテストする

実際にPull Requestを出してreviewdogで怒られている様子を次で見ることができます。

textlint-reviewdog-example 2017-02-10 23-23-17

おわり

reviewdogを使ってTravis CIから指摘内容を書き込む方法を紹介しました。

基本的にはSaddlerpronto-textlintなどを使った方法とそこまで変わらないと思います。

reviewdogはGolang製でバイナリをダウンロードするだけで良いので、依存がシンプルで分かりやすいかもしれないですね。

Circle CIでも同じことができます。
reviewdogの-ci引数が異なる程度の違いです。