🥳

固有名詞の除外登録の手間いらず!typosを使ってお手軽スペルチェック ~CircleCI編~

2023/08/01に公開

はじめに

日常生活においては「別に正しいスペルなんて知らなくても・・・」と思うのですが、プログラミングにおいてはスペルミス (typo) はあわや一大事です。
アルファベットが1文字違えば、プログラムは動かないですからね。

弊社プロダクト[1]はその性質上、さまざまな関連プロダクトの名称がソースコードに登場します。
スペルチェックの導入を検討する上で、そういった固有名詞たちがスペルミスとして扱われないようなツールを求めていました。

そんな中出会ったのがtypos[2]でした。
typosは導入が簡単なだけでなく、固有名詞がまったく引っかからないため、弊社プロダクトの要件にまさに一致するものでした。

そこで、以下をまとめました。

  • typosでエラーになった単語の紹介
  • typosの設定方法

typosでエラーになった単語の紹介

typosを実行した際にエラーとなった単語 (スペルミスの一覧) の全てを添付します。

スペルミス一覧
accessable
assosiation
atribute
automaticaly
avaiable
busines
charactor
choosed
cofiguration
compoent
conetnt
congig
connecton
consitent
containd
controle
controlls
contruct
contructed
createable
creater
criterias
crooz
custome
dafault
dashbord
databse
datas
datbase
decorders
degress
dependecies
dependecy
deperecated
devide
dimentions
discription
distination
donwload
embeded
excuting
extention
faild
feeded
filterd
fomr
foregin
freee
fromm
fullfill
hight
hightlight
hilight
idenity
intger
lient
maintainance
memebr
migh
permisson
permition
pipleine
pipline
postgress
postion
primay
refreh
rememberable
repostiory
resouce
ressources
restructed
returm
revison
rquest
sccess
scirpt
seciton
seperated
serach
sevices
shoud
soruce
spece
splitted
succcess
succeded
sumary
suport
supportted
tranition
transferd
transfered
transfrom
transprent
ture
udpate
waring
whiltelisted
witdh

いかにも間違えそうな単語、どこが間違ってるのか何回見ても分からない単語など、、、とても興味深いですね。

ここで重要なのは、スペルミスとして扱われた単語の中に固有名詞が含まれないということです。

例えばCSpell[3]を用いると、HubSpot kintone TikTok troccoといったサービスの名称や、ActiveRecord JDBCといったライブラリの名称、TINYINT TINYTEXT といったDBの型の名称がスペルミスとして扱われてしまいます。
これらを例外ルールとして登録していくのは煩わしいだけでなく、例外登録されていないものをスペルミスとして修正してしまうと、かえってプログラムが動かなくなるリスクがあります。

スペルミスというと修正すべきものしかないような気がしていまいますが、修正してはいけないものもあるということです。
typosは修正すべきスペルチェックのみが列挙されるという点で優れています。

設定

各種設定を以下にまとめます。

  • typosの設定
  • CircleCIの設定

typosの設定 (抜粋)

typosの設定を .typos.toml に記述します。

スペルチェックを実行しないファイルパスの設定と、現場のスペルミスの除外登録をしています。
一度に全てのスペルミスを修正するのはリスキーなので、あとで順に修正していくための設定です。

以下は一部抜粋です。

.typos.toml
[files]
extend-exclude = [
  "*.svg",
  "node_modules",
]

[default.extend-words] # FIXME: とりあえずtyposで怒られたものを全て除外しています。順に減らしていきましょう。
accessable = "accessable"
activ = "activ"
additinal = "additinal"
assosiation = "assosiation"
asyncronous = "asyncronous"
atribute = "atribute"
automaticaly = "automaticaly"
(以下略)

CircleCIの設定

typosをインストールするより、イメージを利用してしまう方がシンプルで簡単です。

.circleci/config.yml
version: 2.1

jobs:
  check-typos:
    docker:
      - image: imunew/typos-cli
    steps:
      - checkout
      - run:
          name: Run typos
          command: typos

workflows:
  ci_cd:
    jobs:
      - check-typos

上記を実行した結果です。
checkoutがほとんどの時間を占めており、typosのセットアップと実行には3秒程度しかかかっていません。

おわりに

コード品質というと、可読性とか、設計はかくあるべしとか、そういったことが語られがちなイメージです。

スペルミスは割れ窓の1つと思っているので、スペルチェックは個人的には割と大事なことだと思っています。

参考

https://github.com/crate-ci/typos

https://cspell.org/

脚注
  1. trocco®︎ ↩︎

  2. typos ↩︎

  3. CSpell ↩︎

Discussion