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_docker.png

この構成のメリットは、XAMPP の Apache を使用している分には、Docker が遅くなる原因であるバインドマウントを経由しないということです。 ソースコードは Windows に置いたままなので、普段の開発作業は常に爆速な状態で作業を行うことができます。 XAMPP の Apache を構築するという手間が必要ですが、XAMPP は複数インストールすることも可能ですし、それほど手間ではありません。 XAMPP で開発環境を構築する方法については、たくさんのブログ記事が存在しますので、検索すればすぐに出てきます。 あまり困ることはないでしょう。

Docker の Apache コンテナは、普段の開発環境としては使用しませんが、 どうしても Linux じゃなければならない動作確認をしたいときだけ使うというテスト用途として置いておきます。 リリース前の動作確認などに使用すると良いでしょう。 バインドマウントを使用しているので速度はかなり遅いですが、そのままにしておきます。 普段の開発環境として使うのなら遅いと許容できないですが、たまに使うぐらいなら別に遅くても許容できます。 もし速度が気になるなら、名前付きボリュームであれば手軽に設定できるので使用しても良いでしょう。 WSL 2 を使ってしまったら本末転倒ですので注意しましょう。 バインドマウントを使用せずに、コンテナに入って Git で pull するだけでも良いかもしれません。

Docker の Apache 以外のコンテナは、必要なものがあればそのまま使用して良いと思います。 Docker 側でポートマッピングしておけば XAMPP からも普通に繋がりますし、 バインドマウントを使用していないコンテナは速度も遅くなりません。 Docker には Docker のメリットがありますから、そのメリットを享受しましょう。

関連記事

Windows に XAMPP を複数インストールできれば、環境を切り替えて作業したりすることができるので便利です。Docker などのコンテナ技術があるこの時代に、まだ XAMPP なのかと思われるかもしれませんが、Windows で開発するのなら、なんだかんだ言ってやっぱり XAMPP が一番簡単ですし、処理速度も ...
XAMPP に ImageMagick をインストールする方法がかなりわかりづらく混乱してしまったので、ここにインストール方法を記載しておきます。自分への備忘録です。ImageMagick は脆弱性が多いようなので注意。PHP から ImageMagick を使用するにはPHP から ImageMagick を使用する ...
最近のWebアプリでは、キャッシュやセッションを保存する際に、Redis がよく使われていたりします。しかしながら Redis は XAMPP には含まれていないため、XAMPP から Redis を使うためには XAMPP の環境に少し手を加える必要があります。そこで、その手順を記載しておきます。いまさら感も多々あり ...
XAMPP で開発する際に、PHP のメール送信関数 mail() もしくは mb_send_mail() を使うと、エラーが出てしまい困ることがあります。ちゃんとメールサーバーの設定をすれば良いじゃないかと思うかもですが、メールサーバーを用意するのは面倒ですし、実際にメールが外部に送信されてしまってもそれはそれで困り ...

記事検索

最新記事

人気記事

RSSフィード

お知らせ

  • 2023/10/01 NEW
    ツール「ダミー画像ジェネレーター」の「文字設定」の「エフェクト」に「塗りつぶし」 を追加しました。
    文字が見にくい場合に見やすくすることができます。
  • 2023/10/01 NEW
    ツール「テキスト画像ジェネレーター」の公開を終了しました。
    お問い合わせ等がありましたらこちらよりお願いいたします。
  • 2023/09/24 NEW
    ツール「caseスタイル変換ツール」の「変換結果」に「SNAKE_CASE」、「KEBAB-CASE」 を追加しました。
    大文字のスネークケースとケバブケースに変換できます。
  • 2023/09/16
    ツール「caseスタイル変換ツール」で「camelCase / PascalCase」 から 「snake_case」、「kebab-case」 への変換の際に、
    より自然な形式に変換されるように修正しました。
    不具合やバグを発見した場合は、連絡をいただけると助かります。
  • 2023/08/28
    ブログ記事「Microsoft Edge のページの角の丸みを元に戻す方法」を追加しました。

フィードバック

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

匿名でフィードバックする
匿名でフィードバックする

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

なお、このフォームから入力された内容について、管理者から返信はできませんので注意してください。 もし、管理者からの返信が必要であれば、Twitter もしくは、お問い合わせより、お願いします。

  • フィードバックの送信が完了しました。

Ads