LoginSignup
2
1

Dockerを使ってAtCoder用のPHPのPHP Unitでテストの自動化とxdebugでデバッグをする環境を構築する

Last updated at Posted at 2023-10-01

AtCoder用の環境を構築する記事です。

茶色以上を目指す方向けにテストの自動化とデバッグ環境をローカルにdockerで構築する記事です。エディターはVSCodeを使います。私はmacを使ってます。
とりあえずpaiza等のブラウザの実行環境でAtCoderをやってみたのですがテストの自動化とデバッグができる環境が欲しいと思ってDockerで構築してみました。
LinuxとDockerの基本的な操作方法には触れませんしDockerとDocker composeがインストールしてある前提で書きます。しかし、コマンドはとっても簡単なのでコピペで動くはずです。
一番下にGitHubのリンクも載せてます。

ファイル構成

┌ .vscode
│ └ launch.json
├PHP
 └ docker
   ├ composer.json
   ├ docker-compose.yml
   └ Dockerfile
 ├ html
   └index.php
 └ php.ini

php.iniを作成する

xdebugの設定が書いてあります。デバッグ用のポートは9000を使ってます。

[xdebug]
xdebug.client_host = host.docker.internal
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.discover_client_host = 0
xdebug.remote_handler = "dbgp"
xdebug.client_port = 9000

Dockerfileを作成する

FROM php:8.0-apache

COPY composer.json /home/

# パッケージリスト更新後にパッケージをインストール
RUN apt-get update && apt-get install -y git zip unzip && \
    # xdebug拡張のインストール
    pecl install xdebug && \
    docker-php-ext-enable xdebug
# composerのインストール
COPY --from=composer /usr/bin/composer /usr/bin/composer

WORKDIR /home

RUN composer install

WORKDIR /var/www/html

docker-compose.yml

version: "3.8"

services:
  php-atcoder:
    # カレントディレクトリでイメージを構築
    build: .
    volumes:
      - ../php.ini:/usr/local/etc/php/php.ini
      - ../html:/var/www/html
    # プロセスを継続させてコンテナの正常終了を防ぐ
    stdin_open: true
    ports:
      - "8080:80"

VSCodeでPHP Debug拡張機能を追加する

VSCodeの拡張機能で PHP Debugと検索してください

launch.jsonを作成する

デバッグ用のポート9000を指定している
pathMappingsの⚪︎の部分はローカルホストのhtmlディレクトリまでの絶対参照パスを表しています。

{
  "configurations": [
    {
      "name": "XDebug on docker",
      "type": "php",
      "request": "launch",
      "port": 9000,
      "pathMappings": {
        "/var/www/html": "/Users/○○○○/○○○○/○○○○/html"
      }
    }
  ]
}

index.phpをhtml/以下に作成する

xdebugを試すのに使います。

<?php
echo "hello, AtCoder!" .PHP_EOL;
$a = 1;
echo $a .PHP_EOL;
$a = 2;
echo $a .PHP_EOL;

コンテナを起動する

docker-compose.ymlがあるディレクトリに移動して

docker compose up -d

ブラウザで localhsot:8080に hello, AtCoder! 1 2が表示されることを確認する

デバグを試してみる

  1. VSCode上でブレークポイントを作成する
  2. デバッグモードをオンにする
  3. ブラウザをリロードする
    これで任意の箇所で処理を止めて変数の中身などを確認することができます。

テストを試してみる

html/以下にtest.phpを作成する

function addition()
{
    return 1 + 1;
}

html/以下にCalculationTest.phpを作成する

<?php
require_once "test.php";

use PHPUnit\Framework\TestCase;

class CalculationTest extends TestCase
{
    public function testAddition()
    {
        $this->assertSame(2, addition());
    }
}

テストを実行してみる

docker-compose.ymlがあるディレクトリで実行する

docker-compose exec php-atcoder /home/vendor/bin/phpunit /var/www/html/CalculationTest.php
PHPUnit 9.6.13 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 00:00.004, Memory: 4.00 MB

OK (1 test, 1 assertion)

こんな感じの画面が表示されます。

終わりに

GitHubにリポジトリを載せてますので
クローンして試すこともできます。タグ1.0.0をご利用ください。

参考

xdebugの環境構築

PHP Unitの環境構築

本の参考 PHP本格入門

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