Upgrade to Pro — share decks privately, control downloads, hide ads and more …

クラウドネイティブ会議Day1_AI時代の開発スピードに追いつけ! Argo CD Appli...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for freee freee PRO
May 28, 2026
13

クラウドネイティブ会議Day1_AI時代の開発スピードに追いつけ! Argo CD ApplicationSetと挑む、PR単位の検証環境/Cloud Native Conference Day 1: Keeping Pace with Development Speeds in the AI Era! Building a Pull Request-Level Testing Environment with Argo CD ApplicationSet

Avatar for freee

freee PRO

May 28, 2026

More Decks by freee

Transcript

  1.   電⼦稟議 経費精算 債権債務 管理 ⼈事労務 電⼦契約 固定資産 請求管理 会計

    ⼯数管理 販売管理 会計‧⼈事労務‧販売管理を核とした 統合型経営プラットフォーム
  2. 6 SEQチームとDXチームの紹介 「開発生産性」を「Platform(基盤)」で向上させるチーム Developer eXperience(DX) DXの観点 主なトピック - EKS向けCI/CD基盤 -

    開発環境整備 - 新規プロダクト構築の効率化 Software Engineer in Quality (SEQ) SEQの観点 主なトピック - 自動テスト基盤 - 品質のオブザーバビリティ - テスト容易性の向上
  3. 7 はじめに freeeの開 発 環 境の現 状と 課題 Preview環境のコンセプト Preview環境を広げる

    05 成 果 06 Preview環境の実装 まとめと今後の課題 07 本セッションのアジェンダ 01 02 03 04
  4.   電⼦稟議 経費精算 債権債務 管理 ⼈事労務 電⼦契約 固定資産 請求管理 会計

    ⼯数管理 販売管理 会計‧⼈事労務‧販売管理を核とした 統合型経営プラットフォーム 統合を実現するためのマイクロサービスが多数存在
  5. 13 基盤が会計を参照していたり、依存するマイクロサービスのリストもない 依存関係が複雑 freee会計 基盤A 人事労務 販売 etc... 基盤B 基盤C

    人事労務 販売 etc... 人事労務 販売 etc... マイクロサー ビス マイクロサー ビス マイクロサー ビス群
  6. 14 依存マイクロサービスを構築する大変さ • 把握の難しさ ◦ あるプロダクトの依存サービスの一覧を探すところからスタート ◦ Podが動く状態になるまでに必要な依存環境とは別に特定の機能でのみ使 う環境なども存在 ▪

    ターゲットのサービスを構築した後一通り実際に触ることでしか依存を把 握できなかった • 依存サービスを立てるために様々なチームに頭出しする必要がある点も大変 な点だった。 ◦ この手間があったため5年以上検証環境の数は増えることがなかった....
  7. 17 Preview環境の全体像 PR A環境 PRX環境... 共通環境 Headerによる ルーティング App Repo

    PR Infra Repo PR PRX環境... PR X環境... Infra main Branch Github Actions
  8. 19 実は以前同じような仕組み( e2e-infra)を作って失敗し、撤退している • 夢のような基盤 ◦ E2EテストをPR毎に環境を作って自動実行してくれる! ◦ staging環境でのE2Eテストの失敗・修正を未然に防げる! ➡

    2年ぐらい投資したが使われず廃棄 なぜか? • 開発者のペインをきちんと深掘りせずに、SRE/QAの課題感から始めた • 使ってもらうための開発者体験の向上よりも、安定性や機能実装を優先してしまった • いきなり大きなチームからはじめた • 開発チームへのEnablingが不十分だった なぜ使ってもらうことにこだわったか プロダクトマネジメント・ Platform Engineeringの典型的アンチパターン
  9. 30 条件は三つ 1. 他のプロダクトとの依存関係が比較的少ないこと -> 構築時間を最小化するため 2. ほぼ単一チームで開発を行っていること -> FBループを確実に回すため

    3. 同期処理が処理の大部分を担っていること -> 検証する環境をできるだけシンプルに保つため 届け切る「小さなチーム」の選定
  10. 37 横展開を素早くするために Skill化 • 開発と同時に横展開のためのSkillを作成し、それを更新していく形でメンテナ ンスしている ◦ Skillを作ることで大まかな実装手順を同時並行で作れるというメリットもあ る。 •

    CI部分はプロダクト毎にデプロイフローが少し違うこともあり、かっちり共通化 することが難しい部分であったため自由度を持たせた実装にし、細かい部分を Skillで作っていく形式にした
  11. 44 環境生成部分に注目したフリーの Preview環境 PRA環境 PRX環境... App Repo PR Infra Repo

    PR PRX環境... PRX環境... Github Actions Infra repo のみを参照 固有の情報を 渡しPRを生成
  12. 45 PullRequest Generator • Github等のSCMaaSのAPIを用いてリポジトリ内の未解決のPRを自動的に検出しApplication を作るGenerator ◦ PRの中からさらに、branch名・対象ブランチ名・PRタイトル名などを正規表現でフィルタリング することができる ◦

    labelでもフィルタリングすることが可能 • アプリリポジトリのPRを参照することが多いが、フリーではインフラリポジトリのPRを参照するよう にしている ◦ Good:インフラのPR毎の改変の自由度が高い ◦ Bad: インフラPRのライフサイクル管理、統制する場所が多い ※SCMaaSプロバイダーはGithubを前提に話します
  13. 46 生成部分に着目した、よくある Preview環境 PR A環境 PRX環境... App Repo PR PRX環境...

    PR X環境... Infra main Branch App Repoを 参照して生成 設定はこちらを 参照
  14. 47 環境生成部分に注目したフリーの Preview環境 PRA環境 PRX環境... App Repo PR Infra Repo

    PR PRX環境... PRX環境... Github Actions Infra repo のみを参照 固有の情報を 渡しPRを生成
  15. 48 - インフラリポジトリとアプリケーションリポジトリにまたがるので、それぞれのリポジトリの関連CI の責務を以下のように整理している Github Actionsでのライフサイクル管理 インフラCI アプリCI • インフラ側PRのライフサイクル

    管理 ◦ Merge阻止 ◦ 3日たったPRをClose • 常設環境のImage更新 ◦ 日時でProductionのものに することで、本番と条件を近 づける • PR固有の情報管理 ◦ Headerの値 ◦ PR固有の環境変数書き 換え ▪ redis®等 • アプリPRと連動したライフサ イクル管理 ◦ インフラリポジトリへのPR のOpen・Close
  16. 50 • 全てのPRによって作られる環境が単一のWorkerインスタンスとジョブキュー を共有している状況だった。 ◦ PR 間でのジョブの奪い合いが発生 ◦ 参照Workerの競合 ◦

    テスト干渉・環境の再現がしづらくデバッグが困難 • resqueueの既存Integration環境のだし分けには、DB番号で分けている実 装もnamespaceで分けている実装も存在する ◦ 既存のWoekerのQueueの出し方によって実装が変わることやPreview環 境だけのロジックを作ることは避けたかった WorkerのQueueを共通KVSで集約する問題点
  17. 52 • フリーにおけるredisの利用のされ方は主に二つ ◦ DBのキャッシュ ◦ worker用のQueue • データの特性を考える ◦

    前者は最悪データがなくなっても良い ◦ 後者はむしろライフサイクルに合わせてなくなって欲しい WorkerのQueueとして使われる KVSの利用方法 KVSのデータの中身は環境内に閉じて存在する! 独立したPodとしてRedis®を立てることで解決
  18. 58 参考文献 Preview環境先行事例 • https://www.wantedly.com/companies/wantedly/post_articles/313884 • https://zenn.dev/ubie_dev/articles/8c34b08626aa88 • https://techblog.zozo.com/entry/zozotown-android-vrt •

    https://tech-blog.rakus.co.jp/entry/20260115/argocd • https://tech-blog.monotaro.com/entry/2025/04/22/090000 • https://tech.assured.jp/entry/2025/06/19/100000 • https://techblog.tg-inet.co.jp/entry/2026/03/04/095136 • その他参考文献 • https://istio.io/latest/docs/ops/best-practices/traffic-management/#split-virtual-services Slack絵文字 しかまつ 様 https://note.com/shikamatsu/n/nd217dc0617db