VS CodeのRemote Development: Containerを実用したい

VS CodeのRemote Development拡張が登場して騒がれて少し経ちました。

code.visualstudio.com

僕は開発用にUbuntu Desktopを使っていますが、PCゲーマーであるのでWindowsを手放すことは出来ません。さらにゲームを実行するという関係上Windowsを仮想化して使うことも考えにくいです。なので2台(もしくはLinuxを仮想化)で開発することが当たり前になっていました。ちなみにMacも長く使ってましたが最近の開発者の方を見てないなという姿勢を見てMacは完全に卒業しました。ゲームというWindowsのような維持理由があるわけでもなく、開発用として持っているのにネイティブDockerが使えないことも大きい。なんにしろいくつも環境を維持するのは面倒です。なのでできればWindowsだけで開発できれば楽です。

現在のモダンな開発環境の中心にはDocker、もしくはコンテナがあります。ただ、エディタやIDEがローカルインタプリタやコンパイラを必要とする例も多くあり、結局ローカルにもコンテナ内部と同じような開発環境を作っている方は多いと思います。Appサーバーに相当する部分だけdocker-composeから外したりとかする人も多いですよね。 Windowsでこのように一部をローカルで賄おうとするとWindowsだということがだいぶつらくなります。貧弱なCUI環境とか、Unix系ツールがないこととか、パスの表し方とか、そもそもWindowsで動くことを想定しないライブラリの多さとか…だからLinuxを開発に使うわけです。

じゃあってことで開発環境はコンテナ内部に全て置き、XでコンテナからGUI飛ばしてみたりとかするとかするわけですが、実際にやってみるとこれがまた使いにくてたまらない。

コンテナ内部に閉じ込めて快適に開発できる環境が作れればWindows使ってようがMac使ってようがLinux使ってようが関係ないポータブルかつ独立した開発環境を作れるのになあと思っていたところに現れたのがVS CodeのRemote Developmentです。先のXでなんとかしようとしたときと発想は近いですが圧倒的に使いやすいですね。往時のCEOがLinuxはガンとまで言ったMicrosoftがCEOも変わり積極的にOSSを取り込もうとする姿勢になっているはとても良いです。

登場からしばらく経ちましたが「使ってみた」程度の記事はたくさんあれど、実用している人の記事は全然ありません。そこで複数のプロジェクトで実践してみた設定例を公開してみようかと思いました。

github.com

Windows側からはリポジトリに含められないファイルを最初にコピーするだけで、ソースコードもファイルシステム上の都合からパーミッションやらシンボリックリンクやら問題があるのでWindowsからマウントしません。volumeも使わないのはdocker buildの段階でできる限り構築してしまいたかったためです。

この設定で立ち上げたコンテナに直接アタッチして開発するイメージです。ほとんどのDockerhubにあるようなDocker Imageでは直接コンテナ内でデイリーユースするための想定はしていないのでシェルや周辺ツールを整えて使います。日頃からそのへん自動化している皆さんならセットアップは苦にならないでしょう。最初からコンテナ内部にいるのでdocker-compose exec とか必要ありません。楽です。

他の人がどんな快適な使い方をしているのか気になります。