https://buildersbox.corp-sansan.com/entry/2022/04/18/110000
Eightでフロントエンドエンジニアをしている青山です。
今回はEightのCI環境にtextlintという文書校正ツールを導入してみたので、その経緯や実施した内容をお伝えします。 サービスを複数抱えているなど、文書管理が煩雑になってチェックが大変、といった場合に活用できるかもしれません。
Eight(およびSansanの各プロダクト)では、社内のslackでフィードバックを受け取るチャンネルが存在しています。活発に社内外からのフィードバックが投稿されていますが、ある日の投稿で以下のようなものがありました。
今日届いたお知らせの文言に「副業」というのが使われてました。
Eightでは「副業」使わずに「複業」とする、みたいな方針だった気がしたので、気になりました。
実際このフィードバックが上がった直後には、素早く修正リリースが行われたのですが、初期リリース時にはどうやら担当者のチェックフローが漏れてしまったようでした。
目視によるチェックは負荷が大きいですし、当然人間ならミスもします。こういった場合には、そう、自動化です。 というわけで、textlintをCIに組み込むことを思いつき、作業を進めていきました。
textlintによるチェックを導入したいとひとことに言っても、適用内容やその範囲など、やりたいことを整理する必要があります。 今回は以下のような内容を検討しました。
これらを実現するに当たって、textlintのカスタマイズ性やルールをまとめて公開できる機能が適していると考えました。*1
要件にそって、社内用のtextlintルールセットとして@eightcard/textlint-rule-preset-eight
を作成し、各プロダクトに適用してきました。 まずは@eightcard/textlint-rule-preset-eight
そのものについてです。
textlint-rule-preset-japaneseという日本語文書用のルール定義を参考に、以下のようなコードを作成しました。ほとんどtextlint-rule-preset-japaneseを流用させてもらい、後述するprhルールを追加しているというかたちです。
"use strict";
const path = require('path');
const { moduleInterop } = require("@textlint/module-interop");
const presetJapanese = moduleInterop(require("textlint-rule-preset-japanese"));
module.exports = {
...presetJapanese,
rules: {
...presetJapanese.rules,
"prh": moduleInterop(require("textlint-rule-prh")),
},
rulesConfig: {
...presetJapanese.rulesConfig,
"prh": {
"rulePaths" :[path.join(__dirname, "./prh.yml")]
},
},
};