MIXI GROUPは多様な事業領域でサービスを展開しています。
サービスの中には10年を超えるロングタイトルもあれば、リリースしたてのプロダクトもあります。技術は時と共に変化・進化するため、サービスのフェーズや特性に応じて必要な技術も様々。そのため、MIXIでの技術選定は、それぞれのサービスを開発するエンジニアが最適な技術を選択しています。
本記事では、各プロダクトで使われている技術についてまとめました。開発言語をはじめ、ライブラリやデプロイツールなどMIXIで用いている技術を全3回に分けて、すべてご紹介します!
今回は、中編になります。前編はこちらから。
スポーツ
『TIPSTAR』
『TIPSTAR』は、公営競技を取り扱ったサービスで、有料はもちろん無料のメダルでも遊ぶことができます。公営競技のスポーツ性やエンターテインメントの要素にフォーカスし、新しい映像コンテンツ、遊び方を提供していくサービスとなっています。サービス想定規模が大きく特定の時間にスパイクが発生する要件が見込まれたので容易にスケールできる形と非同期で処理ができる形にしていきました。PFがiOS / Android / Webとある中、OpenAPIにてAPIを定義することで各PFで再利用可能な物を用意し効率化しています。
技術スタック
iOS(言語、ライブラリなど) | Swift / RxSwift / Unity as a Library / Firebase / gRPC-Swift / SnapKit |
Android(言語、ライブラリなど) | Kotlin / Kotlin Coroutines / Kotlin Flow / UI Automator / Unity as a Library / Firebase |
フロントエンド(言語、ライブラリなど) | TypeScript / React / Next.js / SWR / Redux / Storybook / Jest / styled-components / Firebase |
サーバサイド(言語、ライブラリなど) | Go / Echo / OpenAPI / Protocol Buffers / Ruby on Rails |
インフラ | Google Cloud ( GKE / Cloud Run / Cloud Spanner / Memorystore / etc. ) / AWS ( MediaLive / CloudFront / S3 / etc. ) |
ミドルウェア | Kubernetes / nginx / Spanner Autoscaler |
データベース | Cloud Spanner / Cloud SQL |
モニタリング | Cloud Monitoring / Managed Service for Prometheus |
データ分析 | Firebase / BigQuery / Looker / DataFlow |
デプロイツール | Helm / Argo CD |
環境構築 | Terraform |
CI | Bitrise / GitHub Actions / CircleCI / Cloud Build |
機械学習ライブラリ | AutoML vision |
その他 | gRPC / PagerDuty / SendGrid / DeployGate |
技術スタックの背景
iOS / Android / Webとして多数のプラットフォームへネイティブでの開発、Google Cloudをメインとし映像周りにAWSを利用し広範囲で技術に触れることができることが特徴の一つとなっています。
アプリケーションはネイティブでの実装に加え、ガチャやゲーム性の高い部分についてはUaaLを利用したり、MLを利用したレース結果の予想やレコメンデーションの開発など技術的なトライも行っています。
開発のフローは常に更新しており、スクラムの導入に向け大多数のメンバーがスクラム研修を受ける機会を設けるなど広い範囲での学習機会の創出にも積極的に取り組んでおります。
『Fansta』
『Fansta(ファンスタ)』は、スポーツファンがスポーツ観戦できる飲食店を、エリアだけでなく放映予定からも検索することができるサービスです。『Fansta』内でお得なクーポンの配布、飲食店の予約、定期的なキャンペーンを開催することでユーザと飲食店(主にスポーツバー)を繋げるサービスとなっています。
技術スタック
iOS(言語、ライブラリなど) | Flutter / GetX |
Android(言語、ライブラリなど) | Flutter / GetX |
フロントエンド(言語、ライブラリなど) | TypeScript / React / Next.js / Apollo / Jest / ESLint / Sass |
サーバサイド(言語、ライブラリなど) | Ruby / Ruby on Rails / RSpec |
インフラ | Google Cloud ( GKE ) |
ミドルウェア | nginx |
データベース | Cloud SQL ( MySQL ) |
モニタリング | Cloud Monitoring |
データ分析 | Cloud Logging / Google Analytics / Google Tag Manager / Data Studio / AppsFlyer |
デプロイツール | Argo CD / Helm |
環境構築 | Docker / Docker Compose |
CI | CircleCI / Bitrise |
その他 | GraphQL / ImageFlux / Rollbar / Renovate / SendGrid |
技術スタックの背景
FlutterやGraphQL / Kubernetesといったモダンな技術を積極的に採用しています。特にアプリ開発においては、チーム内にアプリエンジニアがいない状況でiOS / Androidをリリースする必要がありました。そこで、学習コストが低く、挑戦したいメンバーが多かったFlutterを採用しました。結果、それぞれ開発するより大幅に工数を削減することができたと考えています。また、メンバーのモチベーションも高く開発できました。
また、Fansta開発チームでは、属人化しない体制作りを積極的に行っていることが大きな特徴です。技術領域の垣根を設けず、全員が全ての領域に触れることができるようにしています。
これを実現するために、リリース手順書の作成や困ったときのペアプロ、毎日の開発定例内で相談する時間を設けることで、お互いにフォローしながら日々作業を進めています。
『humy』
音楽アーティストのファンを対象に、アーティストからの生の声や最新情報を届ける、ファンコミュニケーションプラットフォームです。
現在は洋楽アーティストと連携していることもあり、多言語化や外貨決済への対応を進め、国外のユーザーに対しても展開しています。
技術スタック
iOS(言語、ライブラリなど) | Flutter / Riverpod |
Android(言語、ライブラリなど) | Flutter / Riverpod |
フロントエンド(言語、ライブラリなど) | Next.js / Apollo |
サーバサイド(言語、ライブラリなど) | Go / gqlgen / AWS S3 / AWS Elemental MediaConvert |
インフラ | Google Cloud ( App Engine ) / Terraform |
データベース | Cloud Spanner |
モニタリング | Cloud Monitoring |
CI | GitHub Actions / Bitrise / CircleCI |
ゲームクライアント |
技術スタックの背景
バックエンドは、Cloud Spannerに格納したデータを処理し、レスポンスをGraphQLで返していますが、この構成を実現する既存のGo言語のフレームワークが確立しておらず、自動生成ツールなどを活用して新規開発を続けています。
『DAZN MOMENTS』
『DAZN MOMENTS』はスポーツ・チャンネル「DAZN」と共同で開発・運営するスポーツ特化型NFTマーケットプレイスで、様々なスポーツジャンルのNFTコンテンツを提供予定。スーパープレイやメモリアルシーンの瞬間をNFTコンテンツとして提供するサービスです。
好きなスポーツ、好きな選手を集め、お気に入りのシーンを何度でも楽しむことができます。コンテンツにはそれぞれシリアルナンバーが記されており、Flowブロックチェーンに記録されます。
技術スタック
フロントエンド(言語、ライブラリなど) | TypeScript / React / Next.js |
サーバサイド(言語、ライブラリなど) | Go |
インフラ | Google Cloud / Kubernetes |
ミドルウェア | nginx / Kafka |
データベース | PostgreSQL |
モニタリング | Bugsnag |
データ分析 | Google Analytics / Looker / BigQuery |
デプロイツール | Kustomize |
環境構築 | Terraform |
CI | GitHub Actions |
その他 | Flow ( blockchain ) / GraphQL |
技術スタックの背景
『DAZN MOMENTS』ではNFTの基盤としてFlowを使っています。FlowはNFTを扱うことに特化したブロックチェーンで、高速に処理を行うことができるとともに、proof-of-stake方式を用いることで電力消費も抑えていることが特色となっています。Webアプリケーション部分ではフロントエンドではReact、バックエンドではGoを利用しており、GraphQLでデータのやり取りを行っています。インフラとしてはKubernetesを採用しています。
『MIXI M』
『MIXI M』は、認証から決済までをワンストップで提供できる基盤システム & WALLETサービスです。
ビジネスからエンタメ領域まで様々なサービスの『間(M)』をなんとかすることをサービスコンセプトとして、ID・認証基盤やWALLET(金融システム)をすべて自社開発することでユーザーの利用シーンに合わせた柔軟なサービスを展開しています。
技術スタック
iOS(言語、ライブラリなど) | Swift / VIPER / RxSwift / XcodeGen |
Android(言語、ライブラリなど) | Kotlin / Jetpack / Navigation Architecture Component |
フロントエンド(言語、ライブラリなど) | TypeScript / React / Next.js / Storybook |
サーバサイド(言語、ライブラリなど) | Elixir / Phoenix / Ecto |
インフラ | AWS ( Amplify / ECS / Fargate / Lambda / API Gateway ) |
ミドルウェア | Amazon SQS / AWS Key Management Service / Amazon SES |
データベース | Amazon DynamoDB / Amazon Aurora |
モニタリング | Amazon CloudWatch / Rollbar / PagerDuty |
データ分析 | AWS Glue / Amazon Athena / Looker / Google Analytics 4 |
デプロイツール | AWS CodeDeploy |
環境構築 | AWS CloudFormation |
CI | AWS CodeBuild / GitHub Actions |
技術スタックの背景
『MIXI M』では、主にPCIDSS準拠した決済システムやID基盤を開発・運用しています。これらのシステムに対し、フルマネージドサービスを積極活用しながら内製することで、少人数での開発と運用コストの削減を実現しています。
技術的にはErlang VMの安定性や、耐障害性、パターンマッチの便利さなども考慮しElixirを利用して開発を行っています。
データストアに関しては、スケーラビリティの観点を始めとした様々な面でのメンテナンスコストを抑えるために、DynamoDBを全面的に採用しています。
デジタルエンターテインメント
『モンスターストライク』
モンスト事業本部の開発室では、世界累計利用者数5,900万人(2022年11月時点)を突破した『モンスターストライク』を中心に様々なサービスを開発している部署です。サーバサイドでは、大手クラウドに加え、国内複数拠点のデータセンタを使用して運用を行っている点が大きな特徴です。
技術スタック
iOS(言語、ライブラリなど) | Objective-C / Swift |
Android(言語、ライブラリなど) | Java |
フロントエンド(言語、ライブラリなど) | JavaScript ( jQuery ) / Bootstrap / eRuby / Elm |
サーバサイド(言語、ライブラリなど) | Ruby ( rbenv / Bundler / Active Record / Active Support / Padrino / unicorn / Rake / Resque / RSpec ) / Go / Perl |
インフラ | Google Cloud ( GCE / CloudCDN / GKE ) / AWS ( EC2/ ELB / S3 / CloudFront / Route53 ) / オンプレミス ( Cobbler ) |
ミドルウェア | nginx / Fluentd / NATS / Consul |
データベース | MariaDB / Redis / Memcached / etcd / AWS RDS |
モニタリング | Prometheus / Nagios / CloudForecast / Grafana / CloudWatch / Cloud Monitoring / PagerDuty |
データ分析 | BigQuery / Amazon OpenSearch / Athena |
デプロイツール | Capistrano / Bazel / Helm |
環境構築 | Ansible / MItamae / Chef / Packer / Docker / Terraform |
CI | Jenkins |
ゲームクライアント | C++ / GLSL |
ゲームクライアント(サウンド) | OpenAL |
ゲームクライアント(グラフィックス) | OpenGL ES |
ゲームクライアント(エンジン) | Cocos2d-x |
ゲームクライアント(ミドルウェア) | Firebase SDK / AppsFlyer / EnsureIT |
ゲームクライアント(その他) | WebSocket / msgpack |
技術スタックの背景
サーバサイドはRails風のRubyウェブアプリケーションになっています。それらとMariaDBなどのバックエンドを主に自社データセンターで管理しており、需要に応じて各社クラウドにダイレクトに繋げて展開しています。 また、Kubernetesベースのメッセージングサーバ、自作ゼロトラストプロキシや各種運用ツールを開発し、リファクタリングと新技術の導入による改善を積み重ね、チャレンジと安定運用の共栄を目指しています。
『モンスターストライク』解析グループ
モンスト事業本部解析グループでは、モンストやモンストシリーズのデータ分析、分析基盤の構築運用を行っています。
日々蓄積される膨大なデータを用いて集計や統計分析を行いサービス改善、課題を把握・解決することで事業を支援します。
技術スタック
サーバサイド(言語、ライブラリなど) | Ruby / Python / Google Apps Script |
インフラ | Google Cloud ( Dataflow / GCS / GCE / GKE / Cloud Scheduler / Cloud Functions / Cloud Run / Workflows / Pub/Sub ) / AWS ( EMR / Lambda / Batch / Glue / ECS / S3 / EC2 ) |
データベース | RDS / DynamoDB |
モニタリング | CloudWatch Logs / Cloud Logging / Cloud Monitoring |
データ分析 | BigQuery / Looker / Athena / Colaboratory |
デプロイツール | Cloud Build / CodeBuild / CodePipeline |
環境構築 | CloudFormation / Terraform |
CI | Cloud Build / CodeBuild |
その他 | dbt / Airflow / Luigi |
技術スタックの背景
以前はAWSのEMR HiveでデータをETL、分析用にRedshiftにLoadするという構成でしたが、データ基盤のGoogle Cloud移行により構成が大きく変わりました。現在はAWS上のログやDBスナップショットをStorage Transfer ServiceでGCSへ送信、BigQueryでETLまたはELTしてデータの整備を行っています。
また、モンストシリーズでは各プロダクトを横断した分析を可能にするため、共通KPIの定義、ログフォーマットの共通化、BigQueryとLookerへのデータの集約など行っています。
分析のアウトプットとして利用されるGoogle Workspaceとの親和性や大規模データをフル活用出来るBigQuery、データガバナンスと可視化に優れたLooker構築に取り組み、データを必要とする人が必要なデータに素早くアクセス出来るデータ基盤の構築運用をしていきます。
『ゴーストスクランブル』
最大3人のマルチプレイで仲間と連携しボスオバケと戦う「ブッ祓い共闘アクションゲーム」です。ヒカリを当てる、味方オバケ「モンQ」を飛ばす等のアクションを駆使してオバケと戦うのが特徴です。
技術スタック
サーバサイド(言語、ライブラリなど) | Go / gRPC-Go / Ruby on Rails |
インフラ | GKE / Agones |
ミドルウェア | Firebase Cloud Messaging |
データベース | Cloud Spanner / Redis |
モニタリング | Prometheus / Cloud Monitoring |
データ分析 | BigQuery / Dataflow / Pub/Sub |
デプロイツール | Cloud Build |
環境構築 | asdf / Docker / Ansible |
CI | Cloud Build / GitHub Actions ( self-hosted runners ) |
その他 | Locust |
ゲームクライアント(言語) | C# / Rust / Java / Objective-C / HLSL |
ゲームクライアント(サウンド) | CRIWARE Adx |
ゲームクライアント(グラフィックス) | Universal Render Pipeline ( URP ) |
ゲームクライアント(エンジン) | Unity 2020 LTS |
ゲームクライアント(ミドルウェア) | Protocol Buffers / gRPC / Monobit Unity Networking ( MUN ) / Firebase SDK / AppsFlyer |
ゲームクライアント(その他) | 内製ボイスチャットシステム / 内製ゲーム録画システム / Roslyn Analyzer / Bugsnag / SRDebugger |
技術スタックの背景
〈クライアント〉
ボイスチャットや騒ゲーハイライトといった特殊なシステムも内製で、RustやiOS / Androidネイティブ実装が多く含まれています。アウトゲームではMV(R)Pアーキテクチャを軸とした作りで、コルーチン代替としてUniTaskをインゲームにおいても積極的に採用。グラフィックはURPを採用し、いくつかの汎用シェーダーを新規開発し、ゲーム中のほぼすべての表現を実現しています。また、CIに関して、MIXIのゲームプロジェクトにおいては、クライアントビルド、アセットバンドルビルドはJenkinsから脱却し、すべてGitHub Actionsのself-hosted runnerで構築した初の事例となっています。
〈インフラ〉
インフラに関する技術的な話は以下にまとめています。
https://medium.com/mixi-developers/stble-over-view-ab9bc69f5819
『共闘ことばRPG コトダマン』
コトダマン事業部では『共闘ことばRPG コトダマン』の開発・運用を行っています。言葉を作ってコンボを決める他にはない言葉合わせRPGです。
職種混合の少人数チームによるスクラム開発で新規機能の開発を行なっております。
技術スタック
サーバサイド(言語、ライブラリなど) | Java 8 ( Amazon Correto ) / Apache Tomcat / Apache Struts 2 |
インフラ | AWS ( EC2 / RDS / S3 / Route53 / CloudFront / ElastiCache / EKS / etc. ) |
ミドルウェア | nginx |
データベース | Amazon Aurora / Redis / memcached |
モニタリング | Mackerel |
データ分析 | BigQuery / Looker / Airflow |
デプロイツール | Capistrano / Argo CD |
環境構築 | Docker / Ansible / CloudFormation / Terraform |
CI | Jenkins / GitHub Actions |
ゲームクライアント(言語) | C# |
ゲームクライアント(サウンド) | CRIWARE Adx |
ゲームクライアント(エンジン) | Unity2020.3 |
ゲームクライアント(ミドルウェア) | Monobit Unity Networking ( MUN ) / Firebase SDK / AppsFlyer |
ゲームクライアント(その他) | Repro / Bugsnag / UniWebView / 宴 / SRDebugger |
技術スタックの背景
移管前の技術スタックから少しずつ転換を図っています。
(開発環境へのEKS導入やCI/CD周り改善など)
『Asym』
リアルタイムストラテジー vs ステルスアクション!『Asym Altered Axis』は、ストラテジー側が作り上げ防衛するステージへ、動物に変身できるアクション側のチームが潜入して”Nexus”を奪い脱出を目指す、1vs最大5のクロスジャンルゲーム。現在開発中でSteam(Windows PC)にてリリース予定。
技術スタック
サーバサイド(言語、ライブラリなど) | Go / Protocol Buffers |
インフラ | Cloud Run / GameLift |
データベース | Spanner |
モニタリング | Cloud Logging / Cloud Monitoring |
データ分析 | BigQuery |
デプロイツール | |
環境構築 | Docker / Terraform |
CI | GitHub Actions / Jenkins |
ゲームクライアント(言語) | C++ ( Visual Studio 2022 & ReSharper ) |
ゲームクライアント(サウンド) | Wwise |
ゲームクライアント(グラフィックス) | Maya |
ゲームクライアント(エンジン) | Unreal Engine 5 |
ゲームクライアント(その他) | Niagara / Gameplay Ability System / Online Subsystem Steam / KawaiiPhysics / Protocol Buffers |
技術スタックの背景
〈クライアント〉
少人数精鋭、1年でαリリースするという目標を達成するために、ゲームジャンル(マルチプレイ3Dアクション)にマッチしたUnreal Engineをゲームエンジンに採用しました。開発をより効率的に進めるために、Unreal Engine 5での新機能の活用も積極的に行っています。
〈サーバ〉
少人数精鋭でのサービスグロースを見据えてCloud Run / Spanner / GameLiftなどスケール性のあるマネージドサービスを中心に構成しています。実装面の工夫としては、protoからのコード生成を拡張して開発効率化を図っています。またクライアントのキャッシュにより、通信結果を予測してのUX向上や、トラフィックの削減などを図っています。
MIXI TECH CONFERENCE 2023 を3/1(水)より開催します!
MIXI TECH CONFERENCE では、本記事で取り上げてきたサービスやプロダクトについて、それぞれの技術や開発組織など、私たち技術者たちがこれまでの経験の中から得られた知見やノウハウ、今現在、抱えている課題、思い描いている未来像などを共有します!
自社に閉じることなく、世の中の技術発展を目指し、一緒にエンジニア業界を盛り上げていければと思いますので、ぜひご参加頂ければと思います。イベント詳細や参加登録は以下の公式サイトで受け付けております。奮ってご参加ください!