textlintの設定をアップデートした

前回の記事には、珍しくたくさんのブックマークが付いていました。

note103.hateblo.jp

あんなに長文だったのに……。励みになりました。ご紹介くださった方々、ありがとうございます。

さて、今回はそれ以降の知見として、いくつかtextlint への理解が深まり、それにともない設定の構成をあらためた部分がいくつかあったので、その情報を共有しておきたいと思います。

.textlintrc の設置場所を変更

今回自分にとって一番大きな変更はこれで、前回の段階ではマシン内のどこからでも(どのファイルに対しても)利用できるよう、各種のルールを事前に設定・記述しておく「.textlintrc」をホームディレクトリに置いていましたが、これをプロジェクトごと、リポジトリごと、といったかたちで個別の置き場にそのつど作る方式に変更しました。

具体的には、以前から .textlintrc の元になるマスターファイルは任意のドットファイル置き場に置いてあったので、

# example
$ /path/to/dotfiles/textlintrc

bashrcに以下のようにエイリアスを入れておいて、手軽にカレントディレクトリへコピーできるようにしています。

# .bashrc
alias tt="cp /path/to/dotfiles/textlintrc ./.textlintrc"

またこの際、「あれ、このプロジェクトに .textlintrc って入れてたっけ・・」などとわざわざ確認しなくてもすぐに状況を把握できるよう、以下のような関数も設定しておいて……

# .bashrc
function tlo {
    if [ -e ".textlintrc" ] ; then
        vi -g .textlintrc
    else
        echo "No files. If you need it, type 'tt'."
    fi
}

とりあえずターミナルで「tlo」と叩いて、もしファイルがあればオープンし、なければ「今そのファイルはないので、ほしければ生成用のコマンド(tt)を叩きましょう」と教えてくれるようにしました。

変更した理由

以前までは、.textlintrc への記述を通して textlint-rule-prh のための辞書.yml の場所を指定できる印象が強かったので、「プロジェクトごとに配置するならその辞書.ymlの方だろう」と考えていましたが、しばらく使ってみると、textlint-rule-prh は汎用的なツールというより、特定の用語を対象とした特化的なツールという側面のほうが大きく感じられたので、より柔軟に幅広く校正ルールを設定するには .textlintrc で様々なルールを組み合わせたほうが手っ取り早いと思うようになりました。

となれば、これはたったひとつのそれを使い回すのではなく、プロジェクトごとに配置して、それぞれのためにカスタマイズするほうが合理的だと思われ、上記のような設定に至りました。

textlint-rule-prh の辞書.ymlの優先度

逆にというか、textlint-rule-prh の辞書.ymlのほうはこれまでどおり、基本的には一つの場所にマスターファイルを置いておいて、各textlintrcからは絶対パスでそれを直接指定し、どこからでも同じ辞書.ymlを使えるようにしています。

数日これで運用した感想としては、今のところはこれで不便はないというか、この辞書.ymlをプロジェクトごとに変える必要はあまりないかなと感じています。

また、.textlintrc は用途に応じてルールを組み合わせたい場合が少なくないため、プロジェクトごとに配置することは妥当だと思えますが、辞書.yml の方は「育てていく」感じというか、けっこう記述量が多くなりがちなだけに、秘伝のタレ的にそれをメンテナンスしていく感じのほうが使いやすいかな、という印象もあります。

とはいえ、せっかくこの辞書.yml もプロジェクトごとに利用しやすくなっているので、それを生かせるよう、上記の .textlintrc と同様のコマンドを設定して、いつでもマスターファイルからカレントディレクトリへコピーできるようにしてあります。

# .bashrc
# 'dio'でカレントディレクトリに辞書があるかをチェックし、あればファイル・オープン、なければ生成用コマンドを知らせる

function dio {
    if [ -e "dict.yml" ] ; then
        vi -g dict.yml
    else
        echo "No files. If you need it, type 'dd'."
    fi
}
alias dd="cp /path/to/dict/dict.yml ./dict.yml"

変更に際しての留意点

上記2点の変更は結果的にうまくいって、現在は大変快適に利用できていますが、最初にちょっとハマった点として、.textlintrc をホームディレクトリに置いたままだと、それ以下の階層に置かれた .textlintrc は機能しません。

よって、.textlintrc をプロジェクトごとに設置する場合は、それをプロジェクトのルート(あるいは対象のソースコードがある)ディレクトリに置きつつ、ホームディレクトリからは外しておく必要があります。

今から思えば当然というか、単純なことですが、身にしみて理解するまではちょっと時間がかかりました。

今使っている .textlintrc の公開・共有

最後に、現在使っている .textlintrc(マスターファイル)の設定を紹介しておきます。

textlintrc_2016-06-18-18-43-35.txt · GitHub

終盤の // でコメントアウトしている部分は、英文の校正用ルールです。
日本語の文章を編集しているときにこれを生かしておくと、意図しないエラーを拾うことが多いようだったので、日本語を扱うときは外しています。

まとめ・予告

今回は textlint の利用に際して必要な設定ファイル・辞書などの構成に関する現状をまとめてみました。

じつは同じ記事内に、Vim から textlint を動かした話も続ける予定だったのですが、1本にまとまっているとちょっと読みづらそうだったので、それは別の記事に分岐します。

※分岐しました。