ミクシィのサービスと技術スタック(開発環境)についてまとめてみた その2

ミクシィのサービスと技術スタック(開発環境)についてまとめてみた その2

事業部・部門

目次

開発本部 AI相談室
開発本部 セキュリティ技術グループ
開発本部 次世代育成
開発本部 インフラ室 モンスト関連
開発本部 インフラ室 TIPSTAR関連

データマーケティング室
解析グループ
アライアンス統括本部
CS部CREグループ
テクニカルアートグループ

※前ページ サービス・プロダクト

 

開発本部 AI相談室

部門の取り組み 

AI相談室は、技術組織として存在しているわけではなく、社内Slackのオープンチャンネルのコミュニティとして活動しています。気軽に質問できる場だけでなく「最悪困ったときはどうにかしてくれる」という場所でもありたいと考えています。

※詳細はコチラ

技術スタック

サーバーサイド(言語、ライブラリなど) elixir、Go、Ruby
インフラ gcloud、AWS、オンプレ
ミドルウェア nginx、nats、mediahub
データベース MySQL、Dynamo、TokyoTyrant
モニタリング Grafana、Datadog、rrdtool
データ分析 BigQuery、Hive
デプロイツール consul+stretcher、CodeDeploy、k8s
環境構築 Terraform、Ansible、Chef
CI circleCI、Jenkins
機械学習ライブラリ tensorflow(keras)、Pytorch

 

 


開発本部 セキュリティ技術グループ

部門の取り組み

セキュリティ技術グループでは、脆弱性診断などのリスク分析をはじめ、情報セキュリティの監視や対策の支援を行っています。そのほかにもe-learningや新卒エンジニアの研修といった教育コンテンツを提供したり、情報セキュリティインシデントへの対応を目的としたmixirtの運営に取り組んでいます。プロダクトを開発をしている部署ではないため、情報セキュリティの検査/監視/対策などで扱っているものを中心に記載しています。言語は何かしたい時に使うことが多いものです。特にこだわりや縛りがあるワケではないので状況に応じてpowershellを書くこともあります。

技術スタック

サーバーサイド(言語、ライブラリなど) python、Go
インフラ AWS、GCP
データベース PostgreSQL
モニタリング GuardDuty、SecurityMonkey
データ分析 Graylog、Athena
デプロイツール CodeDeploy
環境構築 Terraform
CI Jenkins
その他 TCP/IP、HTTP、LocalProxy、ReverseProxy、OIDC、SAML

技術的課題

主にリモートワークにおける課題ですが社外からでも安全便利に社内システムなどにアクセスが行えるようにする必要がありました。社外から業務利用のシステムに安全にアクセスするにはVPNや踏み台を使う必要がありましたが、VPNはクライアントの立ち上げやネットワークの切り替えが面倒であったり、個人で踏み台を用意するのは面倒という課題がありました。

課題解決について

ゼロトラストモデルを参考にしたリモートアクセスの実装を行っています。分かりやすいところを例に挙げると、勤怠管理システムやJiraやconfluenceにVPNを利用せずにアクセスできるようにしたのが主な例です。どれもセキュリティ抜きにすればインターネット公開は出来なくは無いとは思いますが、インターネット公開した時に特に考えなければならないのはシステム外部からの攻撃です。最近のWebアプリであれば当たり前のようにユーザ認証もついていますが、この攻撃においてはユーザ認証を行わずとも、脆弱性を突くことで管理権限を奪えるケースも少なくありません。攻撃のアクセスをシャットアウトするのと、情報セキュリティに問題のある社員ユーザを速やかにブロックするために、通信経路上にリバースプロキシのようなものを設けてOkta認証を行っています。情報資産を持つシステムの少し手前にプロキシを置いて、情報資産への通信全てを検証&アクセス制御する事で、バックエンドのシステムに脆弱性があったとしても、認証を迂回できないようにしています。この構成だとクライアントレスで済むのも特徴です。これによりWebブラウザにURLを打ち込むだけで、一定のセキュリティ強度を保った状態でリモートアクセスできるようになりました。

 

 


開発本部 次世代育成

部門の取り組み

次世代育成と担当しているチームでは、既存のプログラミングソフトの使い方などではなく、実際にプログラムのコードを使いながらも楽しくいつの間にか理解が進み、入力したコマンドでどのような動きをするのか、といった実践を中心とした教育プログラムを検討し、中学生に向け、啓発活動を行っています。

※詳細記事はコチラ

技術スタック

言語、ライブラリなど エンジン:Unity
開発言語:C#
学習用script: Lua、Unity(WebGL)
ミドルウェア Photon
CI Unity Cloud Build

コメント

担当 田那辺
担当 田那辺
次世代育成のコンテンツの一つとしてプログラミング体験ができるソフトウェア(アプリ)を短期で用意したいという状況と、実現したい表現の関係、それから担当者がゲーム畑エンジニアとして長らくやってきたことでこの環境にしています。Luaについては、ゲームスクリプト系としては比較的ポピュラーで提供しやすいという面と、記述方法としても学習後に転用がある程度効く一般的な文法でもあると考えて導入することを決めました。CloudBuildについて、恐らくミクシィで本件しか使っていないと思いますが、初期設定コストほぼゼロなことと、実行環境用にマシンが不要なこと、どのUnityでもビルドがすぐできるなど、今の自分のプロジェクト規模において大変有用だと感じながら使用しています。おそらく大規模開発や、CloudBuildを使用する他プロジェクトが出てくると検討事項が出てくるのではと思っています。

サーバーサイドについて、今の時点では、クライアントソフトウェア単独とPhotonによってのみ必要な最低限要件が賄えていることから、サーバーサイドに何も構築をしておらず、いい意味で言えば使い勝手よくランニングコストがほぼない環境にしています。なおアプリは一般公開はしておらず、ミクシィに企業訪問として来社してエンジニア職の体験をされる学生や渋谷の近隣の中学生などに学習機会として使用しているのみです。

 


開発本部 インフラ室 モンスト関連

部門の取り組み

適切な投資、安定を常に心がけてモンストのインフラを準備、運用しています。継続して、MPLS網を運用してサーバを収容し、VPCと呼ばれるようなものをオンプレミスに作っています。

技術スタック

インフラ オンプレミス、GCP、AWS、IBM
モニタリング zabbix Prometheus
データ分析 gcp cloud logging
デプロイツール 自作
環境構築 ansible(ネットワーク機器には使ってない)
CI circle ci
その他 Pagerduty

コメント

室長 吉野
室長 吉野
クラウドサービスをうまく使って効率的な運用をしています。

 


 

開発本部 インフラ室 TIPSTAR関連

部門の取り組み

映像の伝送技術、加工技術、機械学習を組み合わせて、映像制作をし、配信しています。webベースでライブ試聴しながら映像編集が可能です。機械学習が人間の代わりに作業も可能です。

技術スタック

フロントエンド(言語、ライブラリなど) Vue.js
サーバーサイド(言語、ライブラリなど) Go、C++、Python
インフラ GCP、オンプレミス、AWS、GKE
ミドルウェア OpenGL
データベース CloudSQL
モニタリング zabbix
環境構築 ansible、Docker
CI circle CI
機械学習ライブラリ Cloud AutoML Vision Edge、Edge TPU、TensorFlow
その他 SMPTE(2022/2110/12M/いろいろ)

コメント

室長 吉野
室長 吉野
事業に必要なことを技術で解決していく最高に楽しい仕事です。これから事業がやりたいことを技術で可能にしていくことが楽しいです。


 

データマーケティング室

部門の取り組み

データマーケティング室では、モンスト事業本部および他事業部における売上向上の支援を主に行っています。主な業務は施策の効果測定や意思決定支援、改善施策の実施とそれに関わる開発などです。

技術スタック

サーバーサイド(言語、ライブラリなど) Python、Go、R
インフラ AWS (EC2、AWS Batch、Lambda、S3)、GCP
ミドルウェア Luigi、Apache Airflow、Apache Beam、PyBuilder
モニタリング CloudWatch、M/Monit
データ分析 Redshift、Jupyter Notebook、Zeppelin、Redash、BigQuery、Looker
デプロイツール CloudFormation、Docker、Terraform
CI CircleCI
機械学習ライブラリ TensorFlow、scikit-learn

コメント

業務で成果を出しやすくするため、データ分析や機械学習を行う上でよく使われるものやチームメンバーの使ってみたいものを選んでいます。インフラ周りではマネージドなものがあればそれを利用する傾向があります。
室長 松尾
室長 松尾

技術的課題

