こんにちは、CTOの橋口(@arbm77509303)です。
今回は、GoQSystem の CI/CD がどのように立ち上がり、進化してきたのかを振り返ります。
2020-2021 導入期 ― CircleCI による第一歩
私が入社した2020年当時は、CircleCIを一部のプロダクトに導入し始めていたタイミングでした。しかし、CircleCIを導入してくれたエンジニアが退職しており、動いてはいるものの形骸化している状態だったことを覚えています。
利用し始めていたとはいえ、メインプロダクトをはじめ多くのプロダクトでは、依然として手動でソースコードをサーバー上にデプロイしていました。
課題
- 手動デプロイがメイン:ミスとタイムロスの温床
- 学習コストの偏り:担当者に CI/CD の知識が集中
アクション
- CircleCI の設定をドキュメント化+コード化しながらキャッチアップ
- 小さく成功体験を積むため、まずは開発が活発なサービスから導入
当時は私もエンジニア1年生だったので、仕事に行く前や帰宅後、休みの日などにも自分のGitHubとCircleCI、AWSのアカウントでパイプラインを構築して、設定を変えてはテストやデプロイを実行していました。何度も何度も繰り返し、試行錯誤を続けながら、会社のCI/CD環境を設定する日々でした。
CircleCIを採用した背景ですが、Jenkinsは組織を考えると環境設定や管理コストが大きい一方、CircleCIはSaaSで.circleci/config.ymlを置けば使える点、利用コストと学習コストが低い点で採用していました。GitHub Actionsも2019年11月にリリースされていましたが、当時はまだ書籍もなく、Web上の情報も少なかったため採用しませんでした。
2021-2022 移行期 ― GitHub Actions へ舵を切る
GitHubとCircleCIは連携しているとはいえ、CircleCIの設定などはサービスページで行う必要があり、GitHub上で完結できるのであればベストだと考え、GitHub Actionsへの移行を始めました。運用上のメリットだけではなく、コスト管理するサービス数を減らせるため、移行の判断は簡単でした。
また、多くの会社やOSSなどでGitHubは利用されており、GitHub ActionsがCI/CDツールのデフォルトになるであろうという予想もありました。
2020年頃から利用を想定して検証を行っており、CircleCIで実行していたCI/CDが全て実行できることが確認できたため、新規のプロダクトはGitHub ActionsでCI/CDを構築していきました。
判断基準
アクション
- 新規プロダクトは 100 % GitHub Actions で構築
- 既存サービスも、デプロイ頻度とCI 実行コストを見極めつつ段階的に移行
既存プロダクトについても一部はGitHub Actionsへ移行しましたが、無料利用枠もあることもあり、デプロイ頻度が少ないものはCircleCIを利用し続けています。
2023 本丸攻略 ― メインプロダクト(受注管理)へ導入
GoQSystemのメインプロダクトである受注管理はソースコードをGitHubで管理していなかったこともあり、2023年にようやくGitHub Actionsを利用することができるようになりました。これまでは一人のエンジニアがデプロイを担当していましたが、これにより複数人でデプロイを行えるようになったことも大きな成果でした。
デプロイなどを実行するのはもちろんですが、「特定のラベルが付いたIssueをProjectに追加する」「リリース用PRの作成」「検証OKラベルがついているか確認する」など、人が行っていた作業の自動化にも活用しています。
ブロッカー
- 受注管理のソースコードをBacklogで管理していた
解決策
- リポジトリ移行
インパクト
- デプロイ担当が 1 人→複数人へ
- 手作業だった「リリースPR作成」「検証OKラベル確認」などを自動化
お問い合わせや不具合の管理はGitHubのIssueを利用しているため、GitHub Actionsは作業自動化に大きく貢献してくれています。
2025 現在 ― CI/CD が“当たり前”になるまで
現在のGoQSystemではCI/CDで静的コード解析やリンターが走ったり、テストしたり、デプロイしたりが当たり前になっていると思います。
苦労話を今回は記載していませんが、導入し始めた当時は何十回、何百回と設定を変更して実行してみる日々でした。(今でも利用しているGitHub ActionsのパッケージやCircleCIのOrbsに破壊的変更が入ると四苦八苦しますが)
今では多くのメンバーがCI/CDを改善したり、追加したりしてくれているので、一人でやっていた時のことを考えるとすごく嬉しく思います。
まとめ & 次回予告
最近入社したメンバーは数年前までCI/CD環境がなかったことを知らないことを考えると、このように会社の開発環境やプロダクトの歴史を記録しておくのは大切だと思い、この記事を書いてみました。
今回出てきた受注管理のソースコードをGitHubに移行した話など、今後もGoQSystem開発の歴史を記録していってみようと思います。
次回は、同時期に進めた Docker/ECS 移行について掘り下げます。お楽しみに!
GoQSystemでは一緒に働くエンジニア/PdMを募集しています!!
GoQSystemの採用情報はこちら↓