Posted at

textlintのdocker imageを作ってgitlab-ciでCIする

More than 1 year has passed since last update.


はじめに

日本語が苦手なみなさんこんにちは。

開発ドキュメントもgithub/gitlabで管理されているひとも多いでしょう。うちのチームでもドキュメントレビューをgitlabのmerge requestで実施しています。

ただ、そういったレビューをしている中、隣の新人くんから「日本語の指摘が多い。。。」「自動検出したい。。。」という声が聞こえてきたので、textlintを導入してみました。


textlintとは

nodejs製の文章校正ツールです。

textlint/textlint


どうやって使うのか

Docker imageを作りました。

https://github.com/tk117/docker-textlint

referenceにあるように参考にさせていただき、ほぼ同じようなものを作りました。DockerHubを使う練習がてら作ってみました。しかし便利ですね、DockerHubは。。。Dockerあればどこでも同じことができる。

Docker環境がある方は以下の要領で簡単に使えます。

$ git clone <some repository>

$ cd <some repository>
$ docker run -v $(pwd):/data -w /data tk117/docker-textlint textlint <your file>

ただし、.textlintrcファイルがある場所で実行してください。このファイルがtextlintでどのルールを採用するかが書かれた設定ファイルです。後でciで使うためにもリポジトリにコミットしておくとよいでしょう。


.textlintrc

{

"rules": {
"preset-ja-technical-writing": {
"no-exclamation-question-mark": false,
},
"preset-jtf-style": true,
"spellcheck-tech-word": true
}
}

エラーがなければ何も表示されません。


エラー例


sample.md

この文章はsampleです。

確かに、sampleですが、サンプルなのですが、あえてミスをして、警告をもらうようにしています


上記の文章を実行すると、このような警告が行われます。

# docker run -v $(pwd):/data -w /data tk117/docker-textlint textlint sample.md 

/work/sample.md
4:13 error 文中に逆接の接続助詞 "が" が二回以上使われています。 preset-ja-technical-writing/no-doubled-conjunctive-particle-ga
4:24 error 一つの文で"、"を3つ以上使用しています preset-ja-technical-writing/max-ten
4:47 ✓ error 文末が"。"で終わっていません。 preset-ja-technical-writing/ja-no-mixed-period

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

ちゃんと怒ってくれる!


今回採用したルール

まずは少なくはじめようと思い、以下の2つですね。

--fixで自動修正してくれるのはとてもうれしいですね。


CIに組み込む

うっかりルール違反したままpushしてしまったときのために、継続的にテストしたいですよね。

今回はgitlab-ciを使いました。


.gitlab-ci.yml

stages:

- lint

textlint:
image: tk117/docker-textlint
stage: lint
script:
- textlint <target path>
tags:
- sample-project


runner登録時にtagをつけたらそのtagを指定してください。簡単ですね!

ディレクトリ構成がキモになりますね。全部がドキュメントのプロジェクトであれば全部対象で良さそうですが、開発向け設計書の他にいろいろまとめて格納している場合はどういった運用になるか考える必要がありそうです。

対象が増えるたび.gitlab-ci.ymlを更新しないといけないのはイヤですね。そうしなくて済むようなディレクトリ構成にすべきだと思います。


エディタ

ローカルでdockerで簡単に実行できるとはいえ、dockerなんてしらなーい!ってひともいますよね。

Atom, sublime, vimにプラグインが用意されているようです。

参考:textlint/textlint:Editors


おわりに

CIに組み込むことで過去のドキュメントも再帰的にテストができます。lintを通っていない文章はmergeできないようにしてもいいでしょう。

まだ使い始めたばかりなので、今後もたくさん使ってプロジェクトに合ったルールを採用していこうと思います。contributionもできたらいいな。