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が表示されることを確認する
デバグを試してみる
- VSCode上でブレークポイントを作成する
- デバッグモードをオンにする
- ブラウザをリロードする
これで任意の箇所で処理を止めて変数の中身などを確認することができます。
テストを試してみる
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本格入門