コンテンツへスキップ

Emacs上でtextlintを使って日本語の校正をするには

person holding red pencil writing on white paper

手軽に日本語のチェックがしたい

商売柄、年末は大量の日本語を読んで手直しする羽目になるのだが、内容はともかく、誤字脱字やら抜き言葉、用語の揺れ程度は機械的にチェックしたいのである。Microsoft Wordのようなワープロにも若干の校正機能は付いているが貧弱だし、Just Right!のような専門ソフトウェアもあるが高価な上にプロプライエタリで、おまけにWindowsでしか使えなかったりもする。

textlintのインストール

そんなときに便利なのがtextlintだ。ルールを指定することでチェック内容を柔軟に変えることが出来、しかもクロスプラットフォーム対応なので、WindowsでもGNU/Linuxでも同じように使える。textlintはJavaScriptで書かれているので、自身のインストールはnpmを使う。大体のGNU/Linuxディストロにはnpmが入っているだろうから apt-get install npm でいけるだろう。Windowsの場合はScoopを使って scoop install npm で入れるのがおすすめである。このへんは先日書いたEmacs設定の記事でも触れた通りだ。

なおあまり推奨はされていないようだが、 -g オプションを付けてグローバルにインストールしたほうがスタンドアロンのツールとして使う分には何かと便利なように思われる。その場合、Windowsの場合は不要だが、GNU/Linuxでは /usr/local 以下へインストールすることになるので、 sudo が必要になる。

[sourcecode language=”powershell” title=””]
> npm -g install textlint
[/sourcecode]

さらに、プラグインや校正ルールをインストールする必要がある。どんなプラグインやルール・ファイルがあるかはCollection of textlint ruleに一覧がある。今回はたまたま日本語に絞っているが、英語などにも対応しているようだ。

texlint本体をグローバルでインストールした場合、これらも -g オプションをつけてインストールしなければならない。textlintは標準でMarkdownには対応しているので、Org形式やHTML形式に対応するプラグインを別途追加してある。雑な人間なので、textlint-jaの公式Githubレポジトリにあるルールはとりあえず全部インストールしてしまった。各ルールの説明も同じところにある。

[sourcecode language=”powershell” title=””]
> npm install -g textlint-ja/textlint-rule-morpheme-match \
@textlint-ja/textlint-rule-no-dropping-i \
@textlint-ja/textlint-rule-no-filler \
@textlint-ja/textlint-rule-no-insert-dropping-sa \
@textlint-ja/textlint-rule-no-insert-re \
@textlint-ja/textlint-rule-no-synonyms \
sudachi-synonyms-dictionary \
textlint-filter-rule-ja-named-entities \
textlint-plugin-html \
textlint-plugin-org \
textlint-rule-ja-joyo-or-jinmeiyo-kanji \
textlint-rule-ja-kyoiku-kanji \
textlint-rule-ja-no-abusage \
textlint-rule-ja-no-inappropriate-words \
textlint-rule-ja-no-mixed-period \
textlint-rule-ja-no-orthographic-variants \
textlint-rule-ja-no-redundant-expression \
textlint-rule-ja-no-successive-word \
textlint-rule-ja-no-weak-phrase \
textlint-rule-ja-unnatural-alphabet \
textlint-rule-max-kanji-continuous-len \
textlint-rule-max-ten \
textlint-rule-no-double-negative-ja \
textlint-rule-no-doubled-conjunction \
textlint-rule-no-doubled-conjunctive-particle-ga \
textlint-rule-no-doubled-joshi \
textlint-rule-no-dropping-the-ra \
textlint-rule-no-hankaku-kana \
textlint-rule-no-mix-dearu-desumasu \
textlint-rule-no-mixed-zenkaku-and-hankaku-alphabet \
textlint-rule-no-nfd \
textlint-rule-no-redundant-expression \
textlint-rule-prefer-tari-tari \
textlint-rule-preset-ja-spacing \
textlint-rule-preset-ja-technical-writing \
textlint-rule-preset-japanese
[/sourcecode]

表記の統一をやるソフトウェアなのにルール名が案外統一されていないのはご愛敬といったところか。

さらに、ホームディレクトリにtextlintの設定ファイルを用意する必要がある。ファイル名は .textlintrc でもよいのだが、 .textlintrc.json と拡張子までつけておくとJSONとして扱ってくれるので編集が楽である。

[sourcecode language=”javascript” title=””]
{
"plugins": ["org","html"],
"filters": {
"ja-named-entities": true
},
"rules": {
"@textlint-ja/textlint-rule-no-dropping-i": true,
"@textlint-ja/textlint-rule-no-filler": true,
"@textlint-ja/textlint-rule-no-insert-dropping-sa": true,
"@textlint-ja/textlint-rule-no-insert-re": true,
"@textlint-ja/no-synonyms": true,
"ja-joyo-or-jinmeiyo-kanji": true,
"ja-kyoiku-kanji": false,
"ja-no-abusage": true,
"ja-no-inappropriate-words": true,
"ja-no-mixed-period": true,
"ja-no-orthographic-variants": true,
"ja-no-redundant-expression": true,
"ja-no-successive-word": true,
"ja-no-weak-phrase": true,
"ja-unnatural-alphabet": true,
"max-kanji-continuous-len": true,
"max-ten": false,
"no-double-negative-ja": true,
"no-doubled-conjunctive-particle-ga": true,
"no-doubled-joshi": true,
"no-dropping-the-ra": true,
"no-mix-dearu-desumasu": true,
"no-mixed-zenkaku-and-hankaku-alphabet": true,
"no-nfd": true,
"prefer-tari-tari": true,
"preset-ja-spacing": true,
"preset-ja-technical-writing": false,
"preset-japanese": true,
"preset-jtf-style": true
}
}
[/sourcecode]

自分に必要ないルールは false を指定して無効にすれば良い。このあたりは若干の試行錯誤が必要だろう。

ここまででスタンドアロンのユーティリティとしてはすでに使えるので、

[sourcecode language=”powershell” title=””]
> textlint somejapanese.txt
[/sourcecode]

などと実行してチェックしてみるとよい。

Emacsからの利用

EmacsからはFlycheckと組み合わせてバッファ内のリアルタイム校正が出来る。先日のEmacs設定の記事で使った init.el にはすでに必要な記述が入っているので、textlintをインストールすればすぐ有効になるはずだが、ようは flycheck-define-checker の部分で、これによりtextlintの出力を受け取ってEmacsのバッファで表示している。

[sourcecode language=”emacs-lisp” title=””]
;; checker for textlint
(flycheck-define-checker textlint
"A linter for prose."
:command ("textlint" "–format" "unix" source-inplace)
:error-patterns
((warning line-start (file-name) ":" line ":" column ": "
(id (one-or-more (not (any " "))))
(message (one-or-more not-newline)
(zero-or-more "\n" (any " ") (one-or-more not-newline)))
line-end))
:modes (text-mode markdown-mode gfm-mode org-mode web-mode))
)
[/sourcecode]

うまく行けばこんな風に表示される。

Emacs上でtextlintを使う様子

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください