モチベーション
- Dockerを使ってクリーンな開発環境を構築したい
- Vim(Neovim)でGo言語を書きたい
Dockerfileの作成
以下が,Go開発環境を構築するためのDockerfileです.
FROM ubuntu:latest
# 共通の依存関係をインストール
RUN apt-get update -y \
&& apt-get install -y \
software-properties-common \
curl \
git \
build-essential \
python3 \
python3-pip \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Goをインストール
RUN add-apt-repository ppa:longsleep/golang-backports -y \
&& apt-get update -y \
&& apt-get install -y golang-go \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Node.jsとnpmをインストール
RUN curl -sL https://deb.nodesource.com/setup_lts.x | bash - \
&& apt-get update -y \
&& apt-get install -y nodejs \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# NeovimをPPAからインストール (stable版)
RUN add-apt-repository ppa:neovim-ppa/stable -y \
&& apt-get update -y \
&& apt-get install -y neovim \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
ENV GOPATH=/root/go
ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
ENV NODE_ENV=development
# 必要なディレクトリを作成
RUN mkdir -p $GOPATH \
&& mkdir -p /root/.config/nvim/ \
&& mkdir -p /root/.local/share/nvim/site/autoload
# vim-plugをインストール
RUN curl -fLo /root/.local/share/nvim/site/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
# 設定ファイルをコピー
COPY init.vim /root/.config/nvim/init.vim
COPY coc-settings.json /root/.config/nvim/coc-settings.json
# Neovimプラグインをインストール
RUN nvim -u /root/.config/nvim/init.vim +PlugInstall +qall
# srcディレクトリを作成
RUN mkdir -p /root/src
WORKDIR /root/src
解説:
- ベースイメージ: ubuntu:latestを使用
- 共通依存関係のインストール: curl,git,build-essential,python3,python3-pipなど開発に必要なツールをインストールします.
PythonはスニペットプラグインのUltiSnipsを使用するためにインストールします.UltiSnipsの使用にはPython環境が必要です.
- Goのインストール: longsleep/golang-backports PPAを使用してGoをインストールします.
PPAについては以下が参考になります.
- Node.jsとnpmのインストール: NodeSourceのAPTリポジトリを使用してNode.jsとnpmをインストールします.
Node.jsは補完エンジンのcoc.nvimを使用するためにインストールします.coc.nvimの使用にはNode.jsの環境が必要です.
-
設定ファイルのコピー: ローカルのinit.vimとcoc-settings.jsonをコンテナ内にコピーします.
-
Neovimのインストール: Neovimをneovim-ppa/stable PPAからインストールします.
-
vim-plugのインストール: プラグインマネージャーとしてvim-plugをインストールします.
設定ファイル
COPYする設定ファイルには以下を記述
init.vim
call plug#begin()
(省略)
" vim-goプラグインのインストールとバイナリインストール
Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' }
" coc.nvimプラグインのインストール
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" ultisnipsプラグインのインストール
Plug 'SirVer/ultisnips'
(省略)
call plug#end()
coc-settings.json
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.work", "go.mod", ".vim/", ".git/", ".hg/"],
"filetypes": ["go"],
"initializationOptions": {
"usePlaceholders": true
}
}
}
}
イメージのビルドとコンテナを実行
docker image build --tag go .
docker container run --name go -it go bash