📌

環境を汚さずにdockerでneovim環境を構築する

2023/07/07に公開

転職しました。
以前の会社と開発環境が全然違うことに驚きました。
以前の会社ではdockerを使ってローカルで開発を行っていましたが、新しい会社ではsshでリモートの開発サーバに接続して開発するといった構成です。
私は未熟なvimmerなので開発サーバーでも最新のvimあるいはneovimを使いたいです。
しかし、当の開発サーバーはcentOS 7と古いOSでパッケージマネージャーで古いvimあるいはneovimしかインストールができませんでした。
今回はサーバのOSに依存しない、かつサーバの環境をできるだけ汚さないでvimの環境を構築する方法を書きます。

必要なもの

  • docker (開発サーバーにインストールされていること)

方針

  1. vimのdocker imageを作成する
  2. docker imageを立ち上げるコマンドをシェルスクリプトでラップする

方法

まずはDockerfileを作成します。
archlinuxのイメージを使っていますが、これは私の好みです。
またpacmanでインストールするものもそれぞれの環境やvim pluginの依存関係に合わせてインストールしてください。

Dockerfile
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コマンドをラップするシェルスクリプトを作成します。

nvim
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を使えば環境を汚すことないのでいいですね。この手法を応用すればあらゆるコマンドを環境を汚すことなく利用することができます。

GitHubで編集を提案

Discussion