開発環境としてのMacとDockerについて考えてみた
みなさんこんにちわ。
いっせいです。
GWいかがお過ごしでしょうか。
私はこの連休中、開発環境をいろいろと試していました。
弊社は開発マシンは主にMac、開発環境はDockerでセットアップできるようになっています。
コマンドいくつかで開発環境がセットアップできる一方で、RSpecなどの実行がかなり遅いという事象が発生していました。
そこでいくつかの方法を試して快適な開発ができないかを試行錯誤していました。
試した方法
今回試したのは以下の3つです
- Docker for Mac を使い構築する普段のスタイル
- macOS に直接環境を構築するスタイル
- VirtualBox上にLinuxをセットアップし、その中でDockerを起動するスタイル
比較対象
比較対象のひとつとして feature spec の実行時間を速度の目安とすることにしました。
ざっくり説明すると以下のような操作を行うものです
- 一覧画面の表示
- データの絞り込み検索
- CSVアップロード/ダウンロード
これらを3つある権限それぞれで検証するものです。
実行結果
それぞれで実行した結果は以下のようになりました
Docker for Mac 11分10秒
macOSに直接 2分35秒
VirtualBox上Docker 3分30秒
びっくりするくらいDocker for Macが遅いという結果になりました
それぞれの所感
Docker for Mac
開発部のほとんどがこのスタイルで開発しているのもあり、セットアップの方法やいろいろな工夫などがしてあって開発はとても素早く着手できます。
しかしそれを食いつぶしてしまうほど遅くなっていることに気づいてしまいました。。。
volume に cached オプションをつけるなどの工夫はしているのですが、それでもという感じです。
macOSに直接環境構築
一部のメンバーよって書かれた手順書があったので、それに従ってセットアップしていきました。
ただ諸事情により /usr/share
以下のファイルを操作する必要があり、セキュリティのために macOS BigSur だとかなり複雑な手順を踏まないと実施することできませんでした。
(後にその手順を不要にしました)
しかしそれを乗り越えれば爆速の環境が待っていました。
一方でDocker Composeを使えばいい感じにしてくれていたDBやRedisなどを自分で忘れずに起動する必要がありました。
VirtualBox上Docker
今回はとりあえずということでVagrantを使わず自分でぽちぽちとVirtualBox上にUbuntuをセットアップしてDockerを使ってみました。
最初はディスク容量を少なく構築してしまい、Dockerイメージをビルドしていたら容量不足になってしまいました😂
ディスク容量を調整したあとはとてもスムーズにセットアップが完了しました。
今回はUbuntu上でもろもろ操作をしてみました。
普段macOSを使っている身からするとデスクトップ環境がまだまだ弱いなと思いました。
本当にDocker for Mac使う?
今回は feature specの実行のみでの比較だったので、実際に開発をすると違ってくるのかもしれないですが、
開発環境のセットアップのしやすさと速度を鑑みた場合にはVirtualBox上にLinuxをインストールし、その上でDockerを使うのが今考えられるベターな選択肢かなと思いました。
平準化するためにはVagrantを使ってみんなが同じようにセットアップできるようにするのがよさそう。
mac上で開発をしてvagrant sshをしてサーバ立ち上げるという形になるのでしょうか。
より速度を求めるならMac上に開発環境をセットアップするのもありだとは思います。
ただそれは以下の条件があるからだと思います
- Carely は1アプリケーション/1リポジトリで開発がされていること
- 頑張れる程度の数のミドルウェアで構成されていること
- セキュリティで守られている部分の操作が必要ない
もし社内で複数のサービスがあり、それごとに開発環境が違うとなるとすこし面倒だろうなとは思います。
またバージョンがあがるたびにセキュリティが強固になっているのでシステム領域の操作が必要ならば厳しいと思います。
となるとDocker for Macを使う理由があまり見当たらないなというのが自分の所感です。
とはいえセットアップの手軽さはあるのでVirtualBox上のDocker並にDocker for Macが速くなることを祈っています。
Docker for Macを支持するという方はぜひ私のTwitterに一言いただけるとうれしいですw
https://twitter.com/ise_tang
ということで私のGWの活動報告でした。
それではまた!