GMOアドマーケティング SSP開発チームのKA.Mです。
入社して1年が過ぎ、SSP開発チームの一員として活躍できているような実感が湧いてきました。
では、本題です。
引用元 | CircleCI Official Brand Assets | Brandfolder https://brandfolder.com/circleci
GMOSSPではCircleCIを活用していますが、入社当初はfeatureテストが少しあるだけでした。これじゃいかんと思い、開発の合間を見て少しづつCI改善を行ってきました。
主に行った事は以下の通りです。
- CircleCI2.0への移行
- PHP CS Fixer導入
- ログモニタリング
- PHPUnitのテストコード追加
CircleCI2.0への移行
私が入社した頃はCircleCI1.0を利用していましたが、すでにCircleCI2.0がリリースされており安定稼働していたので、移行しました。CircleCI2.0は任意のDockerコンテナ上でテストを実行する事ができます。
CircleCI2.0への移行ドキュメントが充実しているため、移行はそこまで大変ではありません。DockerイメージはCircleCIがすでに用意してあるため、Docker Hubから実環境に近いものを選択するだけで完了します。
個人的に助かっている機能として when
という機能があります。この機能は always, on_success, on_fail
の3つのうちから1つを設定する事ができます。CircleCI1.0で when
機能があったかは定かではありませんが、この when
機能のおかげでテストが失敗した時にエラーログを確認するなど原因特定の役に立っています。その他にも便利機能が多々追加されているため、詳しくは公式ドキュメントを参照下さい。
余談ですがCircleCI2.1(preview)が公開されていますね。時間ができた際にこちらについても紹介できたらと思います。
PHP CS Fixer導入
SSP開発チームではコーディング規約が設定されておらず、規則性がないという問題が有りました。そこで、PHP CS Fixerを導入する事にしました。PHP_CodeSnifferとどちらを使うか迷いましたが、個人的に使い慣れているPHP CS Fixerを導入する事としました。現状のコードで違反しているルールを全てオフにする事でまずは導入し、そこから少しづつルールを強化しています。PHP CS Fixerのルール強化が完了した際にはPHPStanとPHPMDを引き続き導入したいと考えています。
ログモニタリング
featureテスト実行時にエラーに出くわす事があります。その場合にCircleCIが用意しているDockerイメージではエラー情報を出力してくれません。そこでSSPでは以下の設定を追加する事でログ情報を確認しています。
ここで先程紹介した when
が活躍します。 fail
した場合こそエラーログを見たいと時となります。成功したときも当然ログはみたいです。ですので、 always
に設定する事で必ずログの中身を確認できる状態にしてあります。 touch
でファイル生成している背景として、エラーが発生しないかった場合にファイルが生成されないため、Check Log
の途中で止まるという問題がございます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
- run: name: PHP command: | echo 'error_reporting = E_ALL' |sudo tee -a /usr/local/etc/php/conf.d/docker-php-ext-error.ini echo 'display_errors = 1' |sudo tee -a /usr/local/etc/php/conf.d/docker-php-ext-error.ini echo 'display_startup_errors = 1' |sudo tee -a /usr/local/etc/php/conf.d/docker-php-ext-error.ini echo 'log_errors = 1' |sudo tee -a /usr/local/etc/php/conf.d/docker-php-ext-error.ini echo 'error_log = /home/circleci/php_errors.log' |sudo tee -a /usr/local/etc/php/conf.d/docker-php-ext-error.ini touch /home/circleci/php_errors.log *test実行* - run: name: Check Log when: always command: | cat /home/circleci/php_errors.log |
PHPUnitのテストコード追加
こちらは絶賛実施中です。また、一部テストコードが書き辛いコードとなっている部分についてはリファクタリングも合わせて行うなどして、テストしやすいコードに書き換えています。
まとめ
1年間を通してそれなりに改善案の提案と実際に導入ができたのではないかと思います。執筆を通してまだ、まだ改善の余地は多分にある現状を良い事と捉え引き続きGMOSSPを良くしていけたらと考えています。
りくるーてぃんぐ
GMOSSPでは積極的にCI強化に力を入れています。CIに魅力を感じる、CIを自然と行うエンジニアを募集しています。