とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

textlintを使って文書校正環境を作ってみた

仕事柄、ブログを書いたり、たまに雑誌の記事を書いたりすることがあります。 Windowsを使っていた時代は一太郎とATOKを使って、書いた文章の文書構成をしていました。

MacではATOKは動きますが、一太郎は動きません*1。その上、今のATOKはサブスクしかないのでバリバリ雑誌の記事を書いているなら元は取れますが、ブログだけだとマイナスが増える一方です。

最近のWordの文章校正機能は昔のそれと比べるとかなり良くなりました。とはいえMarkdown形式で書くことが割と多いので、わざわざWordにコピーして文書構成をしてMarkdownに落とすというのも面倒です*2

そんなあなたにtextlintがあります。早速文書校正環境を作ってみましょう!

Node.jsのインストール

textlintはNode.jsベースのソフトウェアです。 ルールもnpmでインストールできるので、まずは端末にNode.jsをインストールします。 インストール方法は次の通りです。

OSによっていくつかの方法があるので、いずれかの方法でNode.jsをインストールします。

使い方

プロジェクトディレクトリーを作って、textlintをインストールします。

% cd ~/projects
% npm init -y  # なければ package.json を作成
% npm install --save-dev textlint

次に、必要なルールを導入します。一覧はCollection of textlint ruleにあります。 たとえばこのような感じでルールをインストールします。

% npm install --save-dev textlint-rule-no-dropping-the-ra
% npm install --save-dev textlint-rule-no-mix-dearu-desumasu
% npm install --save-dev textlint-rule-ja-kyoiku-kanji
% npm install --save-dev textlint-rule-ja-joyo-or-jinmeiyo-kanji
% npm install --save-dev textlint-rule-ja-no-orthographic-variants
% npm install --save-dev textlint-rule-incremental-headers
% npm install --save-dev textlint-rule-prefer-tari-tari

.textlintrc.jsonを作成します。このコマンドではインストール済みのルールが全て許可されるテンプレートが生成されます。

% npx textlint --init

ファイルを確認して、チェックしない場合は一時的にはfalseにするか、ルール自体をnpm uninstallコマンドで削除します。

% cat .textlintrc.json    
{
  "plugins": {},
  "filters": {},
  "rules": {
    "incremental-headers": true,
    "ja-joyo-or-jinmeiyo-kanji": true,
    "ja-kyoiku-kanji": true,
    "ja-no-orthographic-variants": true,
    "no-dropping-the-ra": true,
    "no-mix-dearu-desumasu": true,
    "prefer-tari-tari": true
  }
}

テキストファイルのチェックをしてみる

次のようなsample.txtを作ってみてください。

吾輩は猫である。名前はまだないです。
猫ですが、鼠は食べれません。

次のように実行すると、テキストファイルのチェックができます。

% npx textlint "**/*.txt"

/Users/tooyama/temp/sample.txt
  1:1   error  教育漢字ではない漢字「吾」が含まれています。                            ja-kyoiku-kanji
  1:2   error  教育漢字ではない漢字「輩」が含まれています。                            ja-kyoiku-kanji
  1:4   error  教育漢字ではない漢字「猫」が含まれています。                            ja-kyoiku-kanji
  1:5   error  本文: "である"調 と "ですます"調 が混在
=> "ですます"調 の文体に、次の "である"調 の箇所があります: "である。"
Total:
である  : 1
ですます: 1
  no-mix-dearu-desumasu
  2:1   error  教育漢字ではない漢字「猫」が含まれています。                            ja-kyoiku-kanji
  2:6   error  教育漢字ではない漢字「鼠」が含まれています。                            ja-kyoiku-kanji
  2:6   error  常用漢字でも人名用漢字でもない漢字「鼠」が含まれています。              ja-joyo-or-jinmeiyo-kanji
  2:10  error  ら抜き言葉を使用しています。                                            no-dropping-the-ra

✖ 8 problems (8 errors, 0 warnings)

テキストファイルのチェックをしてみる

次のようなsample.mdを作ってみてください。

# 吾輩は猫である 夏目漱石

### 一

吾輩は猫である。名前はまだ無いです。
猫ですが、鼠は食べれません。

次のように実行すると、markdownファイルのチェックができます。

% npx textlint "**/*.md"

/Users/tooyama/temp/sample.md
  1:3   error  教育漢字ではない漢字「吾」が含まれています。                            ja-kyoiku-kanji
  1:4   error  教育漢字ではない漢字「輩」が含まれています。                            ja-kyoiku-kanji
  1:6   error  教育漢字ではない漢字「猫」が含まれています。                            ja-kyoiku-kanji
  1:13  error  教育漢字ではない漢字「漱」が含まれています。                            ja-kyoiku-kanji
  3:1   error  #の後に###が来ています。段落は1つずつ下げてください。                  incremental-headers
  5:1   error  教育漢字ではない漢字「吾」が含まれています。                            ja-kyoiku-kanji
  5:2   error  教育漢字ではない漢字「輩」が含まれています。                            ja-kyoiku-kanji
  5:4   error  教育漢字ではない漢字「猫」が含まれています。                            ja-kyoiku-kanji
  5:5   error  本文: "である"調 と "ですます"調 が混在
=> "ですます"調 の文体に、次の "である"調 の箇所があります: "である。"
Total:
である  : 1
ですます: 1
  no-mix-dearu-desumasu
  6:1   error  教育漢字ではない漢字「猫」が含まれています。                            ja-kyoiku-kanji
  6:6   error  常用漢字でも人名用漢字でもない漢字「鼠」が含まれています。              ja-joyo-or-jinmeiyo-kanji
  6:6   error  教育漢字ではない漢字「鼠」が含まれています。                            ja-kyoiku-kanji
  6:10  error  ら抜き言葉を使用しています。                                            no-dropping-the-ra

✖ 13 problems (13 errors, 0 warnings)

まとめ

こんな感じで、非常に簡単に文書校正環境が手元の環境で動かせます。 これでGitベースで執筆している場合や、GitプロジェクトのドキュメントやREADMEなどを書く際に文書校正できるので良いですね。

ネタをわかりやすくするために「textlint-rule-ja-kyoiku-kanji」ルールを入れていますが、教育漢字のチェックをしてしまうと普段使いとしては使いづらくなるかもしれません。誰宛の文章であるかに応じてチェックすると良いと思います。

今回textlintをコマンドラインツールとして使う方法をご紹介しましたが、たとえば執筆環境をGitで管理している場合、CIツールを使ってコミットしたらtextlintでチェックしたり、textlintのチェックが通ったらたとえばファイルをPDF形式に変換したり、次のようなVSCodeの拡張機能を使ってコミットする前にローカル側でチェックしたりといった使い方もできるようです。 今回はGitHub Actionsを使う例を示していますが、CIの構成ファイルとCIツールの設定さえすれば他のCIツール、たとえばCircleCIやGitLab CIなどでも同じようなことができるようになると思います。VSCodeの拡張機能はVSCodeでコードも文書も作っている人には便利でしょうか。それ以外のエディターにもtextlintと連携する機能を有するものがあると思いますので、ぜひ探してみてはいかがでしょうか。

参考文献

*1:一応仮想マシンでWindowsを動かしてその中でという方法はあるものの、あまりやりたくないです

*2:一時期はそういうやり方もしていました