XAMPP と Docker のハイブリッド環境を構築する方法
Windows 上の Docker を高速化するためには、名前付きボリュームを使うか、WSL 2 を使うと良いというのは、以前の記事「Windows の Docker 環境を高速化する方法」で書きましたが、 それら2つの方法に並ぶ、第3の方法を見つけたので、備忘録としてメモしておきます。
結局バインドマウントが原因
以前の記事で書きましたが、Windows の Docker が遅いのは、ほぼほぼバインドマウントが原因です。 名前付きボリュームや WSL 2 を使用することで、一定の高速化を図ることができますが、それらの方法にはそれぞれデメリットも存在します。
名前付きボリュームを使用する方法のデメリットは、ファイルがバラバラに配置されることになることです。 どのファイルがホストに置かれているのか、名前付きボリュームに置かれているのか混乱しますし、 名前付きボリュームに置いたファイルを変更するためにはコンテナに入って作業しなければならなくなります。 また、ホストに置かれているファイルは相変わらず遅いままです。
WSL 2 を使用する方法のデメリットは、その難しさと管理のしづらさです。 WSL 2 に環境を作るのはかなり大変ですし、仮に WSL 2 で環境が作れたとしても、今度は Windows の GUI のツールの速度が遅くなったりします。 Git が遅くなるのは良い例でしょう。 また、WSL 2 で何か問題があったりすると解決が困難ですし、それに引きずられて Docker が起動しなくなったりしたらかなり困りものです。 WSL 2 を使用すれば、確かにバインドマウントによる遅延は無くなりますが、それ以外のことは良いことばかりではないのです。
結局のところ、この2つの方法は、バインドマウントを使用した状態で高速化させるための方法です。 逆に言えば、バインドマウントを高速化する必要が無ければ、名前付きボリュームも WSL 2 も使用しなくても良いということになります。 そうです。 第3の方法は、バインドマウントを高速化させません。 バインドマウントを高速化させるのを諦め、別方向からのアプローチを行います。
XAMPP の Apache を使う
第3の方法、それは XAMPP の Apache を使用することです。
三歩進んで二歩下がるとはまさにこのこと。 個人的には「Windows では XAMPP が最速の開発環境である」という結論に至りました。 いやいや冗談じゃないですよ? 至って本気です。 この時代に、まだ XAMPP なのかと思われるかもしれませんが、 Windows で開発するのなら、なんだかんだ言ってやっぱり XAMPP が一番簡単ですし、処理速度も爆速です。
なぜ XAMPP を使用するかと言えば、Docker のバインドマウントが高速化しただけでは、作業全体の効率が上がらなかったからです。 作業効率を上げるためには Apache だけが早ければ良いという話ではなく、VS Code などのテキストエディタ、Git などのソース管理ツールなど、 それら開発時に使用する全てのツールの動作が早く、そしてストレスが無い環境である必要があるのです。 そもそも問題が起きない環境であるということも重要ですし、すぐにネットで解決策が見つかることも重要です。 問題の解決に費やしている時間がもったいないのです。 一部の作業の効率が上がったとしても、トータルで全体の作業効率が下がっていては意味が無い。 あまり頻繁に行うことのない開発環境の構築という作業のために、普段の開発作業の効率を下げたくない。 むしろ、普段の開発作業の効率を上げるためなら、開発環境の構築の作業が手間でも良い。 どちらかを取らねばならぬなら、普段の開発作業の効率を取りたい。 たった 1% のために、残りの 99% を捨てたくない。 そういう話です。
XAMPP と Docker を組み合わせる
では、具体的にどうするのかというと、Docker の Apache コンテナだけは使わず、代わりに XAMPP の Apache を使用します。 下記の図が分かりやすいと思います。
この構成のメリットは、XAMPP の Apache を使用している分には、Docker が遅くなる原因であるバインドマウントを経由しないということです。 ソースコードは Windows に置いたままなので、普段の開発作業は常に爆速な状態で作業を行うことができます。 XAMPP の Apache を構築するという手間が必要ですが、XAMPP は複数インストールすることも可能ですし、それほど手間ではありません。 XAMPP で開発環境を構築する方法については、たくさんのブログ記事が存在しますので、検索すればすぐに出てきます。 あまり困ることはないでしょう。
Docker の Apache コンテナは、普段の開発環境としては使用しませんが、 どうしても Linux じゃなければならない動作確認をしたいときだけ使うというテスト用途として置いておきます。 リリース前の動作確認などに使用すると良いでしょう。 バインドマウントを使用しているので速度はかなり遅いですが、そのままにしておきます。 普段の開発環境として使うのなら遅いと許容できないですが、たまに使うぐらいなら別に遅くても許容できます。 もし速度が気になるなら、名前付きボリュームであれば手軽に設定できるので使用しても良いでしょう。 WSL 2 を使ってしまったら本末転倒ですので注意しましょう。 バインドマウントを使用せずに、コンテナに入って Git で pull するだけでも良いかもしれません。
Docker の Apache 以外のコンテナは、必要なものがあればそのまま使用して良いと思います。 Docker 側でポートマッピングしておけば XAMPP からも普通に繋がりますし、 バインドマウントを使用していないコンテナは速度も遅くなりません。 Docker には Docker のメリットがありますから、そのメリットを享受しましょう。