UP | HOME

emacs の flycheck で textlint を利用し、日本語の自動校正を行う

目次

1 目的

textlint を emacs の flycheck で利用し、日本語の文章をチェックするよう設定する。

Screenshot_from_2018-06-26_15-23-39.png

校正ルールとして以下を利用する。

  • textlint-rule-preset-japanese(入門向け日本語のプリセット)
    • 一文で使える"、"の数
    • 逆接の接続助詞「が」が、同一文中に複数回出現していないかどうか
    • 同じ接続詞で開始されていることを検出
    • 二重否定の検出
    • 二重助詞の検出
    • 一文の最大の長さ
    • ら抜き言葉の使用
    • 文の敬体(ですます調)、常体(である調)の混合をチェック
    • UTF8-MAC 濁点の検出
    • 制御文字の検出
  • textlint-rule-preset-JTF-style

2 Windows

2.1 環境

  • Windows 7/10 pro
  • nodejs 10.5.0
  • textlint 10.2.1
  • emacs 25.2.1/26.1

2.2 nodejs のインストールと設定

textlint は npm で提供されているため、nodejs をインストールする。 ここでは textlint だけのために nodejs をインストールするため、インストーラーは使用しない。 すでにインストール済みの場合、この作業は不要である。

  1. nodejsの公式 より、[other download] を選択
  2. [Windows Binary (.zip)] より、[64bit] を選択
  3. [node-v10.5.0-win-x64.zip] を適当な場所(例えば %HOME%\app\node-v10.5.0-win-x64)に展開1
  4. (オプション) 以下の手順で Proxy を設定する

    PS > cd $Env:HOME\app\node-v10.5.0-win-x64
    PS > .\npm config set proxy http://proxy.example.com:8080
    PS > .\npm config set https-proxy https://proxy.example.com:8080
    

2.3 textlint のインストールと設定 2

  1. textlint をインストール (ちょっと時間かかる)

    PS > .\npm install -g textlint
    
  2. ルールプリセットのインストール (ちょっと時間かかる)3, 4

    PS > .\npm install -g textlint textlint-rule-preset-japanese textlint-rule-preset-jtf-style
    
  3. 設定ファイルを作成

    PS > cd $Env:HOME
    PS > .\app\node-v10.5.0-win-x64\textlint --init
    
  4. 作成された設定ファイル [~/.textlintrc] を開き、以下のように編集

    {
        "rules": {
            "preset-japanese": true,
            "preset-jtf-style": true    
        }
    }
    
  5. テスト用の test.md を utf-8 で以下のように作成5, 6

    我輩は猫である。
    この文章を校正してください、お願いします, ダメ?、そこをなんとか、して欲しいところです
    
  6. テストを実行

    PS > .\app\node-v10.5.0-win-x64\textlint --version
    v10.2.1
    PS > .\app\node-v10.5.0-win-x64\textlint test.md
    
    HOME\test.md
    1:5   error    本文: "である"調 と "ですます"調 が混在 => "である。" がである調
          Total:
          である  : 1
          ですます: 1                                                                                                   preset-japanese/no-mix-dearu-desumasu
    2:21  ✓ error  句読点には全角の「、」と「。」を使います。和文の句読点としてピリオド(.)とカンマ(,)を使用しません。  preset-jtf-style/1.2.1.句点(。)と読点(、)
    2:25  ✓ error  疑問符(?)を使用する場合は「全角」で表記します。                                                    preset-jtf-style/4.2.2.疑問符(?)
    
    ✖ 3 problems (3 errors, 0 warnings)
    ✓ 2 fixable problems.
    Try to run: $ textlint --fix [file]
    

2.4 emacs の設定

init.el を以下のように設定する。

;; add PATH
(setenv "PATH"
  (concat
   "~/app/node-v10.5.0-win-x64;"

   (getenv "PATH")))
(setq exec-path (parse-colon-path (getenv "PATH")))

;; flycheck for textlint
(require 'flycheck)
(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))

(add-to-list 'flycheck-checkers 'textlint)
(add-hook 'markdown-mode-hook 'flycheck-mode)

3 Linux (Debian)

3.1 環境

  • debian 9.4
  • nodejs 10.5.0
  • textlint 10.2.1
  • emacs 25.1.1

3.2 nodejs のインストールと設定

