Dockerでvimを使う方法(Python有効化も)

オンプレのサーバにVimをインストールする際に、ビルド手順(主にconfigure内容)を忘れてググることが多いので自分の備忘録として残したいと思います。

また、一口にVimと言ってもVim8、NeoVimをyumやらaptやらでインストールするパターンと、ソースコードからコンパイルするパターンがあると思いますので、今回はDockerコンテナ上で以下の4パターンを試してみたいと思います。

  1. Vim8をパッケージマネージャでインストールするパターン
  2. NeoVimをパッケージマネージャでインストールするパターン
  3. Vim8をソースからビルドしてPython2, 3を有効にしたパターン
  4. NeoVimをパッケージマネージャからインストールしてPython2, 3を有効にしたパターン

Dockerコンテナのベースイメージは軽量化のためAlipneLinuxを使用していますがCentOSでもUbuntuでも手順はほぼ変わらないと思います。

1. Vim8

まずはVim8のみ、Pythonを有効にしていない状態であれば以下のように簡単にインストールすることができます。

FROM alpine
MAINTAINER Gen Igarashi < igarashi@aizulab.com >

# Package
RUN apk update
RUN apk --update add vim

Dockerfileを用意したらbuildコマンドを実行し、コンテナを起動します。

$ docker build . -t vim
$ docker run -it vim ash

コンテナを起動したらvimを起動できることを確認します。

# vim

2. NeoVim

次にNeoVimを試します。
こちらもVim8同様、簡単にインストールすることができます。

FROM alpine
MAINTAINER Gen Igarashi < igarashi@aizulab.com >

# Package
RUN apk update
RUN apk --update add neovim
$ docker build . -t vim
$ docker run -it vim ash
# nvim

先ほどとほぼ同じ手順でNeoVimがインストールできます。

3. Vim8 + Python

次にプラグインを使用するためにPythonを有効化したVim8をインストールします。
先ほどの方法でもPython3は有効になっているのですが一応Python2も有効にしてみます。
Dockerfileは少し複雑になります。

FROM alpine
MAINTAINER Gen Igarashi < igarashi@aizulab.com >

# Package
RUN apk update
RUN apk --update add git make gcc g++ musl-dev ncurses-dev
RUN apk --update add \
  python \
  python-dev \
  python3 \
  python3-dev \
  perl \
  perl-dev \
  lua \
  lua-dev

RUN git clone https://github.com/vim/vim
RUN cd vim && \
  ./configure \
  --enable-fail-if-missing \
  --with-features=huge \
  --disable-selinux \
  --enable-luainterp \
  --enable-perlinterp \
  --enable-pythoninterp=dynamic \
  --with-python-config-dir=/usr/lib/python2.7/config \
  --enable-python3interp=dynamic \
  --with-python3-config-dir=/usr/lib/python3.7/config-3.7m-x86_64-linux-gnu \
  --enable-fontset \
  --enable-multibyte \
  vi_cv_path_python3=/usr/bin/python3.7 && \
  make && make install

まずVim8のソースコードをcloneするためのgitや、ビルドするためのgccなど必要なパッケージをインストールします。

その後、git cloneしてcdでディレクトリに移動してからビルドしますがDockerでは以下のようにRUN cd vimとしてもconfigureが実行できません。

RUN cd vim
RUN ./configure

Dockerはコマンド1つ毎にカレントディレクトリに戻りますのでcdした後に&&で続けてビルドを実行しないとカレントディレクトリに戻って実行してしまうのでエラーになります。

configureが終わったらmake installして完了です。 コンテナを立ち上げてVimを確認します。

$ docker build . -t vim
$ docker run -it vim ash

Vimの確認は以下のコマンドです。

# vim --version | grep python
+cmdline_hist      +langmap           +python/dyn        +visual
+cmdline_info      +libcall           +python3/dyn       +visualextra

+pythonとなっているのでPython2, Python3が有効になっています。

Vimを起動して確認してみましょう。

# vim

ノーマルモードで以下のコマンドを実行して1が表示されればPythonは有効になっています。

:echo has('python')
:echo has('python3')

4. NeoVim + Python

最後にNeoVim+Pythonを試します。
Pythonをインストールし、pipでneovimパッケージをインストールするだけですので前述のVim8ほど複雑ではありません。

FROM alpine
MAINTAINER Gen Igarashi < igarashi@aizulab.com >

# Package
RUN apk update
RUN apk --update add curl gcc g++
RUN apk --update add neovim

RUN apk --update add python python-dev python3 python3-dev
RUN curl -kL https://bootstrap.pypa.io/get-pip.py | python
RUN python -m pip install neovim
RUN python3 -m pip install --upgrade pip
RUN python3 -m pip install neovim

Python3のpipはneovimをインストールする前にupgradeしないと怒られるのでupgradeしてからneovim installとしています。

こちらもコンテナを起動して確認します。

$ docker build . -t vim
$ docker run -it vim ash

NeoVimはヘルスチェックができるので起動後、ノーマルモードでヘルスチェックコマンドを実行しましょう。

# nvim
:checkhealth

Python2, Python3のどちらもOKとなっているので有効であることが確認できました。

まとめ

DockerでのVimのインストール方法をまとめてみました。
Dockerを使う場合はファイル共有にしてローカルのVimで開発するのでDocker上でVimを使用することは少ないのですが、Dockerfileを作成しておくことは無駄ではないかな、と思い作成してみました。

Docker上で開発を行うVimmerの役に立てれば幸いです。

今回作成したDockerfileはこちら。
https://github.com/aizulab-igarashi/docker_vim

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です