LoginSignup
1
2

More than 3 years have passed since last update.

IntelliJ + Dockerでローカル環境を極力汚さずPHP+MySQL開発環境を構築する

Posted at

概要

PHP + MySQL の環境を docker-compose で構築し、IntelliJ上でdockerに接続してPHPUnitをする手順を記載してます。
Docker上に構築した実行環境を使うようにすることで、いちいちローカルにPHPやMySQLをインストールしなくてもよくなるようになり、ローカル環境の汚染を防ぐことができ、「案件によって使うMySQLのバージョンが異なるせいで毎回再インストールしないといけないんだよぉ」みたいな煩わしさから解放されます。

かつ、ローカルに環境を構築していた時と同様にIDEからサクっとテストを走らせることができるため、なんかハッピーなアレになれます。多分。

image.png

実行環境

  • Windows 10 64bit
  • IntelliJ Ultimate Edition 2021.1
  • Docker Desktop v20.10.5

今回はWindowsで構築したけど、Macでも普通にできるはず。

前提

  • DockerやIntelliJ はインストール済

IntelliJ のプラグインのインストール

以下をインストールしておきます。

  • PHP
  • PHP Docker
  • PHP Remote Interpreter
  • PHPUnit Enhancement
  • Docker

とりあえずトライ&エラーで入れたプラグインなんで、いくつか不要なものもあるのかも。

Dockerfileなどの作成

以下のフォルダ構成にします。

<Root>
・ local // Docker環境用
├ php
│ ├ php.ini
│ └ Dockerfile
└ mysql // 最終的にデータファイルが入る
・ src // ソースファイル
・ docker-compose.yml
local/php/Dockerfile
FROM php:7.2-fpm
RUN apt-get update
RUN apt-get install -y vim git zip unzip
RUN docker-php-ext-install pdo_mysql
COPY --from=composer /usr/bin/composer /usr/bin/composer
COPY php.ini /usr/local/etc/php/
local/php/php.ini
date.timezone = "Asia/Tokyo"
docker-compose.yml
version: '3'
services:
  # Webサーバーとして動かす場合(今回はユニットテスト書くのが目的なのでこの部分は割愛)
  # nginx:
  #  image: nginx:latest
  #  ports:
  #    - 8080:80
  #  volumes:
  #    - ./local/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
  #    - ./src:/var/www/html
  #  depends_on:
  #    - php
  php:
    build: ./local/php
    volumes:
      - ./src:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:5.7
    ports:
      - 13306:3306
    volumes:
      - ./local/mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
    container_name: mysqldb

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - 8888:80
    depends_on:
      - db

これらのイメージ&コンテナを作成しておき、 phpにCLIで入って、 composer install をやっておきます。

IntelliJの設定

Dockerの設定

File -> Settings にてSettingsダイアログを出し、 Build, Execution, Deployment -> Dockerを選択します。
ひとつDockerのサービスを作成しておけばOKです。

image.png

PHPの設定

Languages & Frameworks -> PHP を選択し、CLI Interpreter の「...」ボタンを押下
image.png

CLI Interpreters から設定を作成し、「From Docker, Vagrant, VM, WSL, Remote...」を選択

image.png

Docker Composeを選択し、実行サービス(今回の例だとphp)を選択します。

image.png

最初の設定のは不要な場合は削除しちゃいます。

PHPUnitの設定

Languages & Frameworks -> PHP -> Test Frameworks を選択し、CLI Interpreter に、上記で作成したインタプリタを選択します。

image.png

テストの設定

最後に、 実行の設定を行います。

Run / Debug Configurationsから、PHPUnitのを作成

image.png

あとはいつも通りの感じでテストを起動すると、IntelliJ は自動的にDocker上の実行環境を使ってテストを行い、MySQLにも接続するテストが実行できます。

まとめ

いい時代になりましたねぇ。Docker便利。
そのうちGoやJavaやFlutterとかも同様のやり方でできないか調べたい

1
2
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
2