Alternative Architecture DOJO

オルターブースのクラウドネイティブ特化型ブログです。

Azureのプロダクト名のtypoを検知するtextlintのルールをnpmで公開してみた

こんにちは、クラウドソリューション部の花岡です。

この記事はオルターブースアドベントカレンダー2023の23日目の記事です。

adventar.org

だんだんとクリスマス 🎄 が近づいてきました!

街はにぎやかお祭り騒ぎでチキンライスが食べたくなる時期です

はじめに

今回は文章校正ツールである(textlint)https://textlint.github.io/を使ってAzureのプロダクト名のtypoを検知するルールを作成し公開しました。

AWSのサービス名のtypoを検知できるルールを作ったクラスメソッドさんのブログを見て、Azure版もあれば便利だなと思いOSSで作ってみました。

実装も大いに参考にしています。

dev.classmethod.jp

NPMパッケージで公開してます。

www.npmjs.com

ソースはこちら、MITライセンスで公開してます。

github.com

できること

実行例

以下の文章を用意します。

# test.md

- スペースがないパターン
  - NG: AppService
  - OK App Service
- 接頭辞が間違っているパターン
  - AzureとMicrosoftを区別します
  - NG: Microsoft App Service
  - OK: Azure App Service
- 表記揺れパターン
  - NG: app service
  - NG: App service
  - NG: app Service
  - OK: App Service
- 複数形のパターン
  - NG: Azure Function
  - OK: Azure Functions
- Entra IDも対応
  - NG: Azure Entra ID
  - OK: Microsoft Entra ID

textlinttextlint-rule-azure-product-nameをインストールして実行します。

# グローバルでインストール
npm i -g textlint textlint-rule-azure-product-name
# 実行
textlint --rule azure-product-name test.md

すると次のように検知してくれます。

   4:9  ✓ error  AppService => App Service                   textlint-rule-azure-product-name
   8:9  ✓ error  Microsoft App Service => Azure App Service  textlint-rule-azure-product-name
  11:9  ✓ error  app service => App Service                  textlint-rule-azure-product-name
  12:9  ✓ error  App service => App Service                  textlint-rule-azure-product-name
  13:9  ✓ error  app Service => App Service                  textlint-rule-azure-product-name
  16:9  ✓ error  Azure Function => Azure Functions           textlint-rule-azure-product-name
  19:9  ✓ error  Azure Entra ID => Microsoft Entra ID        textlint-rule-azure-product-name

✖ 7 problems (7 errors, 0 warnings)
✓ 7 fixable problems.
Try to run: $ textlint --fix [file]

ちなみにログにあるとおり、textlint--fixオプションを使うと自動的に修正してくれます。

   4:9  ✔   AppService => App Service                   textlint-rule-azure-product-name
   8:9  ✔   Microsoft App Service => Azure App Service  textlint-rule-azure-product-name
  11:9  ✔   app service => App Service                  textlint-rule-azure-product-name
  12:9  ✔   App service => App Service                  textlint-rule-azure-product-name
  13:9  ✔   app Service => App Service                  textlint-rule-azure-product-name
  16:9  ✔   Azure Function => Azure Functions           textlint-rule-azure-product-name
  19:9  ✔   Azure Entra ID => Microsoft Entra ID        textlint-rule-azure-product-name

✔ Fixed 7 problems

VS Code

またVS Codeではtextlintの拡張機能を使うとリアルタイムで検知してくれます。

VS Code上での動作

marketplace.visualstudio.com

ルールについて

自動更新

メンテナンス性を高めるため、プロダクト名は自動更新できるようにしています。

https://azure.microsoft.com/en-us/products/からスクリプトでスクレイピングして取得しています。

実行はGitHub Actionsを使用して、更新があればPull requestを出すようにしています。

マニュアル対応

自動更新のみでは対応できないパターン(Microsoft Entra IDなど)を対応するため、マニュアルでyamlを書いています。

https://github.com/dora56/textlint-rule-azure-product-name/blob/main/dict/manual-added-rules.yml

もし対応して欲しいパターンがあれば、Issueを立てるか上記を編集してプルリクエストを出していただければと思います。

おわりに

textlintはとても便利な校正ツールです。日頃お世話になっているのでこういった形で貢献(Contribute)できたのは、良い経験となりました。

そして、もしこのルールを気に入っていただけたなら、GitHubのリポジトリにスターやX(Twitter)、その他SNSで共有いただけると嬉しいです。

github.com

また、Issueやプルリクエストも大歓迎です。

最後に、作成したルールでどなたかのテクニカルライティングの品質向上に役立てれば幸いです。最後までお読みいただきありがとうございました。


サービス一覧 www.alterbooth.com cloudpointer.tech www.alterbooth.com