1
/
5

リネットのPHPアプリケーションのCIを10倍速くするためにやったこと

これはWHITEPLUS Advent Calendar 2018の4日目の記事です。


はじめに

株式会社ホワイトプラスのエンジニアの @ngmy です。
ホワイトプラスでは、自宅にいながら衣類をクリーニングに出せるリネットというサービスを開発しています。

ホワイトプラスの技術スタックに関しては、弊社CTOの @exmeat が書いた1日目の記事を読んでいただくとわかりやすいと思います。

私は普段はクリーニングと長期保管を行うリネット保管というサービスの開発を担当しています。また、要素技術としてPHPとLaravelが得意なので、リネット全体のPHPとLaravelの基盤整備も担当しています。

直近では、リネット全体のPHPとLaravelのアップグレードを行っています。私が入社した2016年10月時点でリネットはPHP 5.6とLaravel 4.2で動いていましたが、今回これをPHP 7.2とLaravel 5.5にアップグレードしようとしてします。
今年の5月からアップグレードの作業に着手していて、8月中旬にいったんLaravel 5.3にアップグレードしてリリースしています。その後、先述のリネット保管の開発のために2週間ほどアップグレード作業を中断・9月から再開して、12月中旬にPHP 7.2とLaravel 5.5にアップグレードしてリリースしようと今まさに絶賛追い込み中です。ガンバりましょう。

また、ただアップグレードするだけでなく、CircleCI 2.0で動かしているCIにPHPStanによる静的解析を導入したり、CIを高速化したりといったことにも取り組んでいます。

今日は、CircleCIで動いている弊社リネットのPHPアプリケーションのCIを高速化するために行ったことについて書きたい思います。
(PHPStanによる静的解析の導入についても、WHITEPLUS Advent Calendar 2018の別日に書く予定です。)


リネットのPHPアプリケーションのCIについて

リネットのPHPアプリケーションのCIは、CircleCI 2.0で動いています。
これ自体は、2017年3月頃に私が構築したものです。

CIでは主に次のことを行なっています。

  • GitHubへのPush毎に動くCI
    • PHPUnitによるユニットテスト
  • 1日1回夜間に動くCI(いわゆる夜間ビルド)
    • PHPUnitによるユニットテスト
    • PHPUnitとXdebugによるコードカバレッジ解析(コードカバレッジのHTMLレポートの生成、コードカバレッジの推移のSlackへの通知等)
    • PHP_CodeSniffer、PHPMDによる静的解析

GitHubへのPush毎に動くCIと夜間ビルドの2つに分けている理由は、PHPUnitとXdebugによるコードカバレッジ解析にとにかく時間がかかり、また当時はプロダクションコードのデプロイまでをGitHubへのPush毎に動くCIの中で行っていたこともあり、CIの実行時間を短くしてリリースを素早く行えるようにすること最優先したためです。
夜間ビルドは構築当時でも2時間以上は余裕でかかっていた記憶があります。

そしてリネットの成長とともに実コードが増え、テストコードも増え(増えたよね?)、今年の8月ついにこれになりました。


えるしっているか CircleCIは 5時間でタイムアウトする

夜間ビルドの実行時間が5時間を超えるようになり、CircleCIがタイムアウトするようになりました。
さすがにこのままではまずいということで、PHPとLaravelのアップグレードの作業の中で、CIの高速化にも取り組むことにしました。

続きはこちらをご覧ください。

リネットのPHPアプリケーションのCIを10倍速くするためにやったこと - Qiita
これは WHITEPLUS Advent Calendar 2018 の4日目の記事です。 株式会社ホワイトプラスのエンジニアの @ngmy です。 ホワイトプラスでは、自宅にいながら衣類をクリーニングに出せる リネット というサービスを開発しています。 ホワイトプラスの技術スタックに関しては、弊社CTOの @exmeat が書いた 1日目の記事 を読んでいただくとわかりやすいと思います。 ...
https://qiita.com/ngmy/items/0821d9c56834b6b15a5f
株式会社ホワイトプラスでは一緒に働く仲間を募集しています
2 いいね!
2 いいね!

同じタグの記事

今週のランキング

髙見 唯樹さんにいいねを伝えよう
髙見 唯樹さんや会社があなたに興味を持つかも