textlint は npm で提供されているため、nodejs をインストールする。 Debian Stretch で提供されている nodejs ではバージョンが古く、npm も提供されないため、公式サイトからダウンロードしてくる必要がある。 ここでは textlint だけのために nodejs をインストールするため、パッケージは使用しない7。 すでにインストール済みの場合、この作業は不要である。

  1. nodejsの公式 より、[other download] を選択
  2. [Linux Binaries (x64)] より、[64bit] を選択
  3. [node-v10.5.0-linux-x64.tar.xz] を適当な場所(例えば ~\app\node-v10.5.0-linux-x64)に展開1
  4. (オプション) 以下の手順で Proxy を設定する

    $ cd ~/app/node-v10.5.0-linux-x64/bin
    $ ./node npm config set proxy http://proxy.example.com:8080
    $ ./node npm config set https-proxy https://proxy.example.com:8080
    

3.3 textlint のインストールと設定 2

  1. textlint をインストール (ちょっと時間かかる)

    $ ./node npm install -g textlint
    
  2. ルールプリセットのインストール (ちょっと時間かかる3)

    $ ./node npm install -g textlint-rule-preset-japanese textlint-rule-preset-jtf-style
    
  3. 設定ファイルを作成

    $ cd ~
    $ ./app/node-v10.5.0-linux-x64/bin/node ./app/node-v10.5.0-linux-x64/bin/textlint --init
    
  4. 作成された設定ファイル [~/.textlintrc] を開き、以下のように編集

    {
        "rules": {
            "preset-japanese": true,
            "preset-jtf-style": true    
        }
    }
    
  5. テスト用の test.md を utf-8 で以下のように作成5, 6

    我輩は猫である。
    この文章を校正してください、お願いします, ダメ?、そこをなんとか、して欲しいところです
    
  6. テストを実行

      $ ./app/node-v10.5.0-linux-x64/bin/node ./app/node-v10.5.0-linux-x64/bin/textlint --version
      v10.2.1
      $ ./app/node-v10.5.0-linux-x64/bin/node ./app/node-v10.5.0-linux-x64/bin/textlint test.md
    
      /home/clothoid/test.md
      1:5   error    本文を敬体(ですます調)に統一して下さい。
             本文の文体は、敬体(ですます調)あるいは常体(である調)のどちらかで統一します。
             "である。"が常体(である調)です。                                               preset-jtf-style/1.1.1.本文
      1:5   error    本文: "である"調 と "ですます"調 が混在 => "である。" がである調
    
        Total:
        である  : 1
        ですます: 1                                                                             preset-japanese/no-mix-dearu-desumasu
    2:21  ✓ error  全角のピリオドとカンマは使用しません。                                      preset-jtf-style/1.2.2.ピリオド(.)とカンマ(,)
    2:24  ✓ error  疑問符(?)を使用する場合は「全角」で表記します。                            preset-jtf-style/4.2.2.疑問符(?)
    
      ✖ 4 problems (4 errors, 0 warnings)
      ✓ 2 fixable problems.
      Try to run: $ textlint --fix [file]
    
  7. PATH の追加

    $ export PATH=$PATH:~/app/node-v10.5.0-linux-x64/bin/
    

3.4 emacs の設定

init.el を以下のように設定する。

;; flycheck for textlint
(require 'flycheck)
(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))

(add-to-list 'flycheck-checkers 'textlint)
(add-hook 'markdown-mode-hook 'flycheck-mode)

4 やりたいけど、分からないこと

  • org-mode への対応8
  • "You must install peer dependencies yourself" と出る理由への対処(nodejs インストーラー版やパッケージでも同じ)
  • Windows と debian で textlint の出力結果が微妙に違う理由への対処
  • PATH を init.el に設定する方法(現在は .bashrc に書いて exec-path-from-shell.el で対処)

5 参考

脚注:

1

Windows の場合、いわゆる"ホームディレクトリ"は環境変数 HOME で指定できる

2

node.js の package.json があるプロジェクトなら –save-dev とかでインストールして使うことが推奨されている

3

textlint だけでは校正ルールが入っていない

4

インストール中に以下のワーニングが出るが無視して大丈夫っぽい

npm WARN textlint-rule-preset-jtf-style@2.3.1 requires a peer of textlint@>= 5.6.0 but none is installed. You must install peer dependencies yourself.
npm WARN textlint-rule-prh@5.0.1 requires a peer of textlint@>= 5.5.0 but none is installed. You must install peer dependencies yourself.
npm WARN textlint-rule-prh@5.0.1 requires a peer of textlint@>= 5.5.0 but none is installed. You must install peer dependencies yourself.
5

cp932 だと動かなかった

6

拡張子は .md か .txt じゃないとダメ

7

パッケージマネージャーを使用したインストール方法はこちら

8

せめて、.org の拡張子で .md の textlint を動かしたい

著者: clothoid

Created: 2022-08-27 Sat 17:03

Validate