2025-09-09

ローカル開発環境を作るときにやっていること

ローカル開発環境を作ることがめちゃくちゃ多くて(というかジョインしたサービスで整備されていないことが多くて…w)自分が作ったり改善していることが多いのだが、何をやっているのか、どういうことに気をつけているのかを書いてみる。

Dockerによるローカル開発環境構築

開発環境構築ツールは色々あれど、現状ではDockerコンテナでアプリケーションを動かすのが無難な感じはしている。

docker-compose.ymlを作っておきApp/DBサーバーを立ち上げれるようにしておく。 AWSやメールなどはモックサーバー( localstackMailpit )を入れておく。

開発環境のDockerfileには各言語のランタイム以外には

あたりは入れるようにしている。日本語化やタイムゾーン設定も忘れずに。

Makeタスクの整理

賛否両論あるが、Makeコマンド・タスクは便利だと思っていて、Makefileは必ず用意している。

だいたいこんな感じなものを作っている。

.PHONY: help
help: ## ヘルプ
	@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9_\/-]+:.*?## / {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)

.PHONY: up
up: ## Dockerコンテナの立ち上げ
	docker compose up -d

.PHONY: init
init: ## 初期化
	# ...

.PHONY: install
install: ## ライブラリのインストール
	docker compose exec web composer install
	docker compose exec web npm install

.PHONY: test
test: ## テスト実行
	docker compose exec web ./vendor/bin/phpunit

.PHONY: console
console: ## Webのコンテナに入る
	docker compose exec -it web /bin/bash
	
.PHONY: db/console
db/console: ## DBのMySQLのコンソールに入る
	docker compose exec -it db /bin/bash -c 'mysql -h {host} -u{user} -p{password} {database}'

.PHONY: logs/web
logs/web: ## Webコンテナのログを表示
	docker compose logs -f web

初期構築は make init だけで済ませれるようにしておくとよいのだが、必要なツールやファイルのダウンロードなどが必要になったりするので、あまりワン・コマンドにこだわらないようにしている。

ただ、開発中にクリーンな初期化をしたいケースもあるため、ツールのインストールやファイルのダウンロードを前提とした自動初期化処理をワン・コマンドでできるようしておくと便利ではある。

具体的には

あたりをinitで一気に実行するようにしている。

余談: 環境構築に必要なツール

組織や環境に依存するが、だいたい以下のあたりが必須になってきがち。

ローカル開発環境といえどエミュレーターなどすべてローカルで完結させるには厳しかったりするので、必要に応じて実際のクラウド環境やサービスを使うことがある。1pass cliはそのサービスに対するクレデンシャルを取得するためのもので、テンプレートの.envファイルを置き換えたりできて便利。

READMEの整備

上記をまとめたREADMEファイルを作る。今はだいたい生成AIが良い感じに作ってくれたりする。

あたりを入れている。

その他

開発用のデータを用意する

シードでも良いのだがそれなりに揃ったデータがほしいケースもあるので、

あたりも必要に応じてできるようにしている。

開発しやすくするためのアプリケーション変更

localstackやモックサービスを使うと、どうしてもアプリケーション側の分岐が必要になるのでそちらも実装していく。 どうしてもモックできないサービスもアプリケーション側で処理を差し替えれるようにしておく(これはDIによる差し替えでもif文の原始的な分岐でもどちらでも良い)

デバッグしやすい環境づくり

開発環境で便利なライブラリは積極的に導入している。 また、クエリログを出すようにしたりログを見やすくしたり、デバッグをしやすくなる仕組みも入れる。