はじめに
皆さんこんにちは!九州大学修士1年の羽田野武蔵です!
2025年12月に、マッチングアプリ「タップル」のバックエンド開発チームにCA Tech JOB生として参加しました。ここでは、1ヶ月間の就業型インターンで学んだことや、大規模サービスならではの開発の面白さを共有したいと思います!
インターン前の目標
今回のインターンでは、主に以下の2つを軸に目標を立てました。
- 設計への深い理解: DDDやクリーンアーキテクチャが、大規模なプロダクトにおいてどのように「変更の強さ」を実現しているのかを実戦で学ぶ。
- 圧倒的な開発体験の体感: サイクルを高速に回すためのCI/CDやAI活用など、プロの現場のナレッジを習得する。
やったこと
DDDハンズオンから実運用コードへの落とし込み
自分が実装に関わったタップルのマイクロサービスは、DDD×CleanArchitecutureを採用しています。
DDD(ドメイン駆動設計): 主要なソフトウェア設計手法の一つであり、ドメインエキスパートの言葉に基づき、ドメインにおけるプロセスやルールをよく表現したドメインモデルを構築し、それに基づいてソフトウェア開発を行うことに主眼を置くものである。CleanArchitecuture: 機能を実現しているコアな部分をフレームワークやDBなどに依存しない状態(関心事の分離)にすることで、他が変わってもコアな部分への影響をなくし、変更や拡張に強くすることができるアーキテクチャです。似たような思想のアーキテクチャとしてはヘキサゴナルアーキテクチャ等いくつかあり、クリーンアーキテクチャはSOLID原則をはじめとした設計原則をヘキサゴナルアーキテクチャ等に当てはめた、より詳細な実装パターンとも言えます。
技術面の採用のモチベーションは、主に以下の2点にあります。
- 関心事の分離とドメインロジックの凝集: 「どこに何を書くべきか」を明確にする。
- 仕様変更への耐性: 変更時の影響範囲を極小化し、複雑なドメインの変化に耐えうる状態を作る。
オンボーディングの一環として、仮のマッチングアプリのドメインを例に、DDD(ドメイン駆動設計)を用いたモデリングと実装のハンズオンを行いました。下の図は、このハンズオンのお題として作成したモデリング図です(あくまで学習用であり本番のモデリングとは異なる)。集約、値オブジェクト、ドメインイベント、リポジトリといった各要素の責務を整理し、いかに疎結合な設計を追求するかを議論する過程で作成しました。

元々、DDDに関してはテックブログや書籍を通じて学習していたため特に詰まることなくモデリングできましたが、実務におけるモデリングの深さやコードへの落とし込み、さらにはドメインイベントをSQS等のメッセージング基盤と連携させるインフラ構成など、スケーラビリティを担保するための設計が、実際のプロダクトでいかに機能しているかを学ぶことができました。
また、永続化層に採用されているMongoDBとDDDの相性の良さも発見でした。ドキュメント指向DBはオブジェクトをそのまま保存できるため、RDBで課題となるオブジェクトとリレーションの「インピーダンスミスマッチ」が少なく、整合性を保つ境界である「集約」を自然に扱えます。一方で、自由度が高いゆえに、データの整合性を担保する責務を集約が強く持つ必要があり、そのトレードオフを強く実感しました。
「おでかけ承認機能」のフロー改善
タップルには、行ってみたいデートプランや日時を設定するだけでデートのお相手を募集できる「おでかけ機能」があります。デート募集は24時間掲載され、募集に対して届いた「おさそい」を承認することで、デートを前提としたマッチングが成立する点が大きな特徴です。
今回のインターンでは、この「おでかけ機能」における承認フローの改善を担当しました。具体的には、届いた「おさそい」に対して明示的に「承認・否認」を選択できる仕組みを導入することで、ユーザー体験の向上と機会損失の低減を目指しました。
具体的には、「主体・客体」の関係性を整理したフィルタリングの実装や、重複を防ぐための適切なエラーハンドリングなど、技術的な細部までこだわりました。また、新規APIの実装だったため、OpenAPIでの定義からBFF層の実装、さらに施策効果を追跡するためのログ基盤(Snowflake連携など)の改修まで、一気通貫で経験することができました。
学んだこと
大規模システムにおける「変化」との向き合い方
現在進行形でリアーキテクチャが進んでいる箇所での開発だったため、整い切っていないコードのロジック理解やいかに品質を保ちながら新規開発を進めるか、という難しさを学びました。また、リアーキ担当の方と密に連携し、将来的な理想像を見据えながら実装する重要性を実感しました。
高速な開発サイクルを支える技術
サイバーエージェントの強みである「開発サイクルの速さ」の裏側には、徹底した自動化とナレッジの共有がありました。
- 高度なCI/CD:
GitHub ActionsによるMatrixビルドでのテスト並列実行、GitOpsに基づくイメージタグの自動更新PR、ナンバリングされた開発環境への自動デプロイなど、エンジニアが本質的な開発に集中できる環境が整っていました。
- AIツールの積極活用:
コーディング支援だけでなく、AIが適切に動作するための「ガードレール(アーキテクチャ原則やワークフローを記したmdファイル)」が整備されていたのが印象的でした。これにより、AIによるコードリーディングや生成が高い精度で行われ、爆速のキャッチアップが可能になっていました。精度の高いAIレビューツールも導入されており、人間が本質的なロジックやアーキテクチャの議論に集中できる環境が整っていました。AIを単なる「効率化ツール」として使うのではなく、エンジニアが「より高度な設計判断」を下すための強力なパートナーとして組み込んでいる点に、タップル開発チームの技術的な成熟度を感じました。
おわりに
CA Tech JOBに参加した1ヶ月は本当に短く、あっという間に過ぎました。
プロの現場における「設計の意図」や「開発効率への投資」の重要性を学べたことは、今後のエンジニア人生において大きな財産になりました。また、技術以外の面でも非常に濃密な時間を過ごせました。毎日のランチや忘年会、勉強会といった機会を通じて、さまざまな職種の社員さんと交流できました。皆さんの就活の経験やサイバーエージェントでの仕事について、色々な話を聞き、インターンでの取り組み以外にも、サイバーエージェントの雰囲気や文化をより深く理解することができました。
お世話になったトレーナーの皆さん、チームの皆さん、本当にありがとうございました!!!
