📚 シリーズ構成:
- 第1回:導入編
└ 競合は起こさせない!環境構築のストレスを限界まで排除してみた - 第2回:設計編
└ Infinity Bash Framework に着想を得た独自モジュール設計と構成 - 第3回:Laravel編
└ Laravel + Breeze + Docker による一発構築の裏側 - 第4回:Symfony編(予定)
└ Symfonyにも対応!拡張性を支える基盤アーキテクチャ - 第5回:Tips編
└ CLIツール開発で得たノウハウと小技集 - 第6回:まとめと今後の展望
└ CLIツールを通して見えた「再現性のある開発」
🗂 第1回目の目次
- はじめに(背景・目的)
-
devsetup
とは? - 「競合は起こさせない」設計思想
- 実行例(make devsetup)
- Makefileの工夫(実行バイナリの切替とHomebrew展望)
- 今後の記事について
- GitHubリンク
- おわりに
🧩 はじめに
開発環境構築って、何度やっても面倒じゃないですか?
特に Docker で複数の Laravel や Symfony プロジェクトを切り替えるような構成だと、
- ポート競合
- コンテナ名の衝突
- 初期化漏れ
-
.env
書き換え忘れ
といった“小さなミス”が積み重なって、ストレスと時間の無駄につながってしまう。
「毎回同じ作業を手でやるの、もう限界だな」と思ったのが、
この CLI ツール devsetup
を作るきっかけでした。
⚙️ devsetup
とは?
自動で環境を作る。競合も起こさせない。
開発者の「初手」を徹底的に省力化する CLI ツールです。
🎯 主な特徴
-
Makefile から
make devsetup
で一発起動(今後はmake run
に変更予定) - Docker を用いた環境構築(
php + nginx + MySQL
) - Laravel + Breeze + OAuth 認証を含んだ初期構成を自動セットアップ
- Symfony 環境もオマケで用意(拡張性あり)
-
Infinity Bash Framework の思想に着想を得た独自モジュール構成
- 各モジュールに
init.sh
,configure.sh
,execute.sh
,cleanup.sh
を明示的に分離 - 処理順を明示しつつ、拡張や切替がしやすい構成に設計
- 各モジュールに
🚫「競合は起こさせない」設計思想
devsetup
が最も意識しているのは、あらゆる競合の排除です。
種類 | 防止策 |
---|---|
ポート競合 | 自動チェックと警告処理 |
コンテナ名バッティング | プロジェクト名からユニークに命名 |
構成ファイル衝突 |
.env , default.conf をプロジェクト単位で管理 |
初期化忘れ |
run_phase によるライフサイクル制御 |
# フェーズを順に完走させる流れ
for phase in init configure execute cleanup; do
source "${DEVSETUP_ROOT}/modules/${mod}/${phase}.sh"
done
-
execute
フェーズではdocker
モジュールを先頭に固定
if [[ "$phase" == "execute" ]]; then
mods=( docker "${ENABLED_MODULES[@]/docker}" )
fi
こうして「フェーズ」「モジュール」「順序」の 3 軸で漏れや順番ミスをゼロ化しています。
🚀 実行例
git clone https://github.com/tamai-hideyuki/devsetup.git
cd devsetup
make devsetup # ※ 今後は make run に変更予定
選択メニューが表示され、構成に応じて各モジュールが自動的に呼び出されます。
再現性・冪等性を確保しつつ、短時間で環境構築が完了します。
↓ make devsetup
実行直後に表示される対話ログ(例)
🔄 Makefileの工夫(実行バイナリの切替と Homebrew 展望)
ifeq ($(wildcard ./bin/devsetup.sh), ./bin/devsetup.sh)
@echo "Launching devsetup.sh (開発用)"
@bash ./bin/devsetup.sh
else
@echo "Launching devsetup (Homebrew用)"
@./bin/devsetup
endif
- ローカル開発中は
bin/devsetup.sh
を直接実行 - 将来的に Homebrew Tap(
tamai-hideyuki/homebrew-dev
)を用意し、
brew install tamai-hideyuki/dev/devsetup
で配布できる設計へ移行予定
現在は Homebrew 対応は未実装ですが、分岐ロジックだけ先行で実装している状態です。
📌 今後の記事について
- 設計・構成編(core.sh / logger.sh の役割)
- Laravel 編(Breeze + OAuth を CLI で構築)
- Symfony 編(軽量アプリで実践)
- Tips 集(色付きログ、競合検知など)
🐙 GitHub
🔗 https://github.com/tamai-hideyuki/devsetup
🙌 おわりに
構築に毎回 30 分かかっていた人が、3 分で済むようになったら、
きっと次に進む余力が生まれます。
「めんどう」を減らして、「つくる」に集中するための CLI。
Homebrew 対応も含め、まだまだ進化の途上です。
次回もお楽しみに。CLIで開発をもっと自由にしていきましょう!