DockerでVim/Neovimの検証用サンドボックス環境を作る
新しいプラグインや設定を試したいとき、いきなり普段使いの設定ファイルに手を入れるのは怖いものです。かといって仮想マシンを都度立てるのは重すぎます。そこで、簡単に作れて簡単に壊せるDockerコンテナを検証用サンドボックスとして使う方法を紹介します。
検証環境に求める条件
- 簡単に作れます
- 簡単に破棄できます
- 使うたびにリセットできます
- 手元の設定ファイルを持ち込めます
VMwareやHyper-Vのような仮想マシンでもこの条件は満たせますが、起動の重さを考えるとコンテナ技術の方が検証用途には向いています。Windows/Linux/Macいずれのホストでも同じ手順で使えます。
ファイル構成
ローカル側にはこのような構成で用意します。
vim-sandbox/
├─ init.vim ← コンテナにコピーする設定ファイル
└─ vim/ ← プラグイン等、コンテナのVim関連ディレクトリへマウントするファイル群
あらかじめ用意するinit.vimは、検証したい内容に応じて最小限で十分です。
syntax enable
filetype plugin indent on
set number
set nocompatible
set wildmenu
set colorcolumn=81
Dockerfileを用意する
Alpine Linuxベースのシンプルな構成にしておくと、イメージサイズを抑えつつVim・Neovim両方を試せます。
FROM alpine:edge
RUN apk update && apk upgrade && \
apk add --no-cache \
curl git gcc musl-dev linux-headers \
vim neovim \
python3 py3-pip && \
rm -rf /var/cache/apk/*
ENV LANG="ja_JP.UTF-8" LANGUAGE="ja_JP:ja" LC_ALL="ja_JP.UTF-8"
RUN pip3 install --no-cache-dir --break-system-packages pynvim
RUN mkdir -p /root/.vim /root/.config/nvim
COPY init.vim /root/.vimrc
COPY init.vim /root/.config/nvim/init.vim
WORKDIR /root
ENTRYPOINT ["nvim"]
ビルドコマンドはこちらです。
docker build -t vim-sandbox .
300MB前後になる点には注意が必要です。試すたびに大量にイメージを作ってしまうと、あっという間にディスクを圧迫します。
コンテナを起動する
docker run -it --name vim-sandbox \
-v "$(pwd)/vim:/root/.config/nvim" \
vim-sandbox
マウントパスは必ず絶対パスで指定します。相対パス(./vimなど)は環境によって解釈されずエラーになることがあるため避けます。
-vのマウント元パスは絶対パスで指定します。Windowsでも同様にフルパスを書きます。
再開・削除
編集を終えてVimを閉じるとコンテナも停止します。用途に応じて次のコマンドを使い分けます。
| コマンド | 用途 |
|---|---|
docker start -ia vim-sandbox | 停止したコンテナを再開する |
docker container rm vim-sandbox | 検証が終わったコンテナを削除する |
docker container prune | 停止中コンテナをまとめて掃除する(必要なコンテナまで消さないよう対象範囲に注意) |
プラグインを検証する
プラグインまで検証したい場合は、モダンなプラグインマネージャーであるlazy.nvimをコンテナ内にセットアップしても構いませんが、1回限りの検証であれば、Neovimに組み込みのパッケージ機能(:packadd)でGitHubから直接cloneして試す方が手早く済みます。
git clone --depth=1 https://github.com/{owner}/{plugin}.git \
~/.local/share/nvim/site/pack/tmp/start/{plugin}
コンテナを起動し直せば設定はまっさらな状態に戻るため、「入れてみたけど気に入らなかった」プラグインの後片付けを考えずに試せるのがメリットです。
OSコマンドが必要なとき
コンテナ内でパッケージを追加したくなった場合は、Vim/Neovimの:terminalコマンドでシェルを開き、そのままapk addすれば済みます。検証用途であれば、その場しのぎでコンテナ内に直接インストールしてしまっても問題ありません。
新しいLSP関連プラグインを試すときは必ずこのサンドボックスを経由するようにしています。普段使いの設定を汚さずに済むうえ、うまくいかなかった場合もコンテナごと削除すれば後始末を考えなくて済むので、気軽に色々試せるようになりました。
まとめ
DockerでVim/Neovimの検証環境を用意しておけば、普段使いの設定を壊す心配なく新しい設定やプラグインを試せます。マウントパスを絶対パスにすることと、イメージの肥大化にだけ注意すれば、日常的な検証用途に十分使えます。手元を汚さずに試すという目的なら、VPS+SSHの構成やブラウザのクラウドIDEも同じ問題の別の解き方になります。