環境構築
BEAR.Sundayプロジェクトの開発環境構築方法を説明します。お使いの環境に応じて適切な方法を選択してください。
構築方法の選択
方法 | 対象OS | 特徴 | 推奨用途 |
---|---|---|---|
malt | macOS, WSL2, Linux | Homebrew ベース、軽量、設定共有可能 | 個人開発、チーム開発 |
Docker | macOS, Windows, Linux | コンテナベース、環境の完全再現 | チーム開発、CI/CD |
手動構築 | 全OS | 既存環境活用、細かい制御可能 | 既存インフラ活用 |
malt による環境構築
概要
malt は Homebrew をベースとした開発環境管理ツールです。
maltの主な特徴:
- 完全にローカル: 全ての設定・データがプロジェクトディレクトリ内に保存
- クリーンな削除: プロジェクトフォルダを削除するだけで環境が完全に消える
- 専用ポートコマンド:
mysql@3306
、redis@6379
など専用ポートのエイリアス - グローバル汚染なし: システム全体のMySQL/Redis等に影響を与えない
- 設定の可視化: 全ての設定ファイルがプロジェクト内で管理・共有可能
前提条件
- macOS または Linux
- Homebrew がインストール済み
インストール
# Homebrew tap の追加
brew tap koriym/homebrew-malt
# malt のインストール
brew install malt
基本的な使い方
# プロジェクトの初期化
malt init
# 設定ファイルの生成
malt create
# 依存関係のインストール(必要に応じて)
malt install
# サービス開始
malt start
# 環境変数の設定(各セッションで実行)
source <(malt env)
設定ファイル
malt は以下のファイルで環境を管理します:
malt.json # malt の設定
malt/
conf/
my_3306.cnf # MySQL設定
php.ini # PHP設定
httpd_8080.conf # Apache設定
nginx_80.conf # Nginx設定
これらのファイルはプロジェクトに含めることで、チーム全体で環境を共有できます。
サービス管理
# 状態確認
malt status
# 開始/停止/再起動
malt start
malt stop
malt restart
# 特定のサービスのみ
malt start mysql
malt stop nginx
データベース操作
# 専用ポートコマンド(推奨)
mysql@3306 # プロジェクト専用のMySQL接続
redis@6379 # プロジェクト専用のRedis接続
# 従来の方法
mysql --defaults-file=malt/conf/my_3306.cnf -h 127.0.0.1
# データベース作成例
mysql@3306 -e "CREATE DATABASE IF NOT EXISTS myapp"
重要: mysql@3306
はプロジェクト専用の接続で、システムのグローバルなMySQLとは完全に分離されています。
Docker による環境構築
概要
Dockerを使用することで、OS に依存しない一貫した開発環境を構築できます。
Dockerの注意点:
- グローバルコマンドの競合: システムの
mysql
コマンドはグローバルなMySQLを指す - コンテナ専用接続: Dockerコンテナ内のMySQLには専用の接続方法が必要
- ポート競合リスク: 3306ポートなどがシステムサービスと競合する可能性
前提条件
- Docker Desktop がインストール済み
- Docker Compose が利用可能
基本的な docker-compose.yml
version: '3.8'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ""
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
MYSQL_DATABASE: myapp
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./docker/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
command: --default-authentication-plugin=mysql_native_password
redis:
image: redis:alpine
ports:
- "6379:6379"
memcached:
image: memcached:alpine
ports:
- "11211:11211"
volumes:
mysql_data:
使用方法
# 環境の起動
docker-compose up -d
# 状態確認
docker-compose ps
# ログ確認
docker-compose logs mysql
# 環境の停止
docker-compose stop
# 完全削除(データも削除)
docker-compose down -v
データベース接続
# ホストから接続(ポート指定必須)
mysql -h 127.0.0.1 -P 3306 -u root
# コンテナ内から接続(推奨)
docker-compose exec mysql mysql -u root
注意: システムに mysql
がインストールされている場合、単に mysql
と実行するとシステムのMySQLに接続してしまいます。Dockerコンテナのデータベースにアクセスするには、必ずホスト・ポート指定またはコンテナ内実行が必要です。
手動環境構築
PHP環境
# macOS (Homebrew)
brew install php@8.4
brew install composer
# Ubuntu/Debian
sudo apt update
sudo apt install php8.4 php8.4-{cli,mysql,mbstring,xml,zip,curl}
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
# CentOS/RHEL
sudo dnf install php php-{cli,mysql,mbstring,xml,zip,curl}
MySQL環境
# macOS (Homebrew)
brew install mysql@8.0
brew services start mysql@8.0
# Ubuntu/Debian
sudo apt install mysql-server-8.0
sudo systemctl start mysql
# CentOS/RHEL
sudo dnf install mysql-server
sudo systemctl start mysqld
拡張機能
開発に有用なPHP拡張:
# Xdebug(デバッグ用)
brew install php@8.4-xdebug # Homebrew
sudo apt install php8.4-xdebug # Ubuntu
# Redis
brew install php@8.4-redis # Homebrew
sudo apt install php8.4-redis # Ubuntu
# APCu(キャッシュ)
brew install php@8.4-apcu # Homebrew
sudo apt install php8.4-apcu # Ubuntu
プロジェクト固有の設定
環境変数
プロジェクトルートに .env
ファイルを作成:
# データベース接続(MySQL)
DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=myapp
DB_USER=root
DB_PASS=
DB_DSN=mysql:host=127.0.0.1;port=3306;dbname=myapp
# データベース接続(SQLite)
DB_DSN=sqlite:var/db.sqlite3
# キャッシュ(Redis)
REDIS_HOST=127.0.0.1:6379
# セッション(Memcached)
MEMCACHED_HOST=127.0.0.1:11211
データベースマイグレーション
Phinxを使用する場合:
# Phinx インストール
composer require --dev robmorgan/phinx
# 設定ファイル作成
./vendor/bin/phinx init
# マイグレーション作成
./vendor/bin/phinx create MyMigration
# マイグレーション実行
./vendor/bin/phinx migrate
開発サーバー
PHP内蔵サーバー
# ポート8080で起動
php -S 127.0.0.1:8080 -t public
# Xdebug有効
php -dzend_extension=xdebug.so -S 127.0.0.1:8080 -t public
malt サーバー
# ApacheまたはNginxを選択して起動
malt start apache # Apache (http://127.0.0.1:8080)
malt start nginx # Nginx (http://127.0.0.1:80)
# サービス確認
malt status
# 全てのサービス起動
malt start
# 全てのサービス停止
malt stop
# 特定サーバー停止
malt stop apache
malt stop nginx
トラブルシューティング
ポート競合
使用中のポートを確認:
# macOS/Linux
lsof -i :3306
netstat -tulpn | grep :3306
# プロセス終了
kill -9 PID
PHP設定
設定ファイルの場所確認:
php --ini
php -m # ロード済みモジュール確認
MySQL接続エラー
# 接続テスト
mysql -h 127.0.0.1 -P 3306 -u root -p
# サービス状況確認(Linux)
sudo systemctl status mysql
# エラーログ確認
sudo tail -f /var/log/mysql/error.log
malt 固有の問題
# サービス状況確認
malt status
# 設定リセット
malt stop
rm -rf malt/
malt create
malt start
CI/CD での環境構築
GitHub Actions
name: Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8.0
env:
MYSQL_ROOT_PASSWORD: ""
MYSQL_ALLOW_EMPTY_PASSWORD: yes
MYSQL_DATABASE: test_db
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
extensions: mbstring, xml, pdo_mysql, mysqli, intl, curl, zip
- name: Install dependencies
run: composer install
- name: Run tests
run: ./vendor/bin/phpunit
環境選択の指針
開発環境と本番環境の違い
開発環境では透明性と直接性が重要
- malt:
mysql@3306
で即座にプロジェクト専用DBアクセス、設定ファイル直接編集、ネイティブファイルアクセス - Docker: 有名。コンテナ経由のアクセス、設定の確認が複雑、仮想化オーバーヘッド
開発環境の共有に関しては、どちらの方法も優秀です。
本番環境では再現性と監視機能が重要
- Docker: どこでも同じ動作、豊富な監視ツールエコシステムで実質Docker一択
まとめ
- 日常開発・学習: malt推奨
- チーム開発: malt(設定共有)またはDocker
- 本番環境・CI/CD: Docker一択
- 複雑な構成: Docker
各環境の詳細な設定例は、個別のチュートリアルを参照してください。