Docker 環境であっても コンテナが気軽に増設できるなら guard-rspec を立ち上げてもいい
今回は ShellScript で何とかするパターン
ゴール
docker compose up
で立ち上げたコンテナ内で、rspec
を実行したい- ローカル環境で
*_spec.rb
ファイルを更新したら、そのテストを実行したい
ShellScript を書く
watch_rspec.sh
, rspec.sh
の2ファイルを用意
#!/bin/sh # file: watch_rspec.sh fswatch -0 -e ".*" -i "\.rb$" --event=Created spec | while read -d "" path; do clear ./rspec.sh $path done
#!/bin/sh # file: rspec.sh set -e target=$(echo $1 | awk -F 'my_project_root_dir/' '{print $2}') container=app echo $target docker compose exec -e RAILS_ENV=test $container bundle e rspec $target
メモ
fswatch
-0
でヌル文字区切りでファイルパスを渡す--event=Created
で「ファイルが作成された」ものを絞り込んで検出する-e ".*"
で一旦すべてのファイルを監視対象から除外-i "\.rb"
で Ruby ファイルのみを監視対象にする
rspec.sh
fswatch
から渡されるファイルパスは ローカル環境のフルパスなので...awk
で加工して、プロジェクトディレクトリ以降のパスを渡す
→ docker compose exec
に渡すときにコンテナ内のファイルパス指定と等価になる