環境を汚さずにdockerでneovim環境を構築する
転職しました。
以前の会社と開発環境が全然違うことに驚きました。
以前の会社ではdockerを使ってローカルで開発を行っていましたが、新しい会社ではsshでリモートの開発サーバに接続して開発するといった構成です。
私は未熟なvimmerなので開発サーバーでも最新のvimあるいはneovimを使いたいです。
しかし、当の開発サーバーはcentOS 7と古いOSでパッケージマネージャーで古いvimあるいはneovimしかインストールができませんでした。
今回はサーバのOSに依存しない、かつサーバの環境をできるだけ汚さないでvimの環境を構築する方法を書きます。
必要なもの
- docker (開発サーバーにインストールされていること)
方針
- vimのdocker imageを作成する
- docker imageを立ち上げるコマンドをシェルスクリプトでラップする
方法
まずはDockerfileを作成します。
archlinuxのイメージを使っていますが、これは私の好みです。
またpacmanでインストールするものもそれぞれの環境やvim pluginの依存関係に合わせてインストールしてください。
FROM archlinux:latest
RUN pacman -Syyuu --noconfirm
RUN pacman -S --noconfirm curl git ripgrep unzip vim wget neovim nodejs deno base-devel
RUN chmod -R 777 /root
ENTRYPOINT ["nvim"]
Dockerfileを作成したら、buildします。
docker build -t awesome-neovim
-tは作成したイメージに名前をつけるオプションですので、awesome-neovimの部分には任意の名前を入れることができます。
RUN chmod -R 777 /root
の部分はちと怖いですが、ここはdocker特有の問題っぽいです。
最後にdockerコマンドをラップするシェルスクリプトを作成します。
DOCKER_OPTIONS=(
"-e" "HOME=$HOME"
)
DOCKER_OPTIONS+=(
"-v" "$HOME:$HOME"
"-v" "/var/www:/var/www"
"-v" "/var/tmp:/var/tmp"
)
echo $DOCKER_OPTIONS
DOCKER_IMAGE="awesome-nvim"
docker run --rm -it -u $(id -u):$(id -g) "${DOCKER_OPTIONS[@]}" --workdir=$(pwd) "${DOCKER_IMAGE}" "$@"
このファイルをpathの通っているところに配置します。
例えば~/.local/bin
配下におきます。
これでnvim
コマンドで最新のneovimを利用することができます。
(source ~/.zshrc
等を忘れずに)
最後に
新しい会社に入って開発サーバに最新のneovimやvimをビルドしようとしていろんなものを入れたら開発サーバが汚れてしまい、インフラチームから怒られました。もっというと一旦最初から入っているvimを削除しようとしたら実はsudoコマンドが依存関係にあり、sudoコマンドをアンインストールしてしまいました。入社して3時間ぐらいのことです。
dockerを使えば環境を汚すことないのでいいですね。この手法を応用すればあらゆるコマンドを環境を汚すことなく利用することができます。
Discussion