textlintをTravis CIで動かして継続的に文章をチェックする

# [textlint](http://textlint.github.io/ "textlint")

[textlint](http://textlint.github.io/ "textlint")は自然言語をLintできるツールですが、Travis CIなどで動してPull Request/コミットごとにチェックするのも簡単です。

## Travis CIでのLint

サンプルリポジトリは以下に置いてあります。

- [azu/textlint-travis-ci-demo: textlint with Travis CI demo repository](https://github.com/azu/textlint-travis-ci-demo "azu/textlint-travis-ci-demo: textlint with Travis CI demo repository")

Lintにひっかかる文章があるので、CIがFailしています [![Build Status](https://travis-ci.org/azu/textlint-travis-ci-demo.svg?branch=master)](https://travis-ci.org/azu/textlint-travis-ci-demo)

textlintの導入方法は色々あるので、以下などを参考にしてください。

- [Getting Started with textlint](https://github.com/textlint/textlint/blob/master/docs/getting-started.md "Getting Started with textlint")
- [textlintで日本語の文章をチェックする | Web Scratch](http://efcl.info/2015/09/10/introduce-textlint/)
- [miy4/docker-textlint: Docker container with textlint.](https://github.com/miy4/docker-textlint)
- [Ubuntu 15.04でtextlint - メモ](http://mickey-happygolucky.hatenablog.com/entry/2016/05/22/141054)

## インストール

textlintはJavaScriptで動作/拡張するので[Node.js](https://nodejs.org/en/ "Node.js")が必要です。

- [Node.js / npmをインストールする（for Windows） - Qiita](http://qiita.com/krtbk1d/items/9001ae194571feb63a5e)
- [MacにNode.js環境を作る(nodebrew) - Qiita](http://qiita.com/saekis/items/d580d1c2ae4f32a6ae99)

### textlintとルールをインストール

まずtextlintといくつかルールをインストールします。

textlintのルールは [Collection of textlint rule · textlint/textlint Wiki](https://github.com/textlint/textlint/wiki/Collection-of-textlint-rule "Collection of textlint rule · textlint/textlint Wiki") にまとめられています。

```bash

npm init
# 適当にEnterしてれば package.json が作成される
npm install -D textlint textlint-rule-common-misspellings textlint-rule-preset-japanese
# textlintとルールをインストール
$(npm bin)/textlint --init
# .textlintrc ファイルが作成される
```

### `.textlintrc` の設定

`$(npm bin)/textlint --init` または 普通に `.textlintrc` を作成し、次のように使うルールを設定します。

```json
{
  "rules": {
    "common-misspellings": true,
    "preset-japanese": true
  }
}
```

これで２つのルールが有効化されます。

### package.jsonにコマンドを設定

package.jsonの`scripts`に`"textlint": "textlint -f pretty-error docs/"`を追加します。
このように設定すると `$ npm run textlint` で `docs/` ディレクトリをtextlintでチェックすることができます。

```json
{
  "private": true,
  "scripts": {
    "textlint": "textlint -f pretty-error docs/"
  },
  "devDependencies": {
    "textlint": "^6.8.0",
    "textlint-rule-common-misspellings": "^1.0.1",
    "textlint-rule-preset-japanese": "^1.3.0"
  }
}
```

**実行例**

[docs/](https://github.com/azu/textlint-travis-ci-demo/tree/master/docs) に適当なMarkdownファイルなどを入れて実行してみます。

```bash
$ npm run textlint

> @ textlint /Users/azu/.ghq/github.com/azu/textlint-travis-ci-demo
> textlint -f pretty-error docs/

preset-japanese/no-doubled-joshi: 一文に二回以上利用されている助詞 "は" がみつかりました。
/Users/azu/.ghq/github.com/azu/textlint-travis-ci-demo/docs/README.ja.md:3:13
                                v
    2.
    3. これは誤解されやすい表現は含んでいます。
    4.
                                ^

✓ common-misspellings: This is a commonly misspelled word. Correct it to contains
/Users/azu/.ghq/github.com/azu/textlint-travis-ci-demo/docs/README.md:3:4
          v
    2.
    3. It containes miss-leading word.
    4.
          ^

✖ 2 problems (2 errors, 0 warnings)
✓ 1 fixable problem.
Try to run: $ textlint --fix [file]
```

## Travis CIの設定

作成したリポジトリをGitHubにpushしておき、次はTravis CIから実行できるように設定します。

`travis` コマンドを使えると楽なので、次のようにインストールします。

```bash
gem install travis
```

- [travis-ci/travis.rb: Travis CI Client (CLI and Ruby library)](https://github.com/travis-ci/travis.rb "travis-ci/travis.rb: Travis CI Client (CLI and Ruby library)")

### Travis CIの有効化

`travis init node.js` を実行すると、Travis CIが有効化され、`.travis.yml`が作成されます。

```
$ travis init node.js
```

### `.travis.yml` の設定

`travis init`で生成されるNode.jsのバージョン指定は古いので、node_js: "stable"と最新を使うようにします。
そして、次のように`script`でtextlintを実行するように設定します。

```yaml
sudo: false
language: node_js
node_js: "stable"
script:
  - npm run textlint
```

これでpushするたびにTravis CIで文章のチェックが走るようになります。


![textlint-travis-ci-demo - Travis CI 2016-05-24 10-25-17.png](https://qiita-image-store.s3.amazonaws.com/0/734/f0affd81-a92a-3531-3db6-1bf31ade29b4.png)

手元でリアルタイムにチェックしたい場合はエディタ連携を使うと、[Atom](https://github.com/1000ch/linter-textlint "linter-textlint")や[SublimeText](https://github.com/joeybaker/sublimelinter-textlint "Sublime")、[Vim](https://github.com/scrooloose/syntastic)などで動作します。

- [Integraion textlint](https://github.com/textlint/textlint#use-with-xxx)

さらに発展させて、Pull RequestのレビューコメントしてLint結果を出したり、カバレッジ?を取ったりもできます。

- [jser/jser.github.ioの記事をpull request時にLintする仕組み | Web Scratch](http://efcl.info/2015/03/04/linting-article/)
- [textlintで文章カバレッジレポートを継続的に見ていく | Web Scratch](http://efcl.info/2016/01/12/textlint-coverage/)


追記(2016-06-18): Travis CIからレビューコメントで書き込むようにする設定を書きました。

- [Travis CIでtextlintの指摘をPull Requestのレビューコメントとして書き込む - Qiita](http://qiita.com/azu/items/c2305f3dded3fda968e0 "Travis CIでtextlintの指摘をPull Requestのレビューコメントとして書き込む - Qiita")