関わる部署が増え、それぞれの部署のDBからデータを抜き出してBigQueryにロードするタスクが増加したため、各プロジェクトで実装を流用できるような、サービス用DB -> BigQueryへのデータ転送ツールを実装しています。サービスのDBでは1000分割シャーディングを行っていたり、 テーブル”hoge”とその拡張テーブル”hoge_ex”を1つのテーブルとして扱っているなど、サービスのDBから抜き出したデータをある程度を加工しないとBigQueryにロードしても分析しづらく、元のDBのデータを加工する実装をどこかに差し込む必要がありました。

課題解決について

1000分割シャーディングされたMySQLテーブルを扱う点で既存のEmbulkのような技術を採用するのが難しかったため、またデータの加工を行ないたかったため、GCPのCloud Dataflow(Apache Beam)を採用することにしました。DataflowではDBのデータを行ごとに並列に加工していくことができるため、サービスDBからのデータ読み込み時間≒加工等を含めた全体の実行時間 でデータを転送でき、とても速いです。また、マネージドなサービスなので、(サービスDBが負荷がかかりすぎないことに気をつける以外は)インフラ管理を特に意識することなく運用できています。Dataflowに実装をデプロイする際には実装を1つのPythonファイルにする必要がありますが、PyBuilderを使用してプロジェクト間で共通の実装とプロジェクト固有の設定を分離することで、共通の実装をプロジェクト間で使い回せるようにしています。


 

解析グループ

部門の取り組み

解析グループでは、ミクシィグループの各部署が業務遂行時に発生する様々な課題を調査、分析しています。各サービスで発生する疑問を分析し、フィードバックしています。課題によっては、1時間から1ヶ月かかるものもあれば、2TB/1日のデータ量を扱うものもあります。より具体的に説明すると「正確に素早く集計をする仕組みを作り、さらにチューニングする」「分析の助けになるツールを作る」「計算結果の評価をしやすい可視化を行う」「人手がかかっている定型作業を、データを用いて自動化する」などがあります。

技術スタック

サーバーサイド(言語、ライブラリなど) Ruby、Python、Luigi、Airflow
インフラ AWS(EMR、Kinesis、Lambda、Batch、Glue、ECS、S3、Cloud9、EC2)、GCP(Dataproc、Dataflow、Cloud Composer、GCS、GCE)
モニタリング CloudWatch Logs、Grafana、Cloud Logging
データ分析 Redshift、Redshift Spectrum、Athena、BigQuery
環境構築 Terraform、CloudFormation
CI CodeBuild、CodePipeline、Cloud Build、GitLab
機械学習ライブラリ TensorFlow、scikit-learn、Prophet、SageMaker
可視
分析ツール
Looker、Zeppelin、Metabase、Colaboratory

コメント

マネージャー 吉野
マネージャー 吉野

モンストを始めとしたXFLAGの様々なサービスの大規模なデータをEMR, Redshift, Athenaで処理し、AWS上に構築したペタバイト規模のデータレイク、データウェアハウスに効率的に格納しています。様々な部署のユーザーが必要なデータにアクセスし、意思決定のための分析、レポーティングやその他様々なデータ活用を行っています。また今後はマルチクラウドを想定してGCPへの移行も検討。分析のアウトプットとして利用されるサービスと連携しやすいG Suiteとの親和性や大規模データをフル活用出来るBigQueryなど、これら技術を導入していきデータを必要とする人が必要なデータに素早くアクセス出来るデータ基盤構築を進めています。

技術的課題

Looker導入
内製ダッシュボードをはじめ、Metabase、Redash、Zeppelinなど様々なツールを用いて分析、可視化を行っていますが、どのサービスやツールも決め手に欠けており各所にデータが散らばってしまっていました。ツールの運用負荷やユーザー権限の二重管理、車輪の再発明などの問題も生じていました。また、データ分析したいプランナーなどの非エンジニアはデータにアクセス出来たとしても、SQLが書けない、データの理解が難しい、ということもあり、それらをエンジニアが巻き取ることになります。分析エンジニアやアナリストが本来注力すべき分析業務に手が回らないといった状況になりつつありました。こういった状況を踏まえBIツールの統一、データガバナンス向上のためLookerを導入しました。

課題解決について

まだ導入を進めている段階ではありますが、BIツールの運用負荷削減、LookMLでコード管理することでKPI定義の統一や書き捨てられていた分析クエリを再利用するなどの、体制を整えました。また、エンジニアが開発する必要があったETLバッチや外部サービスとの連携(slackやgoogleシート)など、幅広くLookerで対応することが可能になりました。今後更に導入を進めていき、データを必要とする人が気軽に分析でき、エンジニアやアナリストは価値ある分析業務に注力出来る体制を築いていきたいと考えています。

 


 

アライアンス統括本部

部門の取り組み

アライアンス統括本部では、千葉ジェッツなどのスポーツ事業やライブエンタメに関わる領域を担当しています。システム部門では、来場者4万人のXFLAG PARK関連のシステムをはじめ、ライブエンタメに関するシステム開発・保守を行っています。また、ライブエンタメ分野での新規事業の開発を進めています。

技術スタック

フロントエンド(言語、ライブラリなど) Node.js、TypeScript、React
サーバーサイド(言語、ライブラリなど) Go、Ruby on Rails、gRPC
インフラ AWS、GCP
ミドルウェア nginx、Puma、Unicorn、Sidekiq
データベース MySQL、DynamoDB、Cloud Spanner
モニタリング Grafana、CloudWatch、CloudWatch Logs、New Relic
データ分析 BigQuery
デプロイツール Capistrano、CircleCI
環境構築 Docker、AWS Elastic Beanstalk、Terraform、GKE(Kubernetes)
CI CircleCI、Jenkins、CloudBuild

コメント

新規プロジェクトの作成が多い部署でもあり、手早く作ることができ業務委託先とも連携しやすいRuby on Railsの採用が多かったのですが、徐々にバックエンドとしてGoでのAPI、フロントエンドはReact・TypeScriptといった組み合わせが増えてきています。Goの採用理由としてはRubyと比べた実行速度の速さ、シンプルな言語仕様によるレビューの容易さ、またコンテナでの実行に非常に適している(実行イメージの小ささ、起動速度の速さ)などがあります。Reactに関しては、初期の学習コストは高いものの、長期的に見てこちらがデファクトになっていくのではという見立てで採用しています。

バックエンドとフロントエンドとの連携では、OpenAPIやProtocol Buffersを利用し、コードの自動生成などを通じて迅速かつバグの少ない開発を行えるようにしています。インフラでは最近はほぼkubernetes(GKE)で統一しています。アプリを実行する部分(PODレイヤーと部内では呼んでいます)はアプリ開発者が自ら定義し、ノードの管理はインフラ担当が行っています。こちらも学習コストの高さがありますが、一度慣れてしまえば定義のコード化のおかげでレビューもしやすく、現在状態の把握も容易というメリットを感じているので、今後も使い続ける予定です。最初にもあるように新規プロジェクトが多いこともあり、新しめの技術も積極的に採用して試してみる環境となっています。

マネージャー 數藤
マネージャー 數藤

技術的課題

1,PARK2020 オンライン視聴
・これまで経験がない大量アクセスが見込まれる
・クイズ回答などでリアルタイム性がもとめられる

課題解決について

1.これまで経験がない大量アクセスが見込まれる
こちらはCloud PubSubやRedis、Cloud Spannerを積極的に用いることで対応しようとしています。Spannerに関してはあまり知見がなく手探り状態で始めましたが、事前の負荷測定や事前warmupの検証などを行い、想定アクセス数に耐えられるだろうという見込みのもとに採用しました。

2.クイズ回答などでリアルタイム性がもとめられる
こちらはWebSocketを活用することで対応していますが、すべての通信をWebSocketでは行わず、リアルタイム性があまり求められないものは通常のAPI呼び出しにして負荷が一点に集中しないような作りにしています。


 

CS部CREグループ

部門の取り組み

CS部CREグループは「CSスタッフのクリエイティビティを最大化する」というミッションのもと、CSスタッフのユーザーに寄り添った対応を技術面から支援しています。CREでは、スタッフの手作業を自動化するだけでなく、CSスタッフが成長したり、ひらめきを得られたりするようなシステムを開発しています。

技術スタック

フロントエンド(言語、ライブラリなど) JavaScript、TypeScript
サーバーサイド(言語、ライブラリなど) Ruby(Ruby on Rails、Padrino)、Python、Go、Elixir(Phoenix)
インフラ AWS(EC2、S3、RDS、SageMaker、CodeBuild、Lambda、API Gateway、Athena、etc.)、GCP(BigQuery、GCE、GAE, Pub/Sub、CloudFunctions、CloudSearch、etc.)
ミドルウェア nginx
データベース MySQL、PostgreSQL、InfluxDB
モニタリング CloudWatch
データ分析 Athena、BigQuery
デプロイツール Capistrano
環境構築 Docker、Anshible、 Packer、Terraform、Apex
CI CircleCI
機械学習ライブラリ Chainer
検索 CloudSearch

コメント

マネージャー 豊川
マネージャー 豊川
CREが開発・保守している各種サービスのCS向け管理ツールは、プロダクトと同じコードベースで開発・管理しています。そのため、モンスターストライク、TIPSTAR、6gramというようにプロダクトが増えるにつれて、CREが扱う技術スタックも増えていきます。一方、CRE独自で取り組んでいるプロダクトもあります。独自のプロダクトでは、機械学習やCloudSearchなど、開発者が必要と判断した技術は何でも取り入れています。

技術的課題

CSスタッフが返信に用いるテンプレートは、各サービスごと、各委託先企業ごとにバラバラに管理されており、全容が把握できておらず、ノウハウが散らばった状態となっていました。そのため、サービスの仕様変更や対応方針の変更をテンプレートに反映するときに対応漏れが発生していました。

課題解決について

Web管理画面を開発してCS対応のノウハウとなるテンプレートを集約し、AWS Cloud Searchを導入して、キーワード検索できるようにしました。さらに、返信分に用いるテンプレートだけでなく、対応方針や対応メモなども記録できるようにし、これらも検索できるようにしました。


 

テクニカルアートグループ

部門の取り組み

テクニカルアートグループは、全社横断的に技術支援する集団です。プロジェクトサポート(DCCツールカスタマイズ等による業務効率化)・コンテンツ開発(VTuberやAR、オルタ3シミュレーター等のUnityベースの施策)・研究開発(CreativeAI、XR、Unity映像制作)という3つの軸から技術支援を行っています。

テクニカルアートグループのツール開発事例 

技術スタック

ゲームエンジン Unity(C#)
Photoshopカスタマイズ JavaScript、TypeScript、Vue.js
DCCツール開発 Python
インフラ GCP
データ分析 Bugsnag(社内ツールログの可視化用)
CI Jenkins
機械学習ライブラリ Tensorflow
DCCツール Maya、Shotgun、Houdini、Substance Designer/Painter 

コメント

◆プロジェクトサポート
DCCツール(Maya, Shotgun)のカスタマイズは基本Pythonで行っています。最近はPhotoshopのツールサポート※1もしていて、JavaScript(ES2015以降、TypeScript、Vue.JS)を触るケースも増えています。

◆コンテンツ開発
Unityエディタ拡張やARアプリ開発・VTuber施策はC#で行っています。モーションキャプチャシステムは最近はNeuron Pro/Studioを使用しています。

◆研究開発

CreativeAIの研究開発※2では、Pythonベースの開発で機械学習ライブラリはTensorflowを採用、インフラはGCPを導入して高速な機械学習を実現しています。 

リーダー 長舩
リーダー 長舩

技術的課題

色々ありますが、昨今のコロナ禍で起きた課題とその解決方法について紹介したいと思います。2020年4月以降、弊社もリモートワーク中心になり、各プロジェクトのツール使用状況がより見えにくくツールサポートがしにくい状況になっていました。

課題解決について

エラー監視ツールBugsnagを導入して、その出力ログを解析し「各ツールがどれぐらいの頻度で誰に使われているか」の情報を可視化しました。それにより各プロジェクトのツール状況を把握でき、コロナ禍以降で使用回数が減っているツールに関してユーザーににヒアリングをして環境変更により使用できなくなっていた等の問題発見して解決をしていきました。

 


最後に

各プロダクト・部門の、様々な技術スタックが採用されている詳細をまとめて紹介しました。ミクシィのサービス・事業部が利用している開発言語に『Go』が目立ったような気がします。プロダクトや課題解決のため何が最適な技術なのか、各部門が都度判断し、日々ユーザーのためにサービスを展開しています。前回の記事公開から丸2年が過ぎ、残念ながらサービスクローズになってしまったサービスもありますが、今後もミクシィが大切にしている「コミュニケーション」を軸に、新しい価値創造にチャレンジしていきます。

 

 

PAGE TOP