Fusicきばんブログ

Fusic基盤ユニットの非公式技術ブログ

ここが嵌るよCircleCI 1.0

基盤ユニットの貞方(@sadapon2008)です。 CircleCI 1.0+CakePHP3+PostgreSQLのテストで嵌った出来事を紹介します。

1. ドキュメントで紹介されているPHPのバージョンが古い

2017年7月現在でのCircleCIの↓のドキュメントではPHP 7.0.4が例として書かれています。

https://circleci.com/docs/1.0/language-php/

これが結構古いバージョンで、PHPUnitを実行するとsegmentation faultが発生したりします。

↓を参考に7.0.x系なら7.0.17を使うのが無難です。

https://circleci.com/docs/1.0/build-image-trusty/#php

machine:
  php:
    version: 7.0.17

2. デフォルトでxdebugが有効になっている

xdebugを有効にしておくとテストの実行時間が長くなってしまいます。必要がなければ、circle.ymlで以下のように無効にしましょう。

dependencies:
  pre:
    - rm /opt/circleci/php/$(phpenv global)/etc/conf.d/xdebug.ini

3. PostgreSQLのデフォルトの照合順序がen_US.UTF-8になっている

これはPaaS系だとありがちな話ですが、デフォルトの照合順序がen_US.UTF-8と英語になっています。これを解消するには、以下のようにデータベースを作成する際に明示的に指定するのが無難です。

database:
  override:
    - psql -U ubuntu postgres -c "CREATE DATABASE blog_test with template = template0 encoding = 'UTF8' lc_collate = 'ja_JP.UTF-8' lc_ctype = 'ja_JP.UTF-8';"

ただし、日本語のロケールを指定するには自分で追加しないといけないので、circle.ymlで以下のようにしておく必要があります。なお、デフォルトのPostgreSQLのバージョンが変わった場合はパスの変更が必要ですので要注意です。

machine:
  pre:
    - sudo locale-gen ja_JP.UTF-8
    - sudo -E -u postgres PGDATA=/var/lib/postgresql/9.5/main /usr/lib/postgresql/9.5/bin/pg_ctl stop
    - sudo -E -u postgres rm -r /var/lib/postgresql/9.5/main
    - sudo -E -u postgres PGDATA=/var/lib/postgresql/9.5/main /usr/lib/postgresql/9.5/bin/initdb --encoding=UTF8 --no-locale --username=ubuntu
    - sudo -E -u postgres PGDATA=/var/lib/postgresql/9.5/main /usr/lib/postgresql/9.5/bin/pg_ctl start

参考:

qiita.com

4. デフォルトのタイムゾーンはUTC

JSTに変えたい場合は、circle.ymlで以下のようにします。

machine:
  timezone:
    Asia/Tokyo