PCが変わっても使い慣れたNeovimですぐに開発を始める仕組み
はじめに
私はエンジニアのキャリアをスタートしたときから、当時の上司の影響もあり、Neovim を使用して開発してきました。
当時は dotfiles を GitHub で管理していて、そのリポジトリをローカル環境に git clone して Neovim を使用していました。
その運用をしていたため、新しく PC を購入した時にすぐに環境を整えることができませんでした。なぜなら、dotfiles を機能させるためにどういったライブラリ(例: npm, node, ...)をダウンロードしていたか覚えていなかったからです。
そういった背景があり、転職や故障などを理由に PC が変わったとしても、すぐに開発環境を整えられるように Docker を利用した運用方法に変えました。
具体的にどういった運用をしているのか?
私は以下のような方法で開発環境を整えています。実際にプライベートの PC と、会社支給の PC の両方でスムーズに使用できています。
この運用方法では dotfiles だけでなく、Dockerfile も GitHub リポジトリで管理しています。
Dockerfile を GitHub リポジトリで管理することで、GitHub Actions を利用し、dotfiles が含まれた Docker image を Docker Hub にアップロードすることができます。
Dockerfile には、dotfiles を git clone するコマンドが記載されていて、その後 Neovim を起動するコマンドも実行されます。Neovim が起動されれば、dein.vim というパッケージマネージャーが各種プラグインをインストールしてくれます。こういった仕組みで、すぐに使用可能な Docker image を Docker Hub にアップロードしています。
あとは開発用の PC 側で Docker を起動し、Docker image を pull して、Container を起動します。開発用のソースコードが含まれる Container も用意すれば、あとはその開発用ソースコードを Volume を利用して共有することで、Neovim が動く側でソースコードを操作することができます。
なぜこういった方法で運用しているのか?
上記のような運用を行っているのにも理由があります。この運用に行き着くまでに何度か課題に直面し、それを解決する過程で現在の運用に至っています。
ここからは、どういった課題に直面し、どのように解決してきたかについて紹介します。
1. 開発用の Docker が異なるディストリビューションで構築されている
今は Docker を使用して開発している会社が多いと思います。一方で Docker で採用されているディストリビューションは会社によって様々だと思います。
Alpine Linux が採用されていることもあれば、Debian が採用されていることだってあるかもしれません。
例えば、Ubuntu で dotfiles の Docker image を構築している場合、Dockerfile のコードをそのまま Alpine Linux のものに適用すると、正常に動かなかったりします。
そこで、dotfiles と開発用の Container は別々に起動して、Volume で開発対象のソースコードを共有することで、会社の Docker 環境に依存することなく、使い慣れた Neovim ですぐに開発を開始できるはずです。
2. ローカルで Dockerfile を使って image をビルドすることが面倒
上記のような運用であれば、GitHub リポジトリで管理している Dockerfile をローカルにダウンロードして、Container を起動すればできます。
ただどうせなら Docker image をアップロードできる仕組みを利用して工数を減らしたいと感じていました。そこで GitHub Actions を利用して Dockerfile を元に Docker image をビルドし、Docker Hub にアップロードするようにしています。
またビルドする際に、GitHub リポジトリで管理している dotfiles をダウンロードし、Neovim を起動して dein.vim によるプラグインのインストールまでを実行させています。
そうすれば、新しい PC に Docker さえダウンロードしておけば、あとは pull して Container を起動するだけで、すぐに動かすことができる開発環境を一瞬で準備することができます。
3. GitHub Actions で利用される Linux 系の image が Ubuntu のみ
上記で GitHub Actions を使用していることを紹介しましたが、GitHub Actions が提供している Runner image は Linux 系だと Ubuntu しかありません。
dotfiles の Docker image を作成する際に、Alpine Linuxを使用していたところ、GitHub Actions がディストリビューションの差分によって失敗することがありました。
なので、GitHub Actions でも正常にビルドされるように、あえて Ubuntu を採用するようにしました。
おわりに
私は PC を新しく購入した時、Neovim で構築された開発環境をすぐに再現することができず、正直別のエディタに目移りしそうになっていました。
でもやっぱり Neovim が好きで諦めきれず、どうやったら簡単に自分の開発環境を使いまわせるのかを考えた結果、このような運用方法に落ち着きました。
私が感じていたような煩わしさが原因で、Neovim 以外のエディタに移行してしまいたいなと思った方がいれば、ぜひ一度こちらの方法を試していただけると嬉しいです!
最後になりますが、私はスナックミーというおやつのスタートアップでエンジニアをしています。弊社はエンジニアを積極的に採用していますので、もし興味があればお気軽にお声掛けください!
Discussion