GitLab CI/CD と Textlint で Markdown 形式の技術文書を自動的に校正する

この記事のまとめ:
  • 文書校正ツールの textlint とそのプラグインの概要を紹介します。
  • textlint を使える Dockerfile と GitLab CI のサンプルコードを紹介します
背景

GitLab CI/CD が簡単に使えて便利だということにいまさらながらに気付きまして、お試し的に身近なところの自動化をやってみようとという試みのひとつです。それとは別に、ちゃんと文書として何かを残しておく重要性を日に日に感じるようになってきました。その文書の管理に Git を使うと更新履歴も残してくれたり、共同作業も楽です。ついでに校正まで手軽にできたら便利だなということで、GitLab CI/CD と Textlint で校正をやってみようと至りました。ついでにこのブログの文書も校正をちゃんとしていなかったのでやっていきます。

文書校正ツール

今回使うメインの文書校正ツールは textlint です。textlint は主に日本語用のプレーンテキストと Markdown 用の静的解析ツールです。蛇足として、基本的には上記のフォーマットのファイル用の文書校正ツールなのですが、カスタムプラグインによって LaTeX などそれら以外のさまざまなフォーマットにも対応できるようです。

さらに、prh (proofread-helper) というツールも使います。 prh (proofread-helper) は公式には「校正を手伝ってくれるライブラリー」とざっくり説明されていますが、辞書ベースの表記ゆれを検出してくれるライブラリーです。検出したい表記ゆれの辞書を簡単に定義できるようになっています。もともとは Node.js 用のライブラリーですが、 textlint のプラグインとして textlint-rule-prh というものあります。今回は textlint をベースに使うのでこのプラグインを使います。

textlint の校正ルール

textlint は Collection of textlint rule に定義されている textlint-rule を設定することで自分好みの校正ルールを作成できます。また、それらのルールを組み合わせたプリセットもいくつか用意されているので手軽に使うにはプリセットを有効化することが手っ取り早いです。インストール方法や使用例はプリセットのページに記載されていますのでここでは割愛します。

主に技術文書向けに使うプリセットとしては次のようなものがあります。

prh 用辞書

prh 用辞書を自分で作成しなくてもいくつか準備して公開されているものがあります。まずはこういったものを適用して自分好みに修正すればよいです。公開されている辞書として次のようなものがあります。

サンプルファイル

サンプルとして用意したファイル類は私の GitLab リポジトリーである次のリンク先においておきました。

GitLab CI を使う前提ですので、Docker コンテナーで textlint を動かします。そのための textlint/Dockerfile やローカルでの動作確認を行うための docker-compose.yml が含まれています。

test-xxx のディレクトリーにはテスト用に次の設定で動かすためのファイルがそれぞれのディレクトリーに含まれています。

また、テスト用の文章として、Wikipedia の「校正」ページに記載されている概要の文章を test-xxx/fail.md として保存しています。

サンプルファイルの実行とテスト結果

それぞれローカルでテストするコマンドとその結果は次のようになります。なお、次の結果はそれぞれ校正チェックをするだけの実行ですが、--fix オプションをつけると、文字ゆらぎなどの一意に修正できるエラーについては自動で修正してくれます。

$ docker-compose run --rm textlint-ja-technical-writing textlint fail.md
/work/fail.md
3:52   error  一つの文で"、"を3つ以上使用しています                                    ja-technical-writing/max-ten
3:155  error  一つの文で"、"を3つ以上使用しています                                    ja-technical-writing/max-ten
3:190  error  Line 3 sentence length(124) exceeds the maximum sentence length of 100.
Over 24 characters  ja-technical-writing/sentence-length
3:219  error  一文に二回以上利用されている助詞 "か" がみつかりました。                 ja-technical-writing/no-doubled-joshi
3:261  error  一つの文で"、"を3つ以上使用しています                                    ja-technical-writing/max-ten
3:347  error  一文に二回以上利用されている助詞 "が" がみつかりました。                 ja-technical-writing/no-doubled-joshi
7:44   error  一つの文で"、"を3つ以上使用しています                                    ja-technical-writing/max-ten
7:150  error  漢字が7つ以上連続しています: 劇作家福地桜痴                              ja-technical-writing/max-kanji-continuous-len
✖ 8 problems (8 errors, 0 warnings)
$ docker-compose run --rm textlint-ja-engineering-paper textlint fail.md
/work/fail.md
1:4    ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
1:15   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
1:29   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
1:61   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
1:87   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
1:119  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
1:123  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
1:157  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
1:185  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
1:209  ✓ error  文末が"."で終わっていません。                                           ja-technical-writing/ja-no-mixed-period
1:209  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:7    ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:23   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:52   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:52   error    一つの文で"、"を3つ以上使用しています                                    ja-technical-writing/max-ten
3:73   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:79   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:86   ✓ error  かっこの外側、内側ともにスペースを入れません。                           jtf-style/3.3.かっこ類と隣接する文字の間のスペースの有無
3:109  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:112  ✓ error  原則として、全角文字と半角文字の間にスペースを入れません。               jtf-style/3.1.1.全角文字と半角文字の間
3:119  ✓ error  原則として、全角文字と半角文字の間にスペースを入れません。               jtf-style/3.1.1.全角文字と半角文字の間
3:122  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:137  ✓ error  喩え => たとえ                                                           ja-engineering-paper/prh
3:142  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:155  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:155  error    一つの文で"、"を3つ以上使用しています                                    ja-technical-writing/max-ten
3:164  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:189  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:190  error    Line 3 sentence length(124) exceeds the maximum sentence length of 100.
Over 24 characters  japanese/sentence-length
3:194  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:219  error    一文に二回以上利用されている助詞 "か" がみつかりました。                 ja-technical-writing/no-doubled-joshi
3:235  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:261  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:261  error    一つの文で"、"を3つ以上使用しています                                    ja-technical-writing/max-ten
3:313  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:319  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:347  error    一文に二回以上利用されている助詞 "が" がみつかりました。                 ja-technical-writing/no-doubled-joshi
3:353  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:363  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:384  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
3:412  ✓ error  文末が"."で終わっていません。                                           ja-technical-writing/ja-no-mixed-period
3:412  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
5:18   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
5:30   ✓ error  かたち => 形                                                             ja-engineering-paper/prh
5:38   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
5:55   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
5:71   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
5:75   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
5:82   ✓ error  ひらがなで表記したほうが読みやすい形式名詞: 時 => とき                   ja-engineering-paper/ja-hiragana-keishikimeishi
5:95   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
5:111  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
5:119  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
5:147  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
5:160  ✓ error  の他の => のほかの                                                       ja-engineering-paper/prh
5:180  ✓ error  文末が"."で終わっていません。                                           ja-technical-writing/ja-no-mixed-period
5:180  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
7:4    ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
7:19   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
7:44   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
7:44   error    一つの文で"、"を3つ以上使用しています                                    ja-technical-writing/max-ten
7:60   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
7:88   ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
7:111  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
7:139  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
7:144  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
7:167  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
7:186  ✓ error  頃 => ころ                                                               ja-engineering-paper/prh
7:187  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
7:225  ✓ error  句読点には「,」と「.」を使用してください.                             ja-engineering-paper/unify-kuten-and-touten
✖ 69 problems (69 errors, 0 warnings)
✓ 62 fixable problems.
Try to run: $ textlint --fix [file]
  • prh に上で紹介した辞書を使ったときの結果
$ docker-compose run --rm textlint-prh textlint fail.md
/work/fail.md
3:137  ✓ error  喩え => たとえ      prh
5:30   ✓ error  かたち => 形        prh
5:160  ✓ error  の他の => のほかの  prh
7:186  ✓ error  頃 => ころ          prh
✖ 4 problems (4 errors, 0 warnings)
✓ 4 fixable problems.
Try to run: $ textlint --fix [file]
GitLab CI

GitLab CI を動かすための .gitlab-ci.yml では、次の3つを行います。

  1. textlint そのもののテスト textlint-test
  2. textlint 用の Docker コンテナーのビルドを行い、同プロジェクトの container registry に登録 docker-push
  3. ビルドしたコンテナーを使って textlint のテスト docker-textlint-test

文書の校正だけを行うのであれば 3. の記述をコピーして使いまわせばよいです。

参考記事

今回は以上です。 最後まで読んでいただき、ありがとうございます。

コメント

このブログの人気の投稿

LinuxでのnVidia GPUのオーバークロック・電力チューニング方法