SQLServerだからといって諦めずに、CircleCIでテスト自動化する（2021年更新版）

## はじめに
2017年に書いた「[SQLServerだからといって諦めずに、CircleCIでテスト自動化する](https://qiita.com/imunew/items/07aeff7041bd5edd9872)」が色々古かったので、アップデートしてみました。

尚、記事と合わせてソースコードも更新しました。
[imunew/php-with-docker-mssql](https://github.com/imunew/php-with-docker-mssql)

## 変更点
変更したポイントを列挙していきます。

### `Microsoft SQL Server on Linux`が新しくなった
詳しくは「[Docker内の php から SQL Server に接続する（2020年版）](https://qiita.com/imunew/items/f12d37a8df248b190e29)」を参照いただきたいのですが、`Docker`イメージと`PHP`用のドライバを更新しました。

```Dockerfile
FROM php:7.4

# Install basic packages and extensions
RUN apt-get update \
  && apt-get install -y zlib1g-dev libzip-dev wget gnupg \
  && docker-php-ext-install zip opcache

# Composer install
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
ENV COMPOSER_ALLOW_SUPERUSER 1

# Install SQL Server extensions
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17 mssql-tools
RUN apt-get install -y unixodbc-dev libgssapi-krb5-2
RUN pecl install sqlsrv
RUN pecl install pdo_sqlsrv
RUN docker-php-ext-enable sqlsrv
RUN docker-php-ext-enable pdo_sqlsrv

CMD ['php']
```

### `CircleCI`の設定ファイルを`v1`から`v2`へ
`CircleCI`の設定ファイルを`v2`形式で書き直しました。
以下のドキュメントが参考になりました。

- https://circleci.com/docs/ja/2.0/postgres-config/

```.circleci/config.yml
version: 2
jobs:
  test:
    docker:
      - image: php:7.4
        environment:
          DEFAULT_DSN: sqlsrv:Server=localhost;
          DEFAULT_USERNAME: sa
          DEFAULT_PASSWORD: p@ssw0rd
      - image: mcr.microsoft.com/mssql/server:2017-latest
        environment:
          ACCEPT_EULA: Y
          SA_PASSWORD: p@ssw0rd
    resource_class: medium
    steps:
      - run:
          name: Install packages and PHP extensions
          command: |
            apt-get update \
            && apt-get install -y zlib1g-dev libzip-dev unzip wget gnupg git \
            && docker-php-ext-install zip opcache
      - run:
          name: Install MSSQL PHP extensions
          command: |
            curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
            curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list
            apt-get update
            ACCEPT_EULA=Y apt-get install -y msodbcsql17 mssql-tools
            apt-get install -y unixodbc-dev libgssapi-krb5-2
            pecl install sqlsrv
            pecl install pdo_sqlsrv
            docker-php-ext-enable sqlsrv
            docker-php-ext-enable pdo_sqlsrv
      - run:
          name: Install composer
          command: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
      - checkout
      - run:
          name: Install dependencies
          command: |
            composer install --no-interaction --prefer-dist
      - run:
          name: Run Tests by phpunit
          command: |
            php app/bootstrap.php
            vendor/bin/phpunit
workflows:
  version: 2
  build-workflow:
    jobs:
      - test
```

### `docker-compose.yml`を`Version 1`から`Version 3`へ
`docker-compose.yml`のフォーマットが古かったので、`Version 3`で書き直しました。

```docker-compose.yml
version: "3"

services:
  php:
    build: ./docker/php
    env_file: ./docker/php/.env
    volumes:
      - .:/app/
    working_dir: /app

  mssql:
    image: mcr.microsoft.com/mssql/server:2017-latest
    env_file: ./docker/mssql/.env
    ports:
      - "1433:1433"
```

## おわりに
3年でこんなに変わるのかと思って調べてみたら、以下のような時系列でした。

- Dockerイメージ`mcr.microsoft.com/mssql/server`がリリースされたのが、`2018-09-10`
  - https://hub.docker.com/_/microsoft-mssql-server?tab=description
- `PHP Driver for SQL Server`が`Microsoft ODBC Driver 17`をサポートしたのは、`2018-3-23`
  - https://docs.microsoft.com/en-us/sql/connect/php/release-notes-php-sql-driver?view=sql-server-ver15#52
- `CircleCI 2.0`がリリースされたのは、`2017-07-11`
  - https://circleci.com/blog/launching-today-circleci-2-0-reaches-general-availability/
- `docker-compose.yml v3`がリリースされたのは、`2017-01-18`
  - https://docs.docker.com/compose/release-notes/#1100

ソフトウェアの寿命は本当に短いですね。
ではでは。

## 追記（2021−01−27）
[CircleCI Japan](https://twitter.com/CircleCIJapan)さんにこの記事を紹介してもらいました。
https://twitter.com/CircleCIJapan/status/1354225129207836673?s=20
ありがとうございます :bow: