💻

Neovim + Docker でローカルを汚さずに開発環境を構築

2023/04/29に公開

はじめに

私は Neovim を使用して開発を行っています。dotfiles を GitHub で管理していて、以前はそのリポジトリを git clone してローカル環境に複製して使用していました。

https://github.com/tamago3keran/dotfiles_for_docker

ただ私は以前からローカル環境を汚すことにかなり抵抗がありました。当時は Docker も使用したことがなく、 dotfiles は開発 PC の OS に合わせて修正するものだと思っていた ので、ローカル環境が汚れることは仕方がないと我慢していました。

ところが Docker を使い始めたことをきっかけに、コンテナを作成することで OS に関係なく、且つローカル環境を極力汚さずに開発できることを知りました。それがきっかけで dotfiles も同じようにコンテナを作成することでローカル環境を汚さずに開発できるはず だと思うようになりました。

しかし、インターネットで調査をしてもなかなかその方法が見つかりませんでした。そこで自分でも考えてみたところ、解決策が見つかったので今回記事を書くことにしました。

結論から言うと...

記事を読む時間がもったいないという方は、私の dotfiles が含まれている Docker イメージを Docker Hub にアップロードしているので、 README に従って使用してみてください。

https://hub.docker.com/r/tamago3keran/dotfiles

↑ 普段業務でも使用しているので、問題なく動作するはずです。

どのようにして開発に利用するか

1. dotfiles を GitHub で管理

まずは dotfiles を GitHub で管理するようにします。

https://github.com/tamago3keran/dotfiles_for_docker

↑ こちらは私の dotfiles を管理している GitHub リポジトリです。

2. dotfiles を git clone する Dockerfile を作成

Dockerfile を作成し、その内部で dotfiles の GitHub リポジトリをクローンします。

FROM ubuntu:22.04

RUN apt update && \
    apt-get update && \
    apt install -y curl git ripgrep unzip vim wget

...省略...

RUN git clone https://github.com/tamago3keran/dotfiles_for_docker.git

...省略...

dotfiles を使用するのに必要なライブラリなどは、ご自身で準備する必要があります。
私は Dockerfile も GitHub リポジトリで管理しているので、参考になれば嬉しいです。

https://github.com/tamago3keran/Dockerfiles

3. ビルドしたイメージを Docker Hub にアップロード

Dockerfile が完成したら、イメージをビルドします。

# 例
docker image build -t tamago3keran/dotfiles:base .

イメージがビルドできたら、それを Docker Hub にアップロードします。

https://hub.docker.com/r/tamago3keran/dotfiles

4. 開発中のアプリケーションにサービスとして登録

Docker で Web アプリケーションを開発しているのであれば、おそらく Docker Compose を使用されていると思います。

現在開発中のアプリケーションに dotfiles をサービスとして起動するため、 docker-copomse.yml を以下のように修正します。

  version: "1.0"
  services:
    database:
      image: postgres
      container_name: database
      volumes:
        - database:/var/lib/postgresql/data
      environment:
        POSTGRES_PASSWORD: password
    application:
      build: .
      image: application
      container_name: application
      command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
      ports:
        - "3000:3000"
      volumes:
        - application:/hello_app
      depends_on:
        - database
+   dotfiles:
+     image: tamago3keran/dotfiles:base
+     platform: linux/amd64
+     volumes:
+       - application:/hello_app
+     profiles:
+       - extra

  volumes:
    database:
      name: database
    application:
      name: application

5. アプリケーションを起動

Docker compose コマンドを実行して、アプリケーションを起動します。

docker compose build
docker compose up -d

6. dotfiles のコンテナに入る

最後に dotfiles サービスに対して以下のコマンドを実行し、コンテナに入ります。

docker compose run --name dotfiles dotfiles /bin/bash

dotfiles のコンテナ内で Neovim を起動することで、他コンテナで管理されているアプリケーションコードも修正できるはずです。

おわりに

自分は Neovim を使用して開発しているので、 Neovim での利用方法しか書きませんでした。
ただ Visual Studio Code でも Remote Container を使用すれば、上記のような方法で環境を可能な限り汚さずに開発環境を構築できるのではないかなと思っています。

もし Visual Studio Code で Remote Container をお使いの方がいれば、教えていただけると嬉しいです。

Discussion