Dockerを使ったコンテナ環境での開発にVimで立ち向かう
この記事はVim Advent Calendar 2020の6日目の記事です
昨日は@uhyoさんのVim ネタプラグイン集でした
見たことのないプラグインばかり紹介されていて面白かったですね
今年は業務の方でマイクロサービスアーキテクチャを導入したこともあり、Dockerをよく使った年でした
この記事はVimを使ったDocker環境での開発奮闘記です
Docker開発環境でのVim利用
Docker開発環境でのVim利用はいくつか方法があると思うのですが、
自分はシンプルに立ち上げたコンテナにVim と vimrc をインストールして、コンテナのシェルからVimを起動し、ファイルを編集しています
ネットの海に漂うDocker環境での開発についての記事には、ボリュームをホストマシンにマウントし、ホストマシンのエディタでコードを編集する方法を紹介するものが多いですが、この方法にはファイルアクセス速度等の許容できない部分があったのでやめました
ちなみに、 VSCode の場合だと Remote Container という拡張機能を使うことで、ホストマシンからコンテナ内のファイルに簡単にリモートアクセスできるので便利です
ホストマシンにボリュームをマウントする必要もありません
エディタにそこまでこだわりが無い人はこれ使った方が幸せになれると思います…
VSCodeのドキュメントより引用
Dockerのシェルへのアクセス
Dockerコンテナのシェルへのアクセスは、
docker exec -it コンテナ名 bash
のようなコマンドで可能なのですが、毎回コンテナ名を手動で入力するのが面倒でした
これはホストマシンのfishに以下の関数を定義してやることで、解消しました
function docker-exec
set name (docker ps --format "{{.Names}}" | fzf)
docker exec -it $name $argv
end
これを使うことでコンテナ名をfzfによる検索でとってきてシェルにアクセスできます
ここでVimを起動します
DockerのVim <- ホストマシン のコピ-ペースト
Docker上のVimにホストマシンのクリップボードの内容をペーストしようとすると、文字が消えたり改行部分のインデントが大きくなったりと色々めちゃくちゃな状態でペーストされてしまいます
これは :set paste
や :r!cat
を使うことで回避することができます
Vimや周辺ツールのインストール
コンテナ毎にVimとその他周辺ツールを入れる必要があったので、扱うマイクロサービスが増えたりすると、毎回手動でそれらをインストールをする必要がありました
これはとても面倒だったので、shellscript を書いて全て自動化しました
書いた shellscript は github に上げているので、コンテナのシェルからコマンド一つ実行することでインストールが始まります
リポジトリ: https://github.com/uji/dotfiles
git clone https://github.com/uji/dotfiles.git ~/dotfiles && sh ~/dotfiles/install-linux.sh && source ~/.bashrc
さらに、Vim プラグインの削減や置き換えを行い、周辺ツールを最小限にしました
ランタイムのインストールをなくすために、dein.vim を minpac.vim に、coc.nvim を vim-lspにと、Vim scriptのみで書かれたプラグインを使うように利用するプラグインを乗り換えました
LSPは mattn/vim-lsp-settingsを使って、言語ごとに適宜インストールするようにしています
このプラグインは、去年の Vim Advent Calendar で作者ご本人より紹介記事が投稿されています
改善したい点
新しめのバージョンのVimを使いたいがために、Vimをインストールする際にソースコードからビルドしています
これがなかなか時間がかかるので、ビルドしたものをどこか置いておくなどしようかなと考えてます
何か良い方法あれば教えてください
他にもこの記事で触れた部分で「これはこうした方が良い」とかあれば教えてもらえると助かります
明日は@imokurityさんの記事です
Discussion