この記事は 開発生産性 Advent Calendar 2022 の7目の記事です。
6日目の記事はharuki62さんの開発組織が事業のLTV最大化につなげる仕組みづくりでした。
こんにちは。@kenchankunsanです。GMOペパボ株式会社で技術責任者をしています。
GMOペパボでは、開発生産性に関する指標を計測・可視化する取り組みとして、Four Keysの計測や、Pull Request単位でのテストカバレッジなどのコードメトリクスの計測に取り組んできました。また、開発から少し離れた分野ではカスタマーサポートにおける問い合わせ対応の生産性の計測・可視化 も行い、生産性の計測・可視化に全社で取り組んでいます。
本記事では、これらの取り組みやプロダクト開発チームの観察から明らかになった「開発プロセスのボトルネック」の解消に取り組んでいる事例を紹介します。
カラーミーショップの開発プロセスにおける複数の環境
Webアプリケーションの開発では、開発フローにあわせてアプリケーションが動作する環境を複数用意していることが多いでしょう。本番環境、ステージング環境、テスト環境、開発環境、など分類や呼び名は開発組織によって異なると思いますが、今回紹介するカラーミーショップの開発組織では、以下のような用途で複数の環境を利用して開発を行なっていました。
- ユーザが利用する「本番環境」
- 本番環境へのリリース前の検証に利用する、本番とほぼ同等のデータで開発チームのみがアクセスできる「ステージング環境」
- 開発チームがローカル開発環境では検証が難しい機能の確認に利用する、本番環境とは独立したデータの「インテグレーション環境」
- 各開発メンバーのマシン上に構築する「ローカル開発環境」
また、ローカル開発環境以外は基本的に1つずつ稼動させており、例外としてQA用の専用環境と、脆弱性の診断など一定期間占有する必要があるような場合に使う占有環境がありました。
「イングレーション環境を占有します」
このように環境を分けて開発をしていると、特定の環境でしか検証が難しい機能開発というのがどうしても発生してしまいます。特にECプラットフォームサービスでは、決済事業者をはじめとする外部の連携サービスが多数存在していますし、そもそもカラーミーショップ自体も1つのWebアプリケーションではなく複数のWebアプリケーションによって構成されています。
そのため、複数のチームがインテグレーション環境を使った検証を行いたいという状況が発生し、あるチームが環境を占有しているあいだ他のチームは最も優先順位の高いタスクを止めなければいけないこともありました。
それぞれのチームが占有できるように十分な数の環境を用意すればよいのですが、一方で大量の環境を作成し、それをメンテナンスしつけるのもカラーミーショップのシステムアーキテクチャ(多くのコンポーネントがVMであること)と運用コストの観点から困難という状況でした。
コンテナベースの新しい運用基盤の開発
少し話が変わりますが、カラーミーショップでは2年ほど前からShopSetという新しいアプリケーションの運用基盤の開発・導入を進めています。
ShopSetが何なのかをざっくり説明すると「カラーミーショップを構成する複数のWebアプリケーションをkubernetes上動かすための仕組み」です。
もともとは、運用基盤の可用性と拡張性を高めるために開発をすすめてきたShopSetですが、これを利用することでHeroku Review Apps のような仕組みが構築できるのではないかと考えました。
kubernetes上のプレビュー環境
ShopSetをHeroku Review Appsのように使うために、ShopSetの開発チームは以下のような仕組みを構築しました。
- 各アプリケーションのリポジトリに立てられたPull Request毎のコンテナイメージ自動作成
- 複数のShopSetを管理できるCI/CD環境
- ShopSetの管理を行うSlackコマンドとチャットボットの開発
新しくプレビュー環境を作りたい開発者やデザイナは、Slack上で/shopset create
というコマンドを実行することで、個人用のインテグレーション環境を立ち上げることができます。また、カラーミーショップを構成する複数のWebアプリケーションを任意のブランチの状態で動かし、かつそのブランチの変更に自動的に追従するような仕組みになっています。
これを普及させるために、ShopSetの開発チームは他の開発メンバー向けのドキュメントを作成し、チームへの導入の支援も行っています。
現在では、外部システムとの連携に携わることの多いメンバーや、複数のWebアプリケーションにまたがる機能を開発するメンバーを中心に利用をすすめています。
おわりに
さて、「プレビュー環境の導入によって開発生産性はどの程度向上したのか?」という点については、導入から1ヶ月ちょっとということもあり、まだ数値にはっきりと現われていません。しかしながら、体感では「環境を占有する」という状況は減っており、これから最初に紹介したような生産性指標に繋がってくると期待しています。
また、ShopSetをつかったプレビュー環境の技術的な詳細については、開発したメンバーがどこかで発表またはブログとして公開してくれると思いますのでご期待ください。