晩秋から冬へ移り変わっていく季節ですね。世間では色々なものが発表されていて、どこから手を付けていこうかとワクワクしています。 今回は開発環境まわりがパワーアップしたので、その記事になります。
開発環境の構築
Web開発ではリモートマシンで作業することが多く、そのためには数多くの設定をしてあげる必要があります。
俗に「環境構築」とか呼ばれる作業で、これがとても面倒だったりします。
実際の使い方は公式チュートリアルが充実しているので省略します。
https://code.visualstudio.com/remote-tutorials/containers/getting-started
自分の場合は既にdockerとvscodeが動作する環境があり、dockerもそれなりに触っていたので、1時間前後で完了して雰囲気は掴めました。
今回は少しだけ昔を振り返りつつ、今回のVScode拡張機能で何ができるかを纏めます。
ちょっと昔の環境構築
ちょっとだけ昔、Web開発といえばVirtualBoxで仮想マシン設定からでした。(今もある程度はこういう作業必要だったりしますが)
https://catalina1344.hatenablog.jp/entry/2014/04/02/222630
少し進んでVagrantとかPappertみたいな環境構築ツールも登場しましたが、環境構築の苦労はあまり変わらなかった印象です。
なんで大変なの?て言われると、その時々によって状況が変わるという部分が大きくて、たとえば
みたいなのがあります。
毎回こういう地雷を踏みながら、特定条件下(社内だけとか)でしか使えないナレッジが溜まっていくわけです。
最近の環境構築
いまどきはDockerという軽量でポータブルな仮想環境があるので、これで環境構築がとても楽になった印象です。
楽になった部分はありますが、まだ解決できていなかった部分もあります。
尚、今回のエントリは「まだちょっとだった部分」が解決されたよというお話しです。
dockerを使うことで昔より楽になった
- ターミナル設定
- ファイル共有設定
- ネットワーク設定
dockerになってから、すごくラクになりましたね。 トラブルが起きたら結局設定ファイル見て頑張るみたいなのはありますが、それはそれで。
dockerを使っても、まだちょっとだった部分(今回のvscodeで解決!)
- エディタの設定
- デバッガの設定
- localとremoteでのバージョン合わせ
ここはdocker含めて、環境構築ツールでは解消しきれていなかった部分です。
そもそもDockerが提供するのは「仮想環境」であって、「開発環境」ではないというだけな話です。
問題を解消できていない理由自体もとても簡単です。開発環境として使う場合、ローカルマシンとリモートマシン両方の設定が必要になってくるからですね。
たとえば
- エディタをどう動かすか
- localで動かしてファイル共有だけする
- sshfsとsshで直にremote編集か
- リモートデバッガでは接続先に何かをインストールする必要がある
- 使う言語にあわせたリモートデバッガが必要
- ネットワークのポート設定も必要だったり
- intellisense(コード補完)を効かせるための設定が面倒
- remoteとファイル共有だけしてるケースだと、localとremoteで同一パッケージが必要
みたいなのがあったりして、とても手間でした。
特に最後のintellisenseの設定が鬼門で、たとえばPythonで開発する場合
- DockerコンテナのPython関係のファイルをWindowsから見えるようマウントする
- パスが違ってたりしてうまくいかない。
- この方法は諦めた
- ローカルのWindowsマシンにAnacondaでも入れてみる力技でいってみる
- パッケージの関数も補完してほしいからpip installとかをwindowsとコンテナ側それぞれでやる
- windows側に全部そろっていくなら、dockerいらなくね?
みたくなってました。
VS Code Remote Developmentを使う
公式:
https://code.visualstudio.com/docs/remote/remote-overview
図を見るとわかるとおり、RemoteOS上にVS Code Serverを置いて、そいつが全部面倒みてくれるという仕組みのようです。
こうすると何が起きるのかというと、remotedevelopment当初のキャッチフレーズのとおり
「VScodeとdockerコンテナのシームレスな連携」
です。
まずは使ってみた感想
控え目に言って最高です。
何が最高かって
- ものの数分で各プログラム言語のコンテナが立ち上がって開発を始められる
- デバッガやコード補完も動く
- 追加のライブラリを入れたい
- 単にdockerfileを編集すればいける
- 開発環境の面倒な初期設定全部やってくれる
- 以下のような問題を気にしなくていい
- コンテナ作るためのdockerfileどうするとか
- ネットワーク割り当てどうしよう、nginxの設定どうしようとか
- ファイルのマウントどうしよう。どこが適切か(パーミッション維持する必要あるなら尚更)とか
- 以下のような問題を気にしなくていい
少し掘り下げて使ってみた感想
少し掘り下げて、実用上問題ないか試してみた感想
- よくあるWebアプリ(CMSとか)の基本構成もサポートされてる
- Webアプリ + DB みたいな構成
- python + postgreSQLみたいなのもプリセットにあるので楽々作れる。
- 過去に自分が作ったコンテナを利用できる
実用を考えた場合にどうなのか?
VS Code Remote Development を実際に使うことを考えてみると、まあアリなのではないかなと思っています。
ただ、手放しで全てOKといえるわけではなくて、本番環境のコンテナどうやって作るかなどは別途考える必要がありそうです。
(開発用の色々なものが入ったままのコンテナを本番に置く勇気は無いので。。。)
とはいえ、原理的にはdockerを開発環境のback-endに置くというだけのことなので、dockerを前提とした開発であればアリだと思います。
構成もシンプルなので、困ったときは通常のdockerコマンドで外から操作できるのも強いところです。
感想と今後の展望
VS Code Remote Developmentという武器を手に入れたので個人開発が大きく捗りそうです。
デバッガの設定が面倒だからと諦めてprintfデバッグしてた環境とか、大きく改善されますね。
あとは開発環境の宗教論争が始まった時に「Windows10Proとdockerとvscodeで統一すればいい」と火に油を注げるようになります。
それでは今回はこれくらいで。