この記事は、textlintのチェックでエラーとなった結果を、Pull Requestのレビューコメントとして書く設定をする手順をまとめたものです。
textlintを使っているCI環境に数行追加する程度で、次のようにPull Requestのコメントに指摘内容が自動で書き込めるようになります。
reviewdogを使うことで、CIからレビューコメントとしてLintの結果を書き込むことができます。
CIでLintがエラーとなった場合、CIの画面までエラーを見に行く必要があって面倒です。
reviewdogを使うことで、PRの画面上にLintのエラーが表示されるので手間が省けて便利です。
基本的には次の記事と同様です。
- textlintをTravis CIで動かして継続的に文章をチェックする - Qiita
- Travis CIでtextlintの指摘をPull Requestのレビューコメントとして書き込む - Qiita
textlintとは
textlintはNode.jsで書かれた拡張可能な自然言語のLintツールです。
ESLintのようにルールをプラグインとしてインストールし、MarkdownやText、Re:VIEWなどといったファイルを対象にLintを行えます。
Lintするだけでなく--fix
で自動修正することも一部ルールでは対応しています。
textlint-rule-no-dead-linkを使ってリンク切れを見つけたり、textlint-rule-terminologyやtextlint-rule-prhを使ってプロジェクトに沿った辞書を作ったり、技術文書向けのtextlintルールプリセットなどもあります。
textlint with terminology and no-dead-link rules is super cool. Most of the issues can be auto fixed.https://t.co/DVouqBOMga pic.twitter.com/BQgPN7qT59
— Artem Sapegin ☕ (@iamsapegin) February 11, 2017
サンプルプロジェクト
この記事で作成したサンプルプロジェクトは次のようになっています。
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を設定する
基本的にtextlintはESLintと互換のある--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を発行します。
そして、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で怒られている様子を次で見ることができます。
おわり
reviewdogを使ってTravis CIから指摘内容を書き込む方法を紹介しました。
基本的にはSaddlerやpronto-textlintなどを使った方法とそこまで変わらないと思います。
reviewdogはGolang製でバイナリをダウンロードするだけで良いので、依存がシンプルで分かりやすいかもしれないですね。
Circle CIでも同じことができます。
reviewdogの-ci
引数が異なる程度の違いです。