MIXI GROUPは多様な事業領域でサービスを展開しています。
サービスの中には10年を超えるロングタイトルもあれば、リリースしたてのプロダクトもあります。技術は時と共に変化・進化するため、サービスのフェーズや特性に応じて必要な技術も様々。そのため、MIXIでの技術選定は、それぞれのサービスを開発するエンジニアが最適な技術を選択しています。
本記事では、各プロダクトで使われている技術についてまとめました。開発言語をはじめ、ライブラリやデプロイツールなどMIXIで用いている技術を全3回に分けて、すべてご紹介します!
ライフスタイル
『家族アルバム みてね』
ママ・パパが撮った子どもの写真や動画を、祖父母や親戚など、招待した家族だけに共有できるアプリです。これまで多くのご家族にご利用いただいており、2022年8月には利用者数が1,500万人(※iOS / Androidアプリ登録者数、ブラウザ版登録者数の合計)を突破しました。グローバル展開も進めており、現在7言語・175の国と地域でご利用いただけます。
技術スタック
iOS(言語、ライブラリなど) | Swift / Swift Concurrency / RxSwift / Alamofire / Realm / CoreData |
Android(言語、ライブラリなど) | Kotlin / Kotlin Coroutines / Kotlin Flow / RxJava3 / Retrofit2 / OkHttp3 / Hilt / WorkManager / Room / Android Archtecture Component / Glide4 / ExoPlayer / Jetpack Compose |
サーバサイド(言語、ライブラリなど) | Ruby ( Ruby on Rails ) / Go / Python |
インフラ | AWS( EKS / ECR / S3 / CloudFront / ALB / Route 53 / SQS / SNS / SES / Kinesis Data Firehose / SageMaker ) |
ミドルウェア | Puma / Sidekiq Pro |
データベース | Aurora / Aurora Global Database / DynamoDB |
モニタリング | New Relic / CloudWatch / Prometheus / Grafana / PagerDuty |
データ分析 | BigQuery / Athena / Redash |
デプロイツール | Argo CD |
環境構築 | Terraform |
CI | Bitrise / GitHub Actions / CircleCI / CodeBuild |
機械学習ライブラリ | TensorFlow + Keras / PyTorch / Kubeflow Pipelines |
その他 | DeployGate / Firebase / ImageMagick / libvips / FFmpeg |
『minimo』
『minimo』は、お客様ユーザにとっては自分にぴったりのサロンスタッフをお得に探して予約できるアプリです。
美容師、ネイリスト、アイデザイナーなど美容サービスを提供する側のユーザにとっては、自分のスマホさえあればすぐに集客を始めることができるアプリです。
技術スタック
iOS(言語、ライブラリなど) | Swift / Objective-C / SwiftGen |
Android(言語、ライブラリなど) | Kotlin / Java / Android Architecture Component ( LiveData / ViewModel ) / DataBinding / ViewBinding / Kotlin Coroutines / Retrofit2 / Dagger2 |
フロントエンド(言語、ライブラリなど) | JavaScript / TypeScript / React / Next.js / RTK Query / React Hooks Form / Emotion / Storybook |
サーバサイド(言語、ライブラリなど) | Perl / Go |
インフラ | AWS( EC2 / ECS / Fargate / RDS / S3 / CloudFront / OpenSearch / Route53 / Cognito / SQS / etc. ) / ImageFlux |
ミドルウェア | nginx / td-agent / rundeck |
データベース | MySQL |
モニタリング | CloudWatch / Datadog |
データ分析 | BigQuery / Looker / Redash / GA4 / AppsFlyer |
デプロイツール | AWS CDK |
環境構築 | AWS CDK / Docker |
CI | GitHub Actions ( self-hosted runners ) / CodeBuild / Bitrise |
その他 | Firebase / DeployGate |
技術スタックの背景
〈インフラについて〉
当初、『minimo』ではEC2にて本番環境を運用していましたが、インフラの複雑化や属人化、スケーラビリティといった課題解決のため、コンテナ運用に移行することになりました。
コンテナは、学習コスト面やバージョンを意識せずに済む観点からECSを採用しました。
現在ではそれらをCDKで管理し、自動でデプロイされる仕組みが構築されています。
〈Go移行について〉
次の大きな技術スタックのアップデートとして、PerlからGoへの移行に取り組んでいます。
エンジニア採用、イメージサイズや型の不在、ライブラリのメンテ状況といった課題を解決でき、かつメンバーのモチベーションが高いGoを選定し、現在移行作業を行なっています。
〈Webフロントエンド移行について〉
『minimo』Web版もサーバサイドMVCフレームワークのテンプレートエンジンがHTMLを出力する形から、Next.jsを使った形への移行に取り組んでいます。
事業が成長しメンバーが増え開発が活発になった結果、見た目の崩れ、ページ表示速度の低下等の課題が少しずつ出てきたため、より効率的な開発を行える体制を目指しています。
Next.jsは「すでに『minimo』でReactを使ったサービスがありその知見を活かせること」「SEOを考えた時にSSRが必須なこと」という2つの観点で採用を決めました。
『会話AIロボット Romi』
Romi事業部では、新規事業として、人と会話ができる家庭用会話ロボットを研究開発しています。スマートスピーカーなど世の中の多くの会話システムは、便利な機能を実現するための手段として会話を使います。一方、私達は便利な機能ではなく、雑談的な会話をして情緒、感情的なニーズを満たすことを目的としています。これはとてもチャレンジングな課題で様々なアルゴリズムを組み合わせて検証を行っています。
技術スタック
iOS(言語、ライブラリなど) | Swift / Lottie / Firebase / Mint / XcodeGen / SwiftGen / SwagGen / SwiftLint / Bitrise / fastlane |
Android(言語、ライブラリなど) | Kotlin / Lottie/ Firebase |
フロントエンド(言語、ライブラリなど) | React / TypeScript / Vue.js |
サーバサイド(言語、ライブラリなど) | Python / Poetry / Flask / OpenAPI |
インフラ | AWS ( EC2 / ECS Fargate / ALB / CloudFront / Lambda / IoT / Route53 / IAM / EventBriddge ) / Google Cloud ( Compute Engine – 機械学習の学習環境のみ / Cloud Speech-to-Text ) |
ミドルウェア | uWSGI |
データベース | Aurora / DynamoDB / Elasticsearch / ElastiCache / Neptune / Shadow ( AWS IoT ) / S3 |
モニタリング | CloudWatch |
データ分析 | Elasticsearch / BigQuery / Looker |
デプロイツール | CircleCI |
環境構築 | Terraform / Ansible / Packer |
CI | CircleCI |
機械学習ライブラリ | PyTorch |
その他 | ROS / Unity ( Romi のモーター動作シミュレーション ) |
技術スタックの背景
エンジニア9人で、インフラからフロント、アプリ、ハードウェア(一部)まで開発しているため、チームメンバーは自分の得意な分野を持ちながらも他の分野もわかるT型人材で構成されています。
使っているデータベースが幅広いのも特徴で、GraphDBであるNeptuneなど珍しいものも使っています。
『Romi』の知識表現として三項関係(Romi – 好き – バナナ)を用いるためGraphDBを使い始めましたが、我々の用途だとオーバースペックで、RDBで十分だったなというのが反省点です。
機械学習はもともとTensorFlowを使っていましたが、世の中がPyTorch優勢になってきたことや、コードの書きやすさなどから現在はPyTorchに移行しました。
『KARASTA』
『KARASTA(カラスタ)』は、カラオケや音楽が好きな人が集う、「カラオケ動画 / ライブ配信コミュニティアプリ」です。
スマホだけで手軽にカラオケを楽しんだり、歌ってみた動画を作って、他のユーザに見てもらったりすることができます。
キー変更やエコーなど本格的なカラオケの機能があり、肌が綺麗に見える美肌フィルター、ユニークな画像エフェクトなどでより楽しいカラオケ動画を作ることができます。
技術スタック
iOS(言語、ライブラリなど) | Swift / RxSwift / AudioKit / BytePlus Effects |
Android(言語、ライブラリなど) | Kotlin / Jetpack Compose / Corutines / Superpowered / BytePlus Effects |
フロントエンド(言語、ライブラリなど) | ES6 / Vue.js 2 |
サーバサイド(言語、ライブラリなど) | Python3 / Django / Django REST Framework |
インフラ | AWS ( ECS Fargate / ALB / CloudFront / Lambda / Media Convert / S3 / IoT / SES ) / Google Cloud ( Pub/Sub ) |
ミドルウェア | uWSGI / Celery |
データベース | AWS Aurora Serverless v2 / AWS ElastiCache for Redis |
モニタリング | AWS CloudWatch / New Relic / Rollbar |
データ分析 | Redash / AWS Athena / BigQuery |
デプロイツール | invoke / AWS CLI / boto3 |
環境構築 | Terraform / Docker |
CI | CircleCI / Bitrise |
その他 | FIrebase Cloud Messaging / Agora.io |
技術スタックの背景
チームが少人数ということもあり、AWSのマネージドサービスやクラウドサービスを多用しています。ライブ配信は複数人で配信する必要があったのと、SDKがオーディオ系を扱いやすかったため、Agora.ioを採用しました。
クライアントではカラオケ動画を作成することもあり、オーディオや動画エフェクトのライブラリを使用しているのが特徴です。
バックエンドはメンバーがPython / Djangoに馴染みがあったので採用しました。インフラはWebアプリケーションでの王道の構成だと思います。PubSub機能とクライアントアプリのタスクキルを検知するためにAWS IoTを使っているのが数少ない特異点です。
『mocri』
誘いづらい・喋りながら作業できない人のための作業通話アプリ『mocri(もくり)』です。作業したい時にいつでも立ち寄れることができ、みんなで一緒に集中して作業することができます。
技術スタック
iOS(言語、ライブラリなど) | React Native / Swift / gRPC ( gRPC-ProtoRPC / gRPC-Web ) |
Android(言語、ライブラリなど) | React Native / Kotlin / Coroutines / gRPC ( gRPC-OkHttp / gRPC-Android / gRPC-Web ) |
フロントエンド(言語、ライブラリなど) | TypeScript / React / Next.js / Fastify / gRPC ( gRPC-Web ) |
サーバサイド(言語、ライブラリなど) | Go / gRPC ( gRPC-Go ) / Protocol Buffers |
インフラ | AWS ( EKS / CloudFront / NLB / S3 / SES / Route 53 ) |
ミドルウェア | Envoy / nginx / Faktory |
データベース | Amazon Aurora / Amazon ElastiCache for Redis |
モニタリング | Amazon CloudWatch |
データ分析 | Metabase / BigQuery / Google Analytics ( GA4 ) / Firebase Analytics |
デプロイツール | kubectl / bash |
環境構築 | Terraform / Ansible |
CI | GitHub Actions |
その他 | Firebase Cloud Messaging / Firebase Dynamic Links / Agora.io |
技術スタックの背景
エンジニアが3人以上になったことがない少人数チームでiOS / Android / Webの3プラットフォームを開発するため、React NativeやNext.jsなど、Reactを使ったライブラリやフレームワークを導入し、アーキテクチャを統一して出来る限りコードの再利用ができるような少人数でも作れる構成にしています。
iOS / AndroidはUIはReact Native、双方向通信や音声通話関連箇所はネイティブ実装しています。
バックエンドはコンテナイメージサイズを抑えられ、かつパフォーマンスの良いGoを採用し、Protocol Buffersを使ったスキーマファースト開発でAPIを作成しています。
インフラはサービス全体の管理とスケールのしやすさからKubernetesを採用し、サービス開始当初はkOpsを使っていたものの、クラスタアップデートで問題が生じやすかったので後にEKSへ移行しています。
『FINDJOB!』
IT・Web業界に特化した有名企業からスタートアップのデザイナー・エンジニア求人を中心に、業界最大級の求人を多数掲載中。独自のマッチング機能であなたに合う企業をお届け。選考前から企業の評価やメンバーが分かるからこそ、不安のない仕事探しを実現します。
技術スタック
フロントエンド(言語、ライブラリなど) | Nuxt.js / Vue.js / TypeScript / Vuetify |
サーバサイド(言語、ライブラリなど) | Django / Django REST Framework / Python |
インフラ | AWS( EC2 / ECR / ECS Fargate / CloudFront / Lambda / S3 ) / Terraform |
ミドルウェア | nginx / uWSGI |
データベース | MySQL / Redis |
モニタリング | CloudWatch / Datadog / SendGrid |
データ分析 | Redash / Google Analytics / Ahrefs |
デプロイツール | Jenkins |
環境構築 | Docker |
CI | Jenkins / CodeBuild / CircleCI / Danger |
技術スタックの背景
フロントエンドに関しては、プロジェクト開始当初フロントエンドエンジニアがいなかったため、HTMLの記述方式でデザイナーも取っ付きやすいかつ、画面のUIパーツ単位で作れるフレームワーク、SPAの開発が容易にできるとしてNuxt.jsを採用しました。
バックエンドに関しては、ペンディングとなってしまった類似プロジェクトの副産物をそのままベースとして活用できそうだったのと、将来的にやりたいことが実現できそうだったのでDjangoを採用しました。
『mixi』
『mixi』は、最大時、数千万規模のユーザーが利用していたプロダクトで、18年以上の歴史があるSNSです。日記やコミュニティ、足あとなどSNS機能のほか、ソーシャルボタンやゲームプラットフォームなど外部連携機能をもち、独特なコミュニケーションの場を提供しています。
技術スタック
iOS(言語、ライブラリなど) | Swift / Objective-C |
Android(言語、ライブラリなど) | Java |
フロントエンド(言語、ライブラリなど) | JavaScript / TypeScript / Less |
サーバサイド(言語、ライブラリなど) | Perl / Ruby / Python |
インフラ | AWS ( EC2 / ECS / S3 / CloudFront / Lambda / Route53 / Elasticsearch / etc. ) / Google Cloud( Cloud Vision API ) |
ミドルウェア | Apache / nginx / memcached |
データベース | RDS / MySQL / Aurora |
モニタリング | CloudWatch / Sensu / Datadog |
データ分析 | Google Analytics / EMR / Spark / SageMaker |
デプロイツール | Consul / Stretcher |
環境構築 | Chef / Docker / Ansible |
CI | Jenkins / Bitrise / CodeBuild |
LX事業部
サービス/事業部の取り組み
ライブエクスペリエンス事業本部では、千葉ジェッツやFC東京などのスポーツ事業やライブエンタメに関わる領域を担当しています。システム部門では、来場者4万人のXFLAG PARK関連のシステムをはじめ、ライブエンタメに関するシステム開発・保守を行っています。また、ライブエンタメ分野での新規事業の開発を進めています。
技術スタック
フロントエンド(言語、ライブラリなど) | TypeScript / React / Next.js |
サーバサイド(言語、ライブラリなど) | Go / Ruby on Rails / Rust |
インフラ | AWS / Google Cloud ( GKE / Cloud Run ) |
ミドルウェア | nginx / Puma / Unicorn / Sidekiq |
データベース | MySQL / DynamoDB / Cloud Spanner |
モニタリング | Grafana / CloudWatch / CloudWatch Logs |
データ分析 | BigQuery / Redash / Google Analytics |
環境構築 | Terraform |
CI | CircleCI / GitHub Actions / Bitrise |
技術スタックの背景
素早い開発とリリースを行うために最近ではCloud Runといった環境構築が容易なものの採用が多くなってきています。一方でXFLAG PARK関連といったアクセスが多くなることが見込まれるシステムではCloud Spannerのような高負荷に耐えられるものを利用し、サービスを継続して提供できるような工夫も欠かさず行っています。新規プロジェクト開発が多い部署であり新しいものも試しやすく、一部のAPIをRustで作成し実際に利用することで評価を行うといったトライも行っています。
CRE
サービス/事業部の取り組み
CS部CREグループは「CSスタッフのクリエイティビティを最大化する」というミッションのもと、CSスタッフのユーザーに寄り添った対応を技術面から支援しています。CREでは、スタッフの手作業を自動化するだけでなく、CSスタッフが成長したり、ひらめきを得られたりするようなシステムを開発しています。
技術スタック
フロントエンド(言語、ライブラリなど) | JavaScript / TypeScript |
サーバサイド(言語、ライブラリなど) | Ruby ( Ruby on Rails / Padrino ) / Go / Python / Elixir ( Phoenix ) |
インフラ | AWS ( EC2 / S3 / RDS / SageMaker / CodeBuild / Lambda / API Gateway / Athena / etc. ) / Google Cloud ( BigQuery / GCE / GAE / Pub/Sub / Cloud Functions / Cloud Search / etc. ) |
ミドルウェア | nginx |
データベース | MySQL / PostgreSQL / InfluxDB |
モニタリング | CloudWatch |
データ分析 | Athena / BigQuery |
デプロイツール | Capistrano |
環境構築 | Docker / Ansible / Packer / Terraform / Apex |
CI | CircleCI |
その他 | CloudSearch |
MIXI TECH CONFERENCE 2023 を3/1(水)より開催します!
MIXI TECH CONFERENCE では、本記事で取り上げてきたサービスやプロダクトについて、それぞれの技術や開発組織など、私たち技術者たちがこれまでの経験の中から得られた知見やノウハウ、今現在、抱えている課題、思い描いている未来像などを共有します!
自社に閉じることなく、世の中の技術発展を目指し、一緒にエンジニア業界を盛り上げていければと思いますので、ぜひご参加頂ければと思います。イベント詳細や参加登録は以下の公式サイトで受け付けております。奮ってご参加ください!