ブログにtextlintを入れてgit commit時に走るようにした

· 943 words · 2 minute read

はじめに

静的サイトジェネレータhugoを使っているブログでtypoやスペルミスを繰り返してしまっていたのでtextlintを入れることにしました。

textlintは日本語の文章校正ツールで、Markdownなどテキストのリンターとして使います。

詳しい使い方についてはcommitterである@azuさんのブログが詳しいです。


textlintの導入

textlintの初期設定はシンプルです。

$ npm init
$ npm install --save-dev textlint

$ ./node_modules/.bin/textlint --init

これで初期設定は完了です。

動作確認のためにtextlintコマンドを実行してバージョンを確認してみます。

$ textlint -v
v11.2.3

インストールされたことが確認できました。


技術文書向けのtextlintルールプリセットであるpreset-ja-technical-writingを導入します。

$ npm install textlint-rule-preset-ja-technical-writing --save-dev

.textlintrcにルールを追加します。

{
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": true
  }
}

git hookを利用してcommit時にリンターをかける

git hooksとはgit操作をフックとして他のコマンドやタスクを実行する機能です。

今回はcommit時にtextlintをかけるようにしてみます。

git initしたときに.git/hooks/pre-commit.sampleというファイルが自動的に作られているので、それをコピーして.git/hooks/pre-commitというファイルをつくります。

$ cp .git/hooks/pre-commit.sample .git/hooks/pre-commit

pushするときにlintを実行したい場合は同様の方法で.git/hooks/pre-pushをつくります。

git hooksのアクションはシェルスクリプトで書きます。 また#!/usr/bin/env rubyのように宣言することでrubyなど任意の言語で書くこともできます。

私の場合は以下のようなスクリプトを書きました。

#!/bin/sh
echo run textlint

git diff --diff-filter=ACM --cached --name-only \
| grep -E '\.md' \
| xargs -n 1 -I{} textlint {} --fix

echo finish textlint

試してみます。

$ git commmit -m "published 'ブログにtextlintを入れてgit commit時に走るようにした'"

run textlint
finish textlint
[master d876d00] textlint
 Date: Thu Apr 4 00:31:07 2019 +0900
 1 file changed, 72 insertions(+)
 create mode 100644 content/post/textlint_git_hooks.md

git commitのタイミングで対象のファイルを自動的にtextlintにかけることができました。