🦁

「変更ファイルのみ一括でテスト」をすばやく行う!

2024/04/12に公開1

概要

テストケースを追加するタスクを行っているときに、
変更したファイルのみテストを実行したいときがある。

ファイル名の上で右クリックして、相対パスを取得するのがめんどくさい。

イメージ

なるべく簡単に実行する方法について説明する。

対象読者

  • git初心者
  • 駆け出しエンジニア
  • テストケース実装中の人

いいね!してね

この記事の事例は必要に応じて今後追記していく予定です!
「新しい事例が知りたい」「他の事例も知りたい」と思った人は、ぜひこの記事にいいね👍してください。筆者のモチベーションにつながります!

それでは以下が本編です。

結論

1 変更ファイル一覧をテスト実行しやすい形式で出力させる

git status --porcelain | awk '{print substr($0, index($0,$2))}' | sed "s/^$(basename $(pwd))\///" | awk 'NR>1{print last " \\"} {last=$0} END {print last}'

↓

test/spec/signup/new.spec.ts \
test/spec/signup/confirm.spec.ts \
test/spec/signup/completed.spec.ts \
test/spec/signup/new/email-confirmation.spec.ts \
test/spec/signup/new/email-confirmed.spec.ts

2 テスト実行コマンド(例: npm run test)に続けてペーストする

npm run test test/spec/signup/new.spec.ts \
test/spec/signup/confirm.spec.ts \
test/spec/signup/completed.spec.ts \
test/spec/signup/new/email-confirmation.spec.ts \
test/spec/signup/new/email-confirmed.spec.ts

説明すること

  • 実行しやすいファイルパスを取得する
  • コマンドをいつでもペーストできるようにする

実行しやすいファイルパスを取得する

前提: プロジェクトルートディレクトリ(例: app)で実行する前提

git statusを実行すると通常下記のような形式で出力される

git status

↓

        modified:   test/spec/signup/new.spec.ts
        modified:   test/spec/signup/confirm.spec.ts
        modified:   test/spec/signup/completed.spec.ts
        modified:   test/spec/signup/new/email-confirmation.spec.ts
        modified:   test/spec/signup/new/email-confirmed.spec.ts

これをテスト対象ファイルパスとして整形する
※ちなみにchatGPTでコマンドを生成した

git status --porcelain | awk '{print substr($0, index($0,$2))}' | sed "s/^$(basename $(pwd))\///" | awk 'NR>1{print last " \\"} {last=$0} END {print last}'# ルートディレクトリ直下の変更ファイル名のみ表示される
test/spec/signup/new.spec.ts \
test/spec/signup/confirm.spec.ts \
test/spec/signup/completed.spec.ts \
test/spec/signup/new/email-confirmation.spec.ts \
test/spec/signup/new/email-confirmed.spec.ts

ポイント

  • terminal上では、バックスラッシュで改行できる!
  • spec以外のファイルも含めてOK(実行時に無視されるから)!

コマンドをいつでもペーストできるようにする

コマンドを毎回コピペすると手間なので、該当コマンドをclipboard系のアプリに登録しておく。

今回は、MacでClipyを使用した例を紹介する。
※WindowsではCliborというアプリがあるらしい。

https://github.com/Clipy/Clipy

git status --porcelain | awk '{print substr($0, index($0,$2))}' | sed "s/^$(basename $(pwd))\///" | awk 'NR>1{print last " \\"} {last=$0} END {print last}'

cmd + shift + vを押すと、登録したスニペットが表示される。
選択すると対応する値をカーソルにペーストできる!

まとめ

なるべく手作業で行う処理をなくして、快適な開発ライフを送りましょう!

この記事が参考になった方は、ぜひこの記事にいいね👍してください。筆者のモチベーションにつながります!

Discussion

r-sugir-sugi

TODO 変更ファイル一覧をコピペするステップを省きたい