For the complete documentation index, see llms.txt. This page is also available as Markdown.

インフラ構成の変遷

ウォンテッドリーのインフラはサービス開始から2026年現在まで大きく5つのフェーズを経て進化してきました。

ウォンテッドリーの開発プラットフォーム変遷

各フェーズの技術的な転換点とその背景を紹介します。

フェーズ 1: PaaS 依存期 (2011〜2014年)

サービス開始時、Wantedly は Heroku 上で動作していました。 当時専任のインフラエンジニアは存在せず、インフラ機能を PaaS に委ねることで少人数チームでもプロダクト開発に集中できる体制を実現していました。

フェーズ 2: AWS への移行 (2014〜2016年)

サービス利用者が増えレイテンシー等の問題が課題となり、2014年8月に AWS への移行を実施しました。 当時の Heroku には US と EU リージョンしかなく、特にモバイル環境でのユーザー体験のボトルネックになっていました。

Wantedly on AWS ctonight New Challenges

AWS に移行することにはなりましたが、Heroku のビジネスロジックの実装に集中できる開発体験は気に入っていたため、2013年にリリースされたばかりの Docker を採用し自律的にデプロイできるコンテナ基盤で環境を構築しました。

  • ホスティング: Amazon EC2

  • コンテナランタイム: Docker

  • デプロイ基盤: Heroku ライクな内製 PaaS

  • OS: Ubuntu 14.04 → CoreOS(2016年2月に移行。systemd によるサービス管理)

  • デプロイツール: Capistrano と SSH を組み合わせた内製デプロイツール「sap」

初めは手動でインフラリソースの管理をしていましたが、2015年5月に Terraform を導入しインフラをコードで管理できるようになりました。 これによりインフラチームに限らず全エンジニアがインフラリソースの追加や変更を GitHub の Pull Request で行える体制が整いました。

フェーズ 3: マイクロサービス化と Kubernetes 移行 (2015〜2018年)

2015年頃、新しいサービスの開発が頻繁に行われるようになりました。 リリースにはインフラチームがサーバー等の環境構築を行う必要があり、ボトルネックとなっていることが課題となりました。 今後もサービスが増えていくことを見据え、セルフサービスでリリースできる環境への移行を検討し始めます。

Kubernetes 採用前は内製 PaaS「paus」を開発しコンテナを管理していました。 しかし、サービス数の増加に伴い、安定したリソース管理やセルフサービスでのデプロイに限界が見え始めました。

2016年11月に Kubernetes を本番導入しました。 当時利用できるマネージド Kubernetes が存在しなかったため、EC2 上に自己管理のクラスタを構築していました。 その後 kOps によるクラスタ管理に移行しています。

マイクロサービスの増加に伴い本格的なオーケストレーション基盤が必要になり、全マイクロサービスの Kubernetes 化を段階的に進め、2018年8月に移行が完了しました。

  • アーキテクチャ: モノリス Rails → マイクロサービス(Go, Ruby, Python, Node.js など各チームが技術選択)

  • オーケストレーション: Kubernetes(EC2 上で自己管理)

  • API 設計: gRPC + Protobuf による型安全なサービス間通信

  • サービス間共通基盤: servicex(2018年1月誕生)

    • 構造化ロギング、分散トレーシング、コンテキスト伝播など共通機能を提供するライブラリ群

  • 設計原則: 1マイクロサービス = 1リポジトリ = 1 Kubernetes Namespace

この時期に確立した原則が現在のアーキテクチャの骨格を形成しています。

servicex について

マイクロサービス化が進む中で、ロギング・トレーシング・認証などの横断関心事を各チームが個別実装するコストが課題になりました。 servicex はこれらの共通基盤を一元化し、Go/Ruby/Python/Node.js など複数言語で提供しています。

詳しくはマイクロサービス共通ライブラリ "servicex" の紹介を参照してください。

フェーズ 4: 運用成熟・Observability 強化期(2018〜2020年)

2018年8月に全マイクロサービスの Kubernetes 移行が完了した後、プラットフォームの安定化と運用品質の向上に取り組んだ時期です。 Kubernetes クラスタと社内共通ライブラリの servicex を拡張することによりできることを増やし、改善を進めました。

Observability の確立

マイクロサービス間の障害調査やパフォーマンス分析が難しいという課題から分散トレーシングの導入を進めました。 始めはどのサービスも成熟していなかったため、ロックインを避けるために複数の基盤を併用し、検証を進めました。

gRPC の標準化

マイクロサービス間通信の効率化のため、gRPC をサービス間通信の標準とする方針を策定しました。 Protobuf による型安全なインターフェース定義と、言語横断のクライアント生成を整備しています。

Kubernetes クラスタの成熟

kOps を用いたクラスタ管理の標準化を進め、バージョンアップやクラスタ再構築を安全に行える体制を構築しました。 2020年2月には Production クラスタの再構築を完了しています。

内製ツール kube-go による Kubernetes マニフェスト生成の標準化も進め、ベストプラクティスを全リポジトリに一貫して適用できるようになりました。

デプロイの改善

Canary Release を worker process にも拡張し、リリース時の安全性を向上させました。 Canary ごとの error rate 変化を検知する仕組みも構築し、デプロイ起因の障害の早期発見につなげています。

SLI/SLO 運用の強化

SLO は2018年頃から運用していましたが、大規模障害に気付けず被害が拡大したことが課題になりました。 システム障害への体制強化のため、SLI/SLO に対する Design Proposal を策定して運用を再整備しました。

主な出来事

時期
転換点

2018年3月

Istio (service mesh) の検証開始

2018年9月

gRPC の最適構成の検証開始

2019年1月

kOps による新 Production クラスタ移行計画

2019年4月

RailsConf 2019 で分散トレーシングの発表

2019年7月

Canary Release を worker process にも拡張

2019年9月

gRPC をマイクロサービス間通信のスタンダードに策定

2019年11月

大規模障害対応体制の強化

2020年2月

SLI/SLO Design Proposal の策定

2020年2月

Production k8s クラスタの再構築完了

フェーズ 5: Platform Engineering 成熟期(2020年〜現在)

運用基盤が成熟したことを受け、Developer Experience と運用安定性のさらなる向上に注力するフェーズに入りました。

主な出来事

時期
転換点

2020年4月

kubefork 開発開始(PR ごとのプレビュー環境基盤)

2020年5月

Argo CD の検証開始(GitOps によるデプロイ管理)

2021年5月

PR ごとプレビュー環境の本番導入

2021年7月

Argo CD の本格運用開始

2021年9月

kOps → EKS 移行プロジェクト開始

2022年6月

EKS (Elastic Kubernetes Service) への移行完了

2024年12月

監視基盤を Datadog に統一(New Relic を廃止)

現在のアーキテクチャ(2025年時点)

  • ハイブリッドクラウド: AWS(主要ワークロード)+ Google Cloud(データ基盤)

  • EKS(Elastic Kubernetes Service)中心のマイクロサービス構成

  • Terraform による統一的なリソース管理(wantedly/wantedly-terraform)

  • Datadog による統一監視

kubefork について

PR ごとに独立したプレビュー環境を自動生成するための内製基盤です。 レビュアーが実際の動作を確認できるため、レビュー品質とデプロイ安全性が向上しました。 詳しくは Kubefork を参照してください。

フェーズ
時期
キーテクノロジー

PaaS 依存

2011〜2014年

Heroku

コンテナ化

2014〜2016年

AWS, Docker, paus, Terraform

マイクロサービス・K8s 化

2015〜2018年

Kubernetes(EC2), servicex

運用成熟・Observability 強化

2018〜2020年

kOps, gRPC, OpenCensus, Canary Release

Platform Engineering 成熟

2020年〜現在

EKS, Argo CD, kubefork, Terraform, Datadog

参考資料

最終更新