2025年2月8日
Laravel開発環境のHowを発信している人は多いけど、Whyを発信している人が少ないと感じたので私の考えを発信する。
前提
- 個人開発を行う上での話
- 私のよく使うOSはWin
体験が良いとは
現在の私の考えだと
体験が良い = 開発に割く時間割合が多い
である。
だから、開発環境を構築・調整する時間が多いと体験が悪いと言える。
体験が良い開発環境の結論
現在の結論は、「仮想環境を使わないネイティブな開発環境を作る」である。
もう少し詳しく言うと
- 開発初期 or Linuxに依存しないなら、
php artisan serve
やLaragon。MacならHerd・Valetを使う。 - 開発が乗ってきたり、Linux依存の何かが必要ならLinuxOSのPCにDockerで環境を作り開発する。
という感じ。
VM on Winは体験が良くない
私が初めて構築した開発環境がこのWin上にVMを置いて構築する開発環境なんだけど、これは体験が悪い。
理由は以下
- そもそも環境構築に時間がかかる
- WinとVMの環境差分が原因でトラブルが多々ある
- フォーマット形式の差分のせいでWinとのファイル同期がおっそい
ただ、もちろんメリットもあって
- 本番環境と似た環境を作れて、学べる
- Linux依存のコマンドやツールが使える
- 分離されていてWinに干渉しにくい
ただ、これらのメリットは先の「体験が良い」とはまた違うところ。
私はVMから入ったので色々学べたという点では良かったと思うんだけど、体験は良くないよね。
ただ、私はHomesteadとかをしっかり使ったことがないので、もしかしたら上の課題を改善してくれてるかもしれない。
Docker on Winは体験が良くない
Win上にWSL2環境つくって、WSL2上にDocker環境作るっていうやつ。
上のVMよりは体験が良いと思うけど、こちらも良くない。
理由は以下
- 自分のプロジェクトに合ったDockerfileやdocker-compose.yaml書くのが面倒
- WinとWSL2上のフォーマット形式差分のせいで、ラグがある
docker-compose.yamlを書く面倒さはSailで解決できなくないんだけど、Sailは正式にPodmanに対応していないので使いたくないという個人的な好みがある。
そもそもpodmanを使うなら良い体験を求めるなという気もする
WinとWSL2フォーマット形式の差分ラグは、LaravelプロジェクトをWSL2側に置くことで改善できると言われているが、そうするとWin上のIDE↔WSL2でラグが発生する。
最近だとIDEのコアをWSL2上に置き、それをWinから遠隔操作するリモートIDEみたいなのもあるが、リモートなこともあってか現時点ではそもそも操作感が良くなかった。
これの操作感が良くなると話は変わってくるかもしれない。
大体の問題はファイルの同期
Win上に仮想環境作り、それをWinから弄ろうとすると体験が悪い。
私の場合、これの原因の大半がファイルの同期問題だった。
実際に私が遭遇した簡単に思い出せるトラブルは
- VM↔共有フォルダ↔Win
フォーマット形式の差異から権限問題でシンボリックリンクを作れない - VM↔Samba↔Win
シンプルに遅い。また、時々Win上のIDEがファイルの変更を検知してくれなかったりする - Docker↔Volume↔Win
シンプルに遅い。
これ等を解決するには、開発環境をIDEごと仮想環境に持っていくということをしなきゃいけない。そうするとそれはそれで、操作感が悪かったりとトラブルが発生する。
だから、ネイティブな開発環境を作るところに至った。
Laragonならネイティブな開発環境を簡単に作れる
紆余曲折を経て、私が至った現時点での結論がネイティブな開発環境を作るなんだけど、そのきっかけがこのLaragon。
初めてLaragonを触ったときは本当に衝撃的だった。
全てのアプリケーションがWin上で動くのでファイルの形式差分もないし、トラブルもない。
ファイルの形式差分がないからIDEから読み込みも、サーバーからの読み込みもめちゃはやい。
しかも、0からLaravel環境構築までが盛りなしで数分で終わる。
開発体験が良すぎてびっくりした。いままでもLaravel開発楽しかったけど、Laragonにして倍は楽しくなった。本当に。
LaragonでRedisは使えない
Laragonはとても素晴らしいんだけど、Win上で全てを動かす関係上、Winに対応していないRedisが使えない。
Win上に仮想環境を作ればRedisは使える。でも、仮想環境にすると体験が落ちるから戻りたくない。
だから、私はPCのOSをLinuxにしてみた。
LinuxOSのPCで開発するのが、今のところの結論
PCのOSをLinuxにし、そこでDocker環境作れば仮想環境は一層になるし、ファイルのフォーマット形式も一緒になるのでファイルの同期問題も気にならない。
本当はここでもLaragon使いたいんだけど、Linux版は無いのでDockerを使っているという感じ。
ただ、新しくプロジェクトを開始する毎にDockerで環境構築するのは少し面倒なので、Linuxが必要 or 開発が進んできた場合にのみこのフェーズに移るような感じでやっている。
つまり、一番最初の
が現在の結論。
私の結論が変わり次第、更新します。
以上です。