🔤

typos で typo を見逃さないようにしてみた(IDEや開発言語不問の方法)

2023/03/17に公開

はじめに

プログラミングをしていると、typoしたり、typoを見つけることありますよね。
でも、「このプルリクで修正するのは不自然だな」とか「typoを修正するプルリクを後で別途作ろう」とか思っているうちに、修正が先延ばしになったりしますよね。
この記事では、typos を使って、typoを見逃さないようにする方法を紹介します。

Docker + docker compose + typos

様々な環境で使えるように、typosの実行環境をDocker化します。
ビルドに数分かかってしまうので、Docker Hubにて、imunew/typos-cli を公開しました。
35 MBほどのビルド済みイメージをpullするだけで使えるようになりました。

Dockerfile

こちら を参考に typos が実行できる小さなイメージを作ります。
Dockerfile はこんな感じです。
https://github.com/imunew/docker-images/blob/54dc66ca92119a31bfa847472ca7a8e81019230d/typos-cli/Dockerfile

docker-compose.yml

docker-compose.yml を使っている場合は、以下のような感じでソースコードと設定ファイル(typos.toml)をマウントします。

version: '3.9'
services:
  spell-check:
    image: imunew/typos-cli
    volumes:
      - ./src:/app/src:cached
      - ./typos.toml:/app/typos.toml
    working_dir: /app

typos.toml

こちら を参考に設定ファイルを記述します。
以下は、設定例です。
例えば、XxxRegistServiceXxxRegisterService に修正しろと指摘されますが、今回はそのままにしたかったので、default.extend-wordsRegist = "Regist"と記載します。

[files]
extend-exclude = [
    "*.md"
]

# 除外する単語をここに列挙する
[default.extend-words]
Regist = "Regist"

regist register でググると、下記のような記事がヒットするので、興味のある方はどうぞ。

Makefile

pre-commit(後述)などで、docker compose run すると、the input device is not a TTY とエラーが出て失敗してしまうので、-Tを付けて実行します。

spell-check:
	docker compose run --rm -T spell-check src --diff

.pre-commit-config.yaml

pre-commit でチェックする場合は、こんな感じで設定します。

repos:
- repo: local
  hooks:
      - id: spell-check
        name: spell-check
        entry: make spell-check
        language: system
        pass_filenames: false

.github/workflows/spell-check.yml

GitHub Actions でチェックする場合は、こんな感じですね。
typos-action を使ってもいいかもしれません。

name: spell-check

on:
  push:

jobs:
  spell-check:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          persist-credentials: false
      - name: Check spell
        run: |
          make spell-check

おわりに

いかがだったでしょうか?
今回、紹介した方法は、IDEや開発言語を選ばない方法になっているので、様々なチームで導入しやすいのではないかと思います。
これで、typoが気になるけど、指摘や修正に躊躇する日々とさよならできますね。
ではでは。

Discussion