最近はneovimを使っている。neovim-qtが割と安定していて良い。
neotermとvim-testでテストを実行する。
direnv等で、プロジェクト毎に環境変数を指定し環境変数でコンテナ名を引っ張ってくる。コンテナ名はプロジェクト毎で大体固定になるはず。
コンテナ名があればdocker ps
で取ってきてdocker exec
に渡す、というコマンドのトランスフォーマーを定義する。spring
の有無はお好みで。
nnoremap [space]tn :TestNearest<cr>
nnoremap [space]tf :TestFile<cr>
let test#strategy = 'neoterm'
let test#ruby#rspec#executable = 'rspec'
function! DockerTransformer(cmd) abort
if $APP_CONTAINER_NAME != ''
let container_id = system('docker ps --filter name=$APP_CONTAINER_NAME -q')
return 'docker exec -t ' . container_id . ' spring ' . a:cmd
else
return 'bundle exec ' . a:cmd
endif
endfunction
let g:test#custom_transformations = {'docker': function('DockerTransformer')}
let g:test#transformation = 'docker'
基本的にdockerはコンテナ立ち上げっぱなしで、zshを起動する様にしている。サーバープロセスは一回中に入ってから起動する。
そうしておかないとサーバープロセス再起動時にコンテナごと落ちて面倒。