GMOSSPのCI改善概要

GMOアドマーケティング SSP開発チームのKA.Mです。
入社して1年が過ぎ、SSP開発チームの一員として活躍できているような実感が湧いてきました。

では、本題です。

CircleCI
引用元 | 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のルール強化が完了した際にはPHPStanPHPMDを引き続き導入したいと考えています。

ログモニタリング

featureテスト実行時にエラーに出くわす事があります。その場合にCircleCIが用意しているDockerイメージではエラー情報を出力してくれません。そこでSSPでは以下の設定を追加する事でログ情報を確認しています。
ここで先程紹介した when が活躍します。 fail した場合こそエラーログを見たいと時となります。成功したときも当然ログはみたいです。ですので、 always に設定する事で必ずログの中身を確認できる状態にしてあります。 touch でファイル生成している背景として、エラーが発生しないかった場合にファイルが生成されないため、Check Logの途中で止まるという問題がございます。

PHPUnitのテストコード追加

こちらは絶賛実施中です。また、一部テストコードが書き辛いコードとなっている部分についてはリファクタリングも合わせて行うなどして、テストしやすいコードに書き換えています。

まとめ

1年間を通してそれなりに改善案の提案と実際に導入ができたのではないかと思います。執筆を通してまだ、まだ改善の余地は多分にある現状を良い事と捉え引き続きGMOSSPを良くしていけたらと考えています。

りくるーてぃんぐ

GMOSSPでは積極的にCI強化に力を入れています。CIに魅力を感じる、CIを自然と行うエンジニアを募集しています。