Vim
docker

[小ネタ] 最近使っているvimからdockerコンテナ内でテストする方法

More than 1 year has passed since last update.

最近は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を起動する様にしている。サーバープロセスは一回中に入ってから起動する。
そうしておかないとサーバープロセス再起動時にコンテナごと落ちて面倒。