マイクロサービスのコードベース管理手法の一つであるモノレポによる開発のメリット・デメリットに触れつつ、実際の開発現場における運用上の工夫について紹介します
© 2023 MODE, Inc.モノレポによる マイクロサービスアーキテクチャの開発運用MODE, Inc.YUTA Shimakawa12023/03/09"良い開発者体験"にむけた国内/海外のアーキテクチャLT会 AWS編
View Slide
© 2023 MODE, Inc.● SWE in the tech industry for 10+ years● Joined MODE, Inc. 2019● Backend & DevOps● SNS○ Twitter: @banana_umai○ GitHub: @bananaumai○ LinkedIn: Yuta ShimakawaYUTA Shimakawa島川 悠太 Yuta Shimakawa2
© 2023 MODE, Inc.MODE, Inc.拠点:シリコンバレー、東京 2014年〜 シリコンバレー2017年〜 東京創業者:上田 学 /イーサン・カン3センサーからデータ集めて可視化・分析するための技術を軸に、現実世界のビジネス業務を改善するためのIoT * DXなソリューションを提供
© 2023 MODE, Inc. 4マイクロサービスアーキテクチャ
© 2023 MODE, Inc. 5モノレポ● マイクロサービスのソースコードの管理手法の一つ● 各サービスを一つのソースコードリポジトリで管理する● 反対はサービス毎にリポジトリを分ける● 日本だと比較的事例が少なめ(?)● アメリカのTech系スタートアップの界隈だと議論になりがち(らしい)● 某米検索最大手出身者が創業した会社ではモノレポが採用されがち(らしい)
© 2023 MODE, Inc. 6● サービスの一覧性を高くしやすい● 開発に必要なサービス一式を立ち上げやすい● 同一言語で実装している場合、共通ライブラリの運用がしやすい● 複数のサービスやライブラリのコードを同一目的で変更しやすい● ハード/ソフトな共通化がしやすい(設定、デプロイ、規約など)モノレポのメリット
© 2023 MODE, Inc. 7モノレポのデメリット● CICDパイプラインの構築に工夫が必要になりがち○ 工夫しないとCICDプロセスが鈍重になりやすい○ モノレポの構成自体にベストプラクティスがあるわけではないので、すぐに使えるテンプレート的なCICDワークフローがない● モノレポに関わる人数や組織の構造によっては難しくなりがち(コンフリクトの増加やブランチ管理の煩雑化など)
© 2023 MODE, Inc. 8CICDパイプラインの工夫ECRCodePipelineECSAWSGitHub Actionpush container imagestrigger pipeline● GHAでcontainer imageをbuild -> ECRにpush -> CodePipelineをトリガー● GHA WorkflowとAWS CodePipelineはサービス * 環境毎に作成● mainブランチへのマージ時にサービスのコードに影響があればサンドボックス環境に自動デプロイ● ステージング及び本番デプロイについてはGit Tagを用いてデプロイワークフローをトリガーする
© 2023 MODE, Inc. 9モノレポ管理の工夫● 複雑なブランチ運用や長期ブランチを避ける(feature flagなど)● モノレポで「あらゆるコード」を管理すべきか?○ NO○ 関連性が少ないコードは別リポジトリで分けている○ 例)ゲートウェイやモバイルアプリは別リポジトリで管理
© 2023 MODE, Inc. 10所管・まとめ● 同一言語でバックエンドのマイクロサービスを構築する場合、モノレポは悪くない選択肢● CICDパイプラインの管理やブランチ管理などには工夫が必要● 似たような経験・知見・アドバイス・悩みがある方は是非お話ししましょう○ Twitter: @banana_umai○ GitHub: @bananaumai○ LinkedIn: Yuta Shimakawa
© 2023 MODE, Inc. 11MODE is hiring
© 2023 MODE, Inc. 12