LinkPersona - AR×マッチングアプリ
背景
解決したい課題
現代のマッチングアプリには以下のような課題がありました:
-
会う前の不安が大きい
- プロフィール写真と文章だけでは相手の雰囲気がわからない
- 実際に会ってみたら「思っていた人と違った」というミスマッチが多い
- 初対面で緊張してしまい、本来の自分を出せない
-
テキストコミュニケーションの限界
- テキストだけでは相手の性格や話し方がわからない
- 文章を考えるのが苦手な人にとってハードルが高い
- 音声や表情といった非言語情報が伝わらない
-
安全性への懸念
- いきなり実際に会うのは怖い
- 個人情報を開示することへの不安
- 相性を確認する手段が限られている
LinkPersonaのアプローチ
これらの課題に対し、AR技術とAIを組み合わせた新しいマッチング体験を提供します:
-
マッチングした相手のAIアバターと音声会話
- 相手のプロフィール(性格、趣味、年齢など)を学習したAIが相手になりきって会話
- 完全音声ベースのリアルタイムコミュニケーション
- 実際に会う前に相手の雰囲気や相性を確認できる
-
AR空間での没入体験
- Three.jsによる3Dアバターがブラウザでリアルタイム表示
- カフェ、公園、ビーチなど好きな環境を選んで会話
- アバターの表情、ジェスチャー、口パクが自然に同期
-
安全で段階的なコミュニケーション
- AIアバター会話 → テキストメッセージ → 実際に会う、という段階的なステップ
- 相性を事前に確認することで、ミスマッチを防ぐ
- プライバシーを守りながら安心してコミュニケーション
使った技術
フロントエンド
- Next.js 16 (App Router) - React ベースのフルスタックフレームワーク
- TypeScript - 型安全な開発
- TailwindCSS - ユーティリティファーストの CSS フレームワーク
- Three.js / React Three Fiber - WebGLベースの3Dレンダリング(ARアバター表示)
- Web Audio API - 音声解析と口パク同期
バックエンド
- Ruby on Rails 8 (API mode) - RESTful API サーバー
- Action Cable - WebSocket によるリアルタイム通信
- Sidekiq - バックグラウンドジョブ処理(画像生成とか)(未実装...)
- Puma - マルチスレッド対応 Web サーバー(未実装...)
データベース・キャッシュ
- MySQL 8.0 - リレーショナルデータベース
- Redis - セッション管理、ジョブキュー(未実装...)
AI・機械学習
- Amazon Bedrock (Claude) - 相手のプロフィール情報を基にした自然な会話生成
- Amazon Transcribe - 音声からテキストへのリアルタイム変換(日本語対応)
- Amazon Polly - テキストから自然な音声合成(日本語音声対応)
認証・ストレージ
- AWS Cognito - ユーザー認証・認可
- AWS S3 - プロフィール画像、3Dモデル、音声ファイルの保存
- CloudFront - CDNによる高速配信
インフラ・DevOps
- Amazon EKS (Kubernetes) - コンテナオーケストレーション
- Docker - コンテナ化
- Terraform - Infrastructure as Code (AWSリソース管理)
- GitHub Actions - CI/CD パイプライン
- Prometheus & Grafana - モニタリング・可視化
セキュリティ
- AWS WAF - Web アプリケーションファイアウォール
- ALB (Application Load Balancer) - HTTPロードバランシング
技術構成図

Nulab行動規範
Try first - まず試してみる
このプロジェクトでは、新しい技術や挑戦的なアイデアを積極的に取り入れました:
新技術への挑戦
- WebブラウザでのAR体験: アプリインストール不要、Three.jsによるブラウザベースの3Dアバター表示に挑戦
- 完全音声ベースのコミュニケーション: テキスト入力なし、音声のみのリアルタイム会話という新しいUX
- AIが相手になりきる: Amazon Bedrockを活用し、相手のプロフィール情報を学習したAIが自然に会話を生成
技術的な挑戦
- リアルタイム音声処理パイプライン: 音声認識 → AI応答生成 → 音声合成 → 口パク同期の一連の流れを低レイテンシで実現
- Kubernetes on AWS EKS: コンテナオーケストレーションによるスケーラブルなインフラ構築
- WebSocket + REST APIのハイブリッド: Action CableとRESTful APIを組み合わせた効率的な通信設計
実験的な機能
- 相性スコア自動計算: 共通の趣味、性格タイプ(MBTI)、年齢などから相性を数値化
- 環境選択によるAR空間: カフェ、公園、ビーチなど、シチュエーションに合わせた3D環境の切り替え
エンジニアたちの感想
失敗を恐れず、まず実装してみよう!をモットーに開発しました。
チームメンバーそれぞれが自分のボーダーを超えて新しいことに挑戦し続ける姿勢を大事にしています。ARの実装やボーンの設定、Three.jsを用いたアニメーションの作成等、やったことない事に沢山挑戦したプロダクトです!
Love Differences - 違いを愛する
多様性を尊重し、誰もが安心して使えるプラットフォームを目指しました:
多様な属性への対応
- ジェンダー選択: Male / Female / Other の3つから選択可能
- 性格タイプ: MBTI、性格タイプなど、多様な自己表現方法をサポート
- 興味・趣味の多様性: アニメ、旅行、スポーツ、音楽など幅広いカテゴリに対応
アクセシビリティへの配慮
- 段階的なコミュニケーション: AIアバター会話から始めることで、人見知りの方でも安心
- ブラウザで完結: 特別なアプリのインストール不要、PCでもスマホでもアクセス可能
安全性とプライバシー
- 段階的な情報開示: AIアバターとの会話から始め、徐々に親密になれる設計
- 個人情報保護: AWS Cognitoによる安全な認証、S3の暗号化ストレージ
- マッチング解除機能: 合わないと感じたらいつでもマッチングを解除できる
エンジニアたちの感想
私たちのチームのメンバーは個々が様々な技術を持ち、様々なレベルでLink Personaの開発に挑んでいます。それぞれが違うポテンシャルを持つ中で大切にしたことは、相手の技術や価値観を受け入れ、わからないときは「頼る」ことです。違いがあるからこそ、開発に相乗効果が生まれ個性的なプロダクトになりました。例えば、爆発のモーションは、最初はとても地味なものだったけど、「Three.js使ってみたら?」や「もっと、派手なほうがわかりやすいんじゃない?」と、沢山のエンジニアがいたからこそ改善された点が多くあります。
Goal Oriented - 目標を見据える
明確なゴールを設定し、そこに向かって段階的に開発を進めました:
プロジェクトの目標
- ユーザー体験の向上: マッチングの不安を解消し、安心して相手と繋がれる体験を提供
- 技術的な実現性: AR × AI という先進的な技術を、実用レベルで動作させる
- スケーラビリティ: 多くのユーザーが同時に利用しても安定稼働するインフラ
段階的な開発アプローチ
- Phase 1: 基本的なマッチング機能とプロフィール管理
- Phase 2: ARアバター表示と3Dレンダリング
- Phase 3: AI会話機能の統合(音声認識・音声合成)
- Phase 4: リアルタイム音声会話とアバター口パク同期
- Phase 5: Kubernetesへの移行とスケーラビリティの確保
計測可能な指標
- レスポンスタイム: 音声入力からAI応答までの時間を3秒以内に
- マッチング成功率: AIアバター会話後の実際の会話移行率を追跡
- ユーザー満足度: 「実際に会う前に相性を確認できた」という声を重視
インフラの安定性
- 監視体制: Prometheus + Grafana によるメトリクス監視
- 自動スケーリング: EKSのHorizontal Pod Autoscalerによる負荷対応
- CI/CD: GitHub Actionsによる自動テスト・デプロイ
エンジニアたちの感想
目標から逆算し、今何をすべきかを常に意識しながら開発を進めました。私たちが設定した目標を達成することで、ユーザーに誰もが自分らしくいられる場所・仲間を提供できます。
ユーザーにとって使いやすいプロダクトかを常に考慮しながら開発に取り組んでいます。
技術的な挑戦と実用性のバランスを取りながら、ユーザーにとって本当に価値のあるプロダクトを目指しています。