1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

環境構築のストレスを排除!ゼロから作る自動化CLIツール

Last updated at Posted at 2025-05-16
📚 シリーズ構成:
  • 第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 実行直後に表示される対話ログ(例)
devsetup 実行ログ(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 Taptamai-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で開発をもっと自由にしていきましょう!